【发布时间】:2015-06-09 19:26:04
【问题描述】:
我正在寻找一种解决方案,该解决方案可以从其中一些点之间的估计距离矩阵中输出一组 2D 点。 问题是,这些点之间的距离不是精确的(近似值),并且没有所有对组合的值。
我正在寻找任何类型的解决方案,以创建最多尊重所提供距离的近似坐标。
【问题讨论】:
标签: matlab matrix coordinates cluster-computing distance
我正在寻找一种解决方案,该解决方案可以从其中一些点之间的估计距离矩阵中输出一组 2D 点。 问题是,这些点之间的距离不是精确的(近似值),并且没有所有对组合的值。
我正在寻找任何类型的解决方案,以创建最多尊重所提供距离的近似坐标。
【问题讨论】:
标签: matlab matrix coordinates cluster-computing distance
您可以使用t-SNE,这是一种算法,可以根据元素的距离将潜在的高维数据嵌入到低维数据中。
您必须决定如何处理缺失的距离,是否将它们设置为高值、平均距离或其他值。
由于 t-SNE 将仅保留本地邻域,因此远距离集群的关系可能不太准确,但您必须看看这是否对您的应用程序不利。
如果您从链接的网站下载 vanilla MATLAB 实现并将该文件夹放在路径上,则应运行以下独立示例。
%% Generate some random data
mu = [1 2];
Sigma = [1 0; 0 1];
R = chol(Sigma);
z1 = repmat(mu,100,1) + randn(100,2)*R;
mu = [5 1.5];
z2 = repmat(mu,100,1) + randn(100,2)*R;
mu = [3.5 6.5];
z3 = repmat(mu,100,1) + randn(100,2)*R;
%% Plot random data
figure(1);
clf
subplot(3, 1, 1)
scatter(z1(:,1), z1(:,2))
hold on
scatter(z2(:,1), z2(:,2))
scatter(z3(:,1), z3(:,2))
title('Original data')
%% Generate pw distance matrix and plot it
all_z = [z1; z2; z3];
% generate pw distance matrix
pwd = squareform(pdist(all_z));
subplot(3, 1, 2)
imagesc(pwd)
title('Distance matrix')
%% Perform tSNE
no_dims = 2;
perplexity = 150;
yd = tsne_d(pwd, [], no_dims, perplexity);
%% Plot results
subplot(3, 1, 3)
scatter(yd(1:100, 1), yd(1:100, 2))
hold on
scatter(yd((1:100) + 100, 1), yd((1:100) + 100, 2))
scatter(yd((1:100) + 200, 1), yd((1:100) + 200, 2))
title('tSNE embedding')
在清理完距离矩阵(即为缺失的矩阵分配一些值)后,您将从 %% Perform tSNE 开始。 perplexity 是一个参数,应该与您期望在集群中的点数大致匹配。在我的示例中,我选择了 150,因为我还想考虑距离更远的相邻点。原始论文很好地描述了算法的作用。
【讨论】:
yd 的 pw 距离与初始距离矩阵来比较性能。