了解 pdist 与 mdscale 结合使用
Understanding the use of pdist in combination with mdscale
我正在处理一个混乱的问题。
我有一套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');
pdist
计算成对距离(使用 KL-Divergence)。
mdscale
(多维缩放)现在将尝试将距离嵌入 Euclidean 向量 space 中,以便最好地保留它们。
K-means 仅 适用于平方欧氏距离(以及其他一些 Bregman 散度)。
所以在我看来,Matlab 允许您使用其他一些距离是错误的:
'sqeuclidean' (default) | 'cityblock' | 'cosine' | 'correlation' | 'hamming'
如果 KL-Divergence 适合您的数据集,那么效果更好也就不足为奇了,因为此构造允许在 KL-Divergence.[=(的近似值)上使用 k-means 13=]
我正在处理一个混乱的问题。
我有一套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');
pdist
计算成对距离(使用 KL-Divergence)。
mdscale
(多维缩放)现在将尝试将距离嵌入 Euclidean 向量 space 中,以便最好地保留它们。
K-means 仅 适用于平方欧氏距离(以及其他一些 Bregman 散度)。
所以在我看来,Matlab 允许您使用其他一些距离是错误的:
'sqeuclidean' (default) | 'cityblock' | 'cosine' | 'correlation' | 'hamming'
如果 KL-Divergence 适合您的数据集,那么效果更好也就不足为奇了,因为此构造允许在 KL-Divergence.[=(的近似值)上使用 k-means 13=]