Uni*_*ent 19 r cluster-analysis k-means
我一直在使用k-means在R中聚类我的数据,但我希望能够使用Baysiean Information Criterion(BIC)和AIC来评估我的聚类的拟合与模型的复杂性.目前我在R中使用的代码是:
KClData <- kmeans(Data, centers=2, nstart= 100)
Run Code Online (Sandbox Code Playgroud)
但我希望能够提取BIC和Log Likelihood.任何帮助将不胜感激!
And*_*ton 15
对于任何人登陆这里,有一个在提出雪利酒塔的方法http://sherrytowers.com/2013/10/24/k-means-clustering/,它使用从输出stats::kmeans.我引用:
可以使用以下功能计算AIC:
Run Code Online (Sandbox Code Playgroud)kmeansAIC = function(fit){ m = ncol(fit$centers) n = length(fit$cluster) k = nrow(fit$centers) D = fit$tot.withinss return(D + 2*m*k) }
从帮助中stats::AIC,您还可以看到BIC的计算方式与AIC类似.获取BIC的一种简单方法是用以下代码替换return()上面的函数:
return(data.frame(AIC = D + 2*m*k,
BIC = D + log(n)*m*k))
Run Code Online (Sandbox Code Playgroud)
所以你会使用如下:
fit <- kmeans(x = data,centers = 6)
kmeansAIC(fit)
Run Code Online (Sandbox Code Playgroud)
为了计算BIC,只需添加.5*k*d*log(n)(其中k是的装置的数量,d是在数据集中的矢量的长度,并且n是数据点的数目),以标准的k均值误差函数.
标准k均值惩罚是\sum_n (m_k(n)-x_n)^2,其中m_k(n)是与第n个数据点相关的平均值.这种惩罚可以解释为对数概率,因此BIC是完全有效的.
BIC只是为与k均值误差成比例的额外惩罚项添加k.