2017-01-17 4 views
0

Вот реализация алгоритма kmeans, что я собрал из kmeans scikit документации и блоге обсуждения kmeans:kmeans кластеризация: как получить доступ к кластеру точек данных

#http://scikit-learn.org/stable/modules/generated/sklearn.cluster.KMeans.html 
#http://fromdatawithlove.thegovans.us/2013/05/clustering-using-scikit-learn.html 

from sklearn.cluster import KMeans 
import numpy as np 
from matplotlib import pyplot 

X = np.array([[10, 2 , 9], [1, 4 , 3], [1, 0 , 3], 
       [4, 2 , 1], [4, 4 , 7], [4, 0 , 5], [4, 6 , 3],[4, 1 , 7],[5, 2 , 3],[6, 3 , 3],[7, 4 , 13]]) 
kmeans = KMeans(n_clusters=3, random_state=0).fit(X) 

k = 3 
kmeans.fit(X) 

labels = kmeans.labels_ 
centroids = kmeans.cluster_centers_ 

for i in range(k): 
    # select only data observations with cluster label == i 
    ds = X[np.where(labels==i)] 
    # plot the data observations 
    pyplot.plot(ds[:,0],ds[:,1],'o') 
    # plot the centroids 
    lines = pyplot.plot(centroids[i,0],centroids[i,1],'kx') 
    # make the centroid x's bigger 
    pyplot.setp(lines,ms=15.0) 
    pyplot.setp(lines,mew=2.0) 
pyplot.show() 

print(kmeans.cluster_centers_.squeeze()) 

Как напечатать/доступ к точкам данных о каждый из k кластеров.

if k = 3 : 
cluster 1 : [10, 2 , 9], [1, 4 , 3], [1, 0 , 3]     
cluster 2 : [4, 0 , 5], [4, 6 , 3],[4, 1 , 7],[5, 2 , 3],[6, 3 , 3],[7, 4 , 13] 
cluster 3 : [4, 2 , 1], [4, 4 , 7] 

Чтение http://scikit-learn.org/stable/modules/generated/sklearn.cluster.KMeans.html не существует атрибут или метод на kmeans объекта для этого?

Update:

kmeans.labels_ возвращает array([1, 0, 2, 0, 2, 2, 0, 2, 0, 0, 1], dtype=int32)

Но как это показывают точки данных в каждой из 3-х кластеров?

+0

Не метод, нет .... пристальнее документацию по вашей ссылке. –

+0

@JackManey ближайший я нашел print (kmeans.labels_), print (kmeans.get_params), print (kmeans.cluster_centers_), но ни один из этих атрибутов не печатает значения кластера. –

+0

... что вы имеете в виду, именно «значения кластера»? –

ответ

0

Если вы используете атрибут _labels вашего объекта KMeans, вы получите массив назначения кластера для каждого обучающего вектора. Порядок массива меток совпадает с вашими данными обучения, поэтому вы можете их закрепить или сделать numpy.where() для каждой уникальной метки.

0

Чтобы получить доступ к точкам данных пост к-средства кластеризации:

добавил код:

sortedR = sorted(result, key=lambda x: x[1]) 
sortedR 

Полный код:

from sklearn.cluster import KMeans 
    import numpy as np 
    from matplotlib import pyplot 

    X = np.array([[10, 2 , 9], [1, 4 , 3], [1, 0 , 3], 
        [4, 2 , 1], [4, 4 , 7], [4, 0 , 5], [4, 6 , 3],[4, 1 , 7],[5, 2 , 3],[6, 3 , 3],[7, 4 , 13]]) 
    kmeans = KMeans(n_clusters=3, random_state=0).fit(X) 

    k = 3 
    kmeans = KMeans(n_clusters=k) 
    kmeans.fit(X) 

    labels = kmeans.labels_ 
    centroids = kmeans.cluster_centers_ 

    for i in range(k): 
     # select only data observations with cluster label == i 
     ds = X[np.where(labels==i)] 
     # plot the data observations 
     pyplot.plot(ds[:,0],ds[:,1],'o') 
     # plot the centroids 
     lines = pyplot.plot(centroids[i,0],centroids[i,1],'kx') 
     # make the centroid x's bigger 
     pyplot.setp(lines,ms=15.0) 
     pyplot.setp(lines,mew=2.0) 
    pyplot.show() 

result = zip(X , kmeans.labels_) 

sortedR = sorted(result, key=lambda x: x[1]) 
sortedR 
Смежные вопросы