我正在寻找一种解决方案,从其中一些估计的距离矩阵输出一组2D点。 事实是,这些点之间的距离并不精确(近似值),并且所有对组合都没有值。
我正在寻找任何类型的解决方案,这些解决方案可以创建最接近所提供距离的近似坐标。
答案 0 :(得分:0)
您可以使用t-SNE,这是一种算法,可根据元素的距离将潜在的高维数据嵌入到低维数据中。
您必须决定如何处理缺失的距离,是将它们设置为高值,还是平均距离等等。
由于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,因为我还想稍微考虑相邻点。原始论文很好地描述了算法的作用。