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