Matlab 基于跳跃法的聚类分析(失真测度)

Matlab 基于跳跃法的聚类分析(失真测度),matlab,cluster-analysis,k-means,distortion,Matlab,Cluster Analysis,K Means,Distortion,我试图从Sugar的论文中复制结果: 凯瑟琳·A·苏格;Gareth M.James(2003年)。“寻找数据集中的聚类数:信息论方法”。美国统计协会杂志98(1月):750-763 用跳跃法进行聚类分析。 以下是指向WiKi Pedia的链接,其伪代码为: Matlab中的代码如下所示: load('iris.mat'); % data into X p = size(X,2); K = 1:10; for k=K disp(['Clustering with K = ' num2str(

我试图从Sugar的论文中复制结果:

凯瑟琳·A·苏格;Gareth M.James(2003年)。“寻找数据集中的聚类数:信息论方法”。美国统计协会杂志98(1月):750-763

用跳跃法进行聚类分析。 以下是指向WiKi Pedia的链接,其伪代码为:

Matlab中的代码如下所示:

load('iris.mat'); % data into X
p = size(X,2);
K = 1:10;
for k=K
  disp(['Clustering with K = ' num2str(k) ' ...']);
  [U, Z] = kmeans(X, k, 'emptyaction', 'singleton');
  % compute distortion
  for i=1:k
    S = cov(X(U==i,:));
    a = bsxfun(@minus, X(U==i,:), Z(i,:));
    b = [b; sum(diag(a*inv(S)*a'))/sum(U==i)];
  end
  % average distortion per attribute
  b = b / p;
  d = [d; mean(b)];
end

figure, plot(K, d, '.:'); title('Distortion');
figure, plot(K(1:end-1), diff(d.^(-p/2)), '.:'); title('Jump Result');
现在,失真显示了一个非均匀的递减函数,跳跃结果显示尖峰,有时在k=8时出现最大值,甚至是负数


我想我在这里做错了什么。有人能帮我找出代码中的错误吗?

好的,找到“问题”。1)
cov()
必须删除,并且只需计算每个点与其中心之间L2距离的总和。2) 总失真的总和,然后按样本数和尺寸平均,例如
Sum(dist)/(n*p)
。3) 转换中的指数应小于1,并且p/2确实提供了更高数量的群集。您是否可以编辑帖子并键入新的“固定”算法?确定,找到“问题”。1)
cov()
必须删除,并且只需计算每个点与其中心之间L2距离的总和。2) 总失真的总和,然后按样本数和尺寸平均,例如
Sum(dist)/(n*p)
。3) 转换中的指数应该小于1,并且p/2确实提供了更高数量的集群。您是否可以编辑帖子并键入新的“固定”算法?