Skip to content

Commit f234f54

Browse files
author
Nathaniel Saul
authored
Merge pull request #12 from Cimagroup/master
Persistent entropy
2 parents e7401fa + e0b17ea commit f234f54

File tree

5 files changed

+322
-1
lines changed

5 files changed

+322
-1
lines changed

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,4 @@ __pycache__
88
.ipynb_checkpoints
99

1010
build
11-
dist
11+
dist
Lines changed: 185 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,185 @@
1+
{
2+
"cells": [
3+
{
4+
"cell_type": "markdown",
5+
"metadata": {},
6+
"source": [
7+
"# Finding significant difference with persistent entropy"
8+
]
9+
},
10+
{
11+
"cell_type": "code",
12+
"execution_count": 27,
13+
"metadata": {},
14+
"outputs": [],
15+
"source": [
16+
"import numpy as np\n",
17+
"import ripser\n",
18+
"import matplotlib.pyplot as plt\n",
19+
"import random\n",
20+
"from persim.persistent_entropy import *\n",
21+
"from scipy import stats"
22+
]
23+
},
24+
{
25+
"cell_type": "code",
26+
"execution_count": 1,
27+
"metadata": {},
28+
"outputs": [
29+
{
30+
"ename": "ModuleNotFoundError",
31+
"evalue": "No module named 'cechmate'",
32+
"output_type": "error",
33+
"traceback": [
34+
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
35+
"\u001b[0;31mModuleNotFoundError\u001b[0m Traceback (most recent call last)",
36+
"\u001b[0;32m<ipython-input-1-fa4902125d99>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0;32mimport\u001b[0m \u001b[0mcechmate\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
37+
"\u001b[0;31mModuleNotFoundError\u001b[0m: No module named 'cechmate'"
38+
]
39+
}
40+
],
41+
"source": [
42+
"import cechmate"
43+
]
44+
},
45+
{
46+
"cell_type": "markdown",
47+
"metadata": {},
48+
"source": [
49+
"This notebook shows how persistent entropy can be used to find significant difference in the geometrical distribution of the data. We will distinguish point clouds following a normal distribution from point clouds following a uniform distribution. Persistent entropy allow to use a one dimensional non-parametric statistical test instead of a multivariative test."
50+
]
51+
},
52+
{
53+
"cell_type": "markdown",
54+
"metadata": {},
55+
"source": [
56+
"## Construct the data\n",
57+
"We will generate a sample of 20 point clouds, 10 following a normal distribution and 10 following the uniform one. Each point cloud is 2D and have 50 points."
58+
]
59+
},
60+
{
61+
"cell_type": "code",
62+
"execution_count": 28,
63+
"metadata": {
64+
"scrolled": true
65+
},
66+
"outputs": [],
67+
"source": [
68+
"# Normal point clouds\n",
69+
"mu = 0.5\n",
70+
"sigma = 0.25\n",
71+
"l1 = []\n",
72+
"for i in range(10):\n",
73+
" d1 = np.random.normal(mu, sigma, (50,2))\n",
74+
" l1.append(d1)\n",
75+
"# Uniform point clouds\n",
76+
"l2 = []\n",
77+
"for i in range(10):\n",
78+
" d2 = np.random.random((50,2))\n",
79+
" l2.append(d2)"
80+
]
81+
},
82+
{
83+
"cell_type": "code",
84+
"execution_count": 29,
85+
"metadata": {},
86+
"outputs": [
87+
{
88+
"data": {
89+
"image/png": "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l3Pttdeyf/9+lixZwsKFC6moqOD1118/rWVx/IIdL7/8Mpdccgn9+/ePth2I3+fKK69k48aNVFVV0djYSEVFBdOnTwdC7X0h1Gtmzpw5DBo0iLKysuiZzcaNGxk7dixTp07lvPPOY/r06WnbH2fKSrXMdWkeN8As20aklNOO1WW2HXcmLJ0myzOOtmpububtt9/mhRde4L777uPll1+OPnbmmWeydOlSHnroIZ5//nmOHz/O2LFjWb9+Pf379+fGG2/k17/+NbfffjsARUVF0V4xS5YsoUOHDrz22ms8/PDDTJo0ia1bt9KlSxe+8pWvMHv2bLp27Rp9rw8++IB7772XrVu30rlzZ8aNG8eQIUNOG291dTXvv/8+HTt2pKGhgZKSEmbOnEmnTp340Y9+BMCjjz4abVlcUFDA8uXLW73G/v37efXVV9m7dy/jxo1jz549ST+f6upqfvWrXyU8c1m9ejW1tbVs376dI0eOcOGFFzJ69GggdMaza9cuevbsyciRI9m0aVObevfE094yKv907pXZdjwyYSmLM450knVdjN0+ZcoUwFqb2t27d9O3b1/69+8PwE033RRteQtwzTXXtNo/kgopKyvjq1/9Kj169KBjx46ce+65HDhwoNW+b731VrSdbocOHU57rYjy8nKmT5/Ob3/726Ttf+H0lsWxpk2bRrt27ejXrx/nnntu0k6T6bzxxhtcd911FBQUcNZZZzFmzBi2bNkCwLBhw+jVqxft2rWjoqLC9hbAGtxV/hl/DxTGTTQqLA5tT8ITE5ayOONIp2vXrnz88cettn300Ud069Ytej/SytdKm9p0qYVUbYIjtyP3E72XlRbA69atY9asWWzdupULLrgg6ZjdbgEc+/M60QJYg7vKP+XT4KpF0PkcQEJ/X7UoZWrDrR7urWRxxpFOp06d6NGjB+vXrwdCgf2Pf/xj1umB8847j/3790fTGE8++aRtLW+HDx/Oxo0bOXr0KE1NTaxcufK0fU6ePMmBAwcYN24cCxYsoKGhgU8++STjFsArV67k5MmT7N27l3379jFgwAD69OlDbW1t9D3efvvt6P6FhYXRpQRjjR49mmeffZaWlhYOHz7Ma6+9xrBhw7L7ADKkjcNUfiqfllGe2hMTlsbf0zrnDmnPOKx44oknmDVrFnfeeScA9957L1/5yleyeq2ioiKWLVvG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\n",
90+
"text/plain": [
91+
"<Figure size 432x288 with 1 Axes>"
92+
]
93+
},
94+
"metadata": {
95+
"needs_background": "light"
96+
},
97+
"output_type": "display_data"
98+
}
99+
],
100+
"source": [
101+
"# Example of normal and uniform point clouds\n",
102+
"plt.scatter(d1[:,0], d1[:,1], label=\"Normal distribution\")\n",
103+
"plt.scatter(d2[:,0], d2[:,1], label=\"Uniform distribution\")\n",
104+
"plt.axis('equal')\n",
105+
"plt.legend()\n",
106+
"plt.show()\n"
107+
]
108+
},
109+
{
110+
"cell_type": "markdown",
111+
"metadata": {},
112+
"source": [
113+
"## Calculate persistent entropy \n",
114+
"In order to calculate persistent entropy, is necessary to generate the persistent diagrams previously. Note that we do not consider the infinity bar in the computation of persistent entropy since it does not give information about the point cloud. "
115+
]
116+
},
117+
{
118+
"cell_type": "code",
119+
"execution_count": 30,
120+
"metadata": {},
121+
"outputs": [],
122+
"source": [
123+
"# Generate the persistent diagrams using ripser\n",
124+
"p = 0\n",
125+
"dgm_d1 = []\n",
126+
"dgm_d2 = []\n",
127+
"for i in range(len(l1)):\n",
128+
" dgm_d1.append(ripser.ripser(l1[i])['dgms'][p])\n",
129+
" dgm_d2.append(ripser.ripser(l2[i])['dgms'][p])\n",
130+
"# Calculate their persistent entropy.\n",
131+
"e1 = persistent_entropy(dgm_d1)\n",
132+
"e2 = persistent_entropy(dgm_d2)"
133+
]
134+
},
135+
{
136+
"cell_type": "markdown",
137+
"metadata": {},
138+
"source": [
139+
"## Statistical test\n",
140+
"Finally, perform the statistical test which suits better for your aim. In our case, we perform the Mann–Whitney U test. You can claim there are differences in the geometry of both point clouds if the pvalue is smaller than the significance level α (usually α is 0.05)."
141+
]
142+
},
143+
{
144+
"cell_type": "code",
145+
"execution_count": 31,
146+
"metadata": {},
147+
"outputs": [
148+
{
149+
"data": {
150+
"text/plain": [
151+
"MannwhitneyuResult(statistic=3.0, pvalue=0.00021981937631328227)"
152+
]
153+
},
154+
"execution_count": 31,
155+
"metadata": {},
156+
"output_type": "execute_result"
157+
}
158+
],
159+
"source": [
160+
"stats.mannwhitneyu(e1, e2)"
161+
]
162+
}
163+
],
164+
"metadata": {
165+
"kernelspec": {
166+
"display_name": "Python 3",
167+
"language": "python",
168+
"name": "python3"
169+
},
170+
"language_info": {
171+
"codemirror_mode": {
172+
"name": "ipython",
173+
"version": 3
174+
},
175+
"file_extension": ".py",
176+
"mimetype": "text/x-python",
177+
"name": "python",
178+
"nbconvert_exporter": "python",
179+
"pygments_lexer": "ipython3",
180+
"version": "3.6.4"
181+
}
182+
},
183+
"nbformat": 4,
184+
"nbformat_minor": 2
185+
}

0 commit comments

Comments
 (0)