web-dev-qa-db-ja.com

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
...

どうすれば入手できますか?この質問ですみません。

14
thepolina

自分を助ける時間。後

km.fit(M)

私たちは走る

labels = km.predict(M)

labels、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
21
thepolina

更新:次の方法で実行できます

"""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として持つ辞書が作成されます。

0
BorisDedejski