-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathkmeaninit.py
64 lines (47 loc) · 1.98 KB
/
kmeaninit.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#!/usr/bin/python
import sys
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
from KmeansTrace import KmeansTrace
from DataGrid import DataGrid
def KmeansGrid(Data2D, K, grid):
listeTraceLabels = []
listeTraceCenters = []
listeTraceInertia = []
listeTraceNbIter = []
for c in grid.get_grille():
aKmeans = KmeansTrace(Data2D, K, c, grid)
Labels, Centers, Inertia, NbIter = aKmeans.getAll()
listeTraceLabels.append(Labels)
listeTraceCenters.append(Centers)
listeTraceInertia.append(Inertia)
listeTraceNbIter.append(NbIter)
#print(aKmeans.getLabelsCentersInertia())
#print(aKmeans.getCenter_Init())
return listeTraceLabels, listeTraceCenters, listeTraceInertia, listeTraceNbIter
if __name__ == "__main__":
import time
start_time = time.time()
K = 3
nx, ny = 5,5
# Data reading
#filename = './data/UnequalVar.csv'
#filename = './data/Mixture2D.csv' #----> nbreuses convergences avec K =3 (un peu moins avec K=2)
filename = './data/UnevenlySizedBlobs.csv' #----> nbreuses convergences avec K =3 (un seule avec K =2)
#filename = './data/AnisotropBlob.csv'
df = pd.read_csv(filename, sep='\t', header=None)
Data2D = df.values
# plots
marquershape = 'o'
marquersize = 10
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
ax.plot(Data2D[:,0], Data2D[:, 1], ls='none', marker='o', markersize=2, color=(0.75, 0.75, 0.75))
# All about the digital grid for center init of kmeans
grid = DataGrid(Data2D, nx, ny, K)
# Kmeans computation with center init on the grid
listeTraceLabels, listeTraceCenters, listeTraceInertia, listeTraceNbIter = KmeansGrid(Data2D, K, grid)
print('Nb iter to reach convergence for each init \n', listeTraceNbIter)
print('Unique different value of inertia ', list(set(listeTraceInertia)))
print("--- %s seconds ---" % (time.time() - start_time))