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

时间:2016-06-26 16:28:34

标签: matlab cluster-analysis k-means distortion

我正在尝试从Sugar的论文中重现结果:

Catherine A. Sugar; Gareth M. James(2003)。 “查找数据集中的簇数:信息理论方法”。美国统计学会杂志98(1月):750-763

使用跳转方法进行聚类分析。 这是一个带有伪代码的WiKi-Pedia链接:https://en.wikipedia.org/wiki/Determining_the_number_of_clusters_in_a_data_set

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时出现最大值,甚至是负数。

我认为我在做错了。任何人都可以帮我解决代码中的错误吗?

0 个答案:

没有答案