我真的是K-Means聚类技术的新手。我想计算K均值的BIC,以找到最佳K(聚类数)。我在网上四处寻找以python解决方案,但除this thread以外,没有具体示例,但我不确定它是否正确。任何想法?

最佳答案

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))。实际上,尽管很容易计算参数(因为它很简单,就是K * d,其中K是从K均值和空间的d维数得出的K),但是由于K均值不能为您提供概率,因此您无法真正计算出概率直接建模。

另一方面,您实际上可以证明(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))。

关于machine-learning - 如何计算K均值的BIC以获得最佳K,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35379127/

10-12 16:37