2017-01-09 55 views
4

のは、私は次のように私は通常、「肘」のプロットを生成scipyのダウンロードと、10個のクラスタまで調べてるとしましょう:肘方法のSklearn関数kmeans同等

from scipy import cluster 
cluster_array = [cluster.vq.kmeans(my_matrix, i) for i in range(1,10)] 

pyplot.plot([var for (cent,var) in cluster_array]) 
pyplot.show() 

私はクラスタリングにsklearnを使用してやる気になったので、持っていますしかし、私はscipyの場合のようにプロットする必要がある配列を作成する方法がわかりません。私の推測では、

from sklearn.cluster import KMeans 

km = [KMeans(n_clusters=i) for i range(1,10)] 
cluster_array = [km[i].fit(my_matrix)] 

無効なコマンドエラーがありました。このことについてsklearn方法は何ですか?

ありがとうございました

答えて

5

コードに構文上の問題がありました。彼らは今、固定する必要があります。

Ks = range(1, 10) 
km = [KMeans(n_clusters=i) for i in Ks] 
score = [km[i].fit(my_matrix).score(my_matrix) for i in range(len(km))] 

fit方法はただselfオブジェクトを返します。この行にcluster_arraykmと同じ内容を有する終わるだろう

cluster_array = [km[i].fit(my_matrix)] 

元のコードに。

scoreメソッドを使用すると、クラスタリングの適合度の見積もりを取得できます。各クラスタのスコアを確認するには、単にplot(Ks, score)を実行してください。

+0

整形、'スコア= Xを仮定

は、データセットであります –

5

Kmeansクラスのinertia属性を使用できます。 `[カンザス州iについて関数kmeans(I).fit(my_matrix).score(my_matrix)]

from sklearn.cluster import KMeans 
from matplotlib import pyplot as plt 

X = # <your_data> 
distorsions = [] 
for k in range(2, 20): 
    kmeans = KMeans(n_clusters=k) 
    kmeans.fit(X) 
    distorsions.append(kmeans.inertia_) 

fig = plt.figure(figsize=(15, 5)) 
plt.plot(range(2, 20), distorsions) 
plt.grid(True) 
plt.title('Elbow curve') 
関連する問題