2017-05-04 20 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值。