我正在研究一个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');
答案 0 :(得分:1)
pdist
计算成对距离(使用KL-Divergence)。
mdscale
(多维缩放)现在会尝试在 Euclidean 向量空间中嵌入距离,以便最好地保留它们。
K-means only 适用于平方欧几里德距离(以及其他一些Bregman分歧)。
因此,在我看来,Matlab允许您进行其他一些距离的错误:
'sqeuclidean'(默认)| 'cityblock'| '余弦'| '相关'| '汉明'
如果KL-Divergence适合您的数据集,这种方法效果更好也就不足为奇了,因为这种结构允许使用k-means(近似)KL-Divergence。