如何计算K-Means的BIC以获得最佳K.

时间:2016-02-13 11:11:40

标签: machine-learning k-means

我对K-Means聚类技术很陌生。我想为K-Means计算BIC以找到最佳K(簇数)。我在网上四处寻找python中的解决方案,但除this thread之外没有具体的例子,我不确定是否正确。有什么想法吗?

1 个答案:

答案 0 :(得分:2)

BIC基本上是

形式的(合理的)启发式算法
BIC(theta|x, n) = -2 ln L(x|theta) + params(theta) lg n

其中x是样本,n是样本数,theta是您的模型,params(theta)是估算参数的数量,L是可能性与您的模型相关联的函数,因此您需要概率模型来分配概率(ln L(x|theta) = ln PROD_{i=1}^n P(x|theta) = SUM_{i=1}^d ln P(x|theta))。实际上,虽然很容易计算params(因为它只是K * d,其中K是来自K-means的K和空间的d维度),你无法真正计算概率,因为K-means不能为你提供概率直接模型。

另一方面,您实际上可以显示(http://mlg.eng.cam.ac.uk/teaching/3f3/1011/lect4.pdf)存在等效的概率方法,从而导致相同的成本函数。因此,即使您首先拟合非概率模型,您也可以在拟合k均值后轻松恢复实际概率模型的解。

正确的python实现位于例如:https://github.com/mynameisfiber/pyxmeans/blob/master/pyxmeans/xmeans.py(他们的_loglikelihood函数来自上面的等式ln L(x|theta)