Своего рода кластер 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
Другие вопросы по тегам