我正在解决一个杂务问题。
我有一套100 observatons。每个观察用三个特征来描述。我必须将这些观察分为两组(我有每个观察的标签)。
在对观测数据进行聚类之前,我首先计算了观测值之间的pdist,然后使用MATLAB中的mdscale函数返回到三维。我使用transformed_observation作为k均值聚类算法的输入,与使用原始观测值相比,获得了更好的聚类结果(即,聚类与标签匹配)。任何人都能解释我为什么?我刚试过..。
在这里你可以找到我的脚步..。
% 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');发布于 2016-01-27 01:19:45
pdist计算成对的距离(使用KL-散度)。
mdscale (多维尺度)现在将尝试将距离嵌入到欧几里德向量空间中,这样它们才能得到最好的保存。
K-意味着只适用于的平方欧氏距离(以及其他几个Bregman分歧)。
因此,在我看来,Matlab允许您使用其他几个距离是一个错误:
“‘sqeuclidean”(默认)、“cityblock”、分部、“余弦”、“相关性”、“AC.26”、“hamming”
如果KL-散度适合于您的数据集,这并不奇怪,因为这个构造允许使用k-均值(近似于)KL-散度。
https://stackoverflow.com/questions/35015642
复制相似问题