Matlab 基于跳跃法的聚类分析(失真测度)
我试图从Sugar的论文中复制结果: 凯瑟琳·A·苏格;Gareth M.James(2003年)。“寻找数据集中的聚类数:信息论方法”。美国统计协会杂志98(1月):750-763 用跳跃法进行聚类分析。 以下是指向WiKi Pedia的链接,其伪代码为: 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(
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确实提供了更高数量的集群。您是否可以编辑帖子并键入新的“固定”算法?