2017-05-04 9 views
0

私はエルボーとBICメソッドを使ってKmeansでKの数を推定しようとしています.Xはデータポイントの多次元配列です(100000データポイント×100個のフィーチャ)
ここは私が使用するコードです肘: Elbow method BIC methodKmeansでKを推定するメトリック

Ks = [40,50,60,70,80,90,100,110,120] 
ds = [] 
for K in Ks: 
    cls = MiniBatchKMeans(K, batch_size =1000, random_state = 101) 
    for i in xrange(0, len(X), 1000): 
     chunk = newvec[i:i + 1000] 
     cls.partial_fit(chunk) 
    ds.append(cls.inertia_) 
plt.plot(Ks, ds) 
plt.xlabel('Value of K') 
plt.ylabel('Distortion') 
plt.show() 

私はBICに使用するコードはここでここby Prabhath Nanisetty

から来ているが、私はこれらのメソッドのそれぞれを使用して取得していますプロットであります

使用する正しいK値は何ですか?これらの結果に基づいて自分のデータセットに使用する正しいメトリックですか? ありがとうございます。

答えて

1

あなたのデータセットは、あまりにも多くの次元とリスクを抱えていると思います。the curse of dimensionalityに苦しんでいます。

しかし、あなたの質問に答えるには、少なくともエルボーの方法から、エルボーの方法で行くK = 90のように思えます。 BICメソッドを使用するには、その特定の実装に応じて最も高い値を見てください;いくつかの実装は符号を逆にします。これは少し曖昧になりますが、K = 60以降はすべてがほぼ同等に機能します。

this article on the same topicをご覧ください。 Gap法であるKを推定する別の方法を紹介します。私はタイを破り、3つのメトリクスのうち2つ以上で返されたベストKを選択するために1つ以上のメトリックを実行するといいでしょう。

関連する問題