了解pdist与mdscale的结合使用

时间:2016-01-26 14:03:32

标签: matlab scale cluster-analysis pdist

我正在研究一个clutering问题。

我有一套100 observatons。每个观察由3个特征描述。 我必须将这些观察结果分为两组(每个观察都有一个标签)。

在聚类观察之前,我首先计算了观测值之间的pdist,然后我在MATLAB中使用了mdscale函数返回到3维。 我使用transformed_observation作为kmean聚类算法的输入,如果与使用原始观察结果相比,获得更好的聚类结果(即聚类与标签匹配)。 任何人都可以解释为什么???我刚试过......

在这里你可以找到我的步骤......

% select the dimensions of my features
dimensions = 3;

% generate an example data set
observations = rand(100,dimensions);

% if yes use the combination of pdist + mdscale
use_dissimilarity = 'yes';

if strcmp(use_dissimilarity,'yes')
  %compute pdist between features
  dissimilarity = pdist(observations,@kullback_leibler_divergence);
  %re-transform features in 3 dimensions                             
  transformed_observations = mdscale(dissimilarity,dimensions);
else
  transformed_observations = observations;
end

%cluster observations 
numbercluster = 2;
[IDX, clustercentroids] = kmeans(transformed_observations, numbercluster,...
                    'emptyaction','singleton',...
                    'replicates',11,'display','off');

1 个答案:

答案 0 :(得分:1)

pdist计算成对距离(使用KL-Divergence)。

mdscale(多维缩放)现在会尝试在 Euclidean 向量空间中嵌入距离,以便最好地保留它们。

K-means only 适用于平方欧几里德距离(以及其他一些Bregman分歧)。

因此,在我看来,Matlab允许您进行其他一些距离的错误:

  

'sqeuclidean'(默认)| 'cityblock'| '余弦'| '相关'| '汉明'

如果KL-Divergence适合您的数据集,这种方法效果更好也就不足为奇了,因为这种结构允许使用k-means(近似)KL-Divergence。