Как напечатать результат кластеризации в sklearn
У меня скудная матрица
from scipy.sparse import *
M = csr_matrix((data_np, (rows_np, columns_np)));
тогда я делаю кластеризацию таким образом
from sklearn.cluster import KMeans
km = KMeans(n_clusters=n, init='random', max_iter=100, n_init=1, verbose=1)
km.fit(M)
и мой вопрос крайне нуб: как распечатать результат кластеризации без какой-либо дополнительной информации. Я не забочусь о заговоре или расстояниях. Мне просто нужно кластеризованные строки, выглядящие так
Cluster 1
row 1
row 2
row 3
Cluster 2
row 4
row 20
row 1000
...
Как я могу получить это? Извините за этот вопрос.
1 ответ
Время помочь себе. После
km.fit(M)
мы бегаем
labels = km.predict(M)
который возвращает метки, numpy.ndarray. Количество элементов в этом массиве равно количеству строк. И каждый элемент означает, что строка принадлежит кластеру. Например: если первый элемент равен 5, это означает, что строка 1 принадлежит кластеру 5. Давайте поместим наши строки в словарь списков, выглядящих следующим образом {cluster_number:[row1, row2, row3], ...}
# in row_dict we store actual meanings of rows, in my case it's russian words
clusters = {}
n = 0
for item in labels:
if item in clusters:
clusters[item].append(row_dict[n])
else:
clusters[item] = [row_dict[n]]
n +=1
и распечатать результат
for item in clusters:
print "Cluster ", item
for i in clusters[item]:
print i
Обновление: вы можете сделать это следующим образом
"""data= data clustered retrieved by function as you want"""
"""model = result from the data with got by KMeans"""
"""cluster = clusters formed by the model"""
from sklearn.cluster import KMeans
data = clusteredData()
model = KMeans(n_clusters=5, init='random', max_iter=100, n_init=1, verbose=1)
cluster = model.fit_predict(scale(data))
dictionary = {}
for index in range(len(data)):
if cluster[index] in dictionary:
value = []
value = dictionary[cluster[index]]
value.append(data[index])
dictionary[cluster[index]] = value
else:
dictionary[cluster[index]]=data[index]
Это создаст вам словарь с NUMBER_OF_THE_CLUSTER в качестве ключа и данными в этом кластере в качестве VALUE