众所周知,在k均值聚类中,我们可以使用贝叶斯信息准则(BIC)来找出最佳聚类数。根据BIC评分方案,最小化BIC得分的k是最佳聚类数。
BIC的配方如下:
BIC(C) = n*ln(RSS/n) + k*ln(n)
其中n是数据集中的数据点数,k是簇的数量。 RSS是剩余的平方和,其中我们将每个数据点的距离与其自己的簇的质心相加。 我们的数据包含3100个点,其中每个点有两个元素y =(x1,x2)(每个条目有两个特征)。
我在Matlab中的代码如下:
BIC=[];% Bayesian Information Criterion
n=3100; % number of datapoints
temp=1;
for k=1:50 % number of clusters
RSS=0; % residual sum of squares
[idx,C]=kmeans(y,k); % Matlab command for k-mean clustering
for i=1:3100
RSS=RSS+sqrt((y(i,1)-C(idx(i),1))^2+(y(i,2)-C(idx(i),2))^2);
end
BIC(temp)=n*log(RSS/n)+k*log(n);
temp=temp+1;
end
[p,l]=min(BIC);
plot(BIC)
但是我的代码中的某些内容肯定是错误的,我无法说出什么!我的意思是如果我们让k从1到100然后最小化BIC的k将是100.如果我们让k从1到1000那么最小化BIC的k将是1000,依此类推。 但据我所知,应该有一个特定的k,可以最小化BIC。 感谢您的帮助
答案 0 :(得分:1)
我可以看到一些可以解释您所报告行为的潜在问题:
1)我相信你使用的是一种不适合你的情况的健全公式
我不确定具体细节,但是来自wikipedia使用的特殊情况 只是合适的
假设模型误差或干扰是独立的,并且根据正态分布相同地分布,并且对数似然的导数相对于真实方差的边界条件为零
我还不熟悉该领域尚未知道第二个条件是否成立。查看以下原始X-means paper by Peleg and Moore中的公式(this answer),我可以看到他们没有将公式简化为您正在使用的公式(有关完整公式,请参阅其链接文章中的第4页。他们提出了一种更复杂的算法,在每次迭代时考虑每个质心及其区域对同一区域的几个质心,并使用BIC模型选择比较这两个模型。你必须改变论文中的公式来考虑如果你想保持你的方法,给定k的整个模型。
2)您混淆了两个不同背景的k
您将k-means算法中的k
插入到公式的自由参数惩罚元素中。
,其中
[...]
*
k
=要估算的免费参数数量。
在第4页第二列顶部的above linked x-mean paper中,他们计算了k
中带有d
质心的k-means模型的自由变量数量 - 维度空间到是k(d+1)
,在您的情况下,3k
而不是k
。
更改行中的代码
BIC(temp)=n*log(RSS/n)+k*log(n);
到
BIC(temp)=n*log(RSS/n)+(k*3)*log(n);