2017-05-04 22 views
0

我試圖使用Elbow和BIC方法估算Kmeans中K的數量.X是多維數據點數組(100000個數據點X 100個特徵)
這裏是我用於彎頭:用於估算Kmeans中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

來這裏是圖我用這些方法中的每一個獲得: Elbow method BIC method

什麼是正確的K值使用?這些是根據這些結果用於我的數據集的正確指標。 謝謝。

回答

1

我認爲你的數據集有太多的尺寸和風險,患有the curse of dimensionality

但是要回答你的問題,至少從肘部的方法來看,它似乎像肘部法K = 90。要使用BIC方法,請查看最高值(根據特定的實現方式;某些實現方式會顛倒符號)。這使得它有點模棱兩可,但是看起來在K = 60之後,它們的表現幾乎同樣好。

你也可以看看this article on the same topic。它介紹了另一種估算K的方法,Gap方法。我會說運行一個更多的指標來打破關係,然後選擇3個指標中的2個或更多個返回的最佳K值。