Своего рода кластер Kmean
Я попытался запустить этот код в python2.7 с матрицей 20*20, и я хочу получить два кластера, как алгоритм kmean.
JS
import numpy as np
filename = np.genfromtxt('Matrix.txt')
M = np.sort (np.random.choice (2,20))
##m = np.copy(M) => I get an error there : 'module' object is not callable
M= m #this option work better but i am not sure that it is appropriate
#initialization of the clusters
C = {}
for t in xrange(tmax=100):
#determination of clusters
J = np.mean(filename[:,M], axis = 1)
for k in range (2):
C[k] = np.where (J==k, 0,0) # np.where (J==k)=> another error for 'np.where': it take exactly three arguments but one given.I saw that it could take only one argument
#update
for k in range (2):
J = np.mean(filename[np.ix_(C[k],C[k])], axis = 1)
j= np.argmin(J)
m[k] = C[k][j] #[j] => another error for '[j]': invalid index to scalar variable
#results
print M, C
мой результат
{0: 0, 1: 0}
ожидаемый результат
{0:8, 1:12}
в примере это означает, что в кластере "0" имеется 8 элементов, а в кластере "1" - 12. Это, вероятно, из-за функции "np.where", но я не уверен.
Я запускаю программу без всех ошибок, которые я упоминал ранее для получения этого результата, но это не работает так, как должно
Спасибо за вашу помощь
1 ответ
Другой вариант (использует библиотеку Scikit):
import numpy as np
from sklearn import cluster
n_clusters = 2
k_means = cluster.KMeans(n_clusters=n_clusters)
k_means.fit(filename)
values = k_means.cluster_centers_
labels = k_means.labels_
print values
print labels