如何计算 K-Means 的 BIC 以获得最佳 K
How to calculate BIC for K-Means to get best K
我对 K-Means 聚类技术真的很陌生。我想计算 K-Means 的 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 均值的 K 和 space 的 d 维),但您无法真正计算概率,因为 K 均值不是直接为您提供概率模型。
另一方面,您实际上可以证明 (http://mlg.eng.cam.ac.uk/teaching/3f3/1011/lect4.pdf) 存在等效概率方法,从而导致相同的成本函数。因此,即使您首先拟合非概率模型,您也可以在拟合 k-means 之后轻松恢复实际概率模型的解决方案。
例如,正确的 python 实现位于此处:https://github.com/mynameisfiber/pyxmeans/blob/master/pyxmeans/xmeans.py(它们的 _loglikelihood
函数是上面等式中的 ln L(x|theta)
)。
我对 K-Means 聚类技术真的很陌生。我想计算 K-Means 的 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 均值的 K 和 space 的 d 维),但您无法真正计算概率,因为 K 均值不是直接为您提供概率模型。
另一方面,您实际上可以证明 (http://mlg.eng.cam.ac.uk/teaching/3f3/1011/lect4.pdf) 存在等效概率方法,从而导致相同的成本函数。因此,即使您首先拟合非概率模型,您也可以在拟合 k-means 之后轻松恢复实际概率模型的解决方案。
例如,正确的 python 实现位于此处:https://github.com/mynameisfiber/pyxmeans/blob/master/pyxmeans/xmeans.py(它们的 _loglikelihood
函数是上面等式中的 ln L(x|theta)
)。