MATLAB:更高效的内聚类差异函数代码

时间:2014-03-10 10:13:03

标签: matlab cluster-analysis

我是Matlab的新手,这是我在给定数据集中的内部群集差异性的代码。

此代码效率非常低,我的计算机几乎崩溃,无法在30x4 dataset上运行。

任何人都可以帮我提供更好的版本吗?

这是我用过的代码。

function [W] = WIC( X , IDX , N , C )


W = zeros( N , 1 );
kclas = unique(IDX);
count = histc( IDX(:) , kclas );

for i =1:N
    for j=1:length(X)
       while IDX(j)==i
          W = sum( ( X(j,:) - C(i,:) ).^2 );
       end
    end
end

 W = W .* count;
end

2 个答案:

答案 0 :(得分:0)

如果我正确理解了你的问题,你希望,对于每个聚类,计算与聚类中心的欧几里德距离的平方和(平均值?)。

除了将输出分配给WW(i)=...)的元素之外,没有无限循环(while循环将永不运行或永不完成),您可能希望看看矢量化。幸运的是,有一些很好的功能,例如accumarray

%// IDX: cluster index
%// X: array of data points
%// C: cluster centers
%// N: number of clusters

totalSumOfSquares = accumarray(IDX,(1:N)',[],...
   @(id) sum(sum( bsxfun( @minus, X, C(id,:) ).^2,2),1));

如果您想要平均距离,请将第一个sum替换为mean

答案 1 :(得分:0)

为什么?

这项措施在很大程度上是无用的统计数据;它只在k-means中有意义。然后最好通过对正方形偏差进行求和来计算,而不是在再次重新计算。。