我有一个这样的数组:
1003 1007 0.0140589588522423
1059 1185 0.0336635172202602
1003 1093 0.0403056531253910
1003 1111 0.0417787840566580
1059 1127 0.0437157438475326
1082 1092 0.0532154519263457
1076 1185 0.0584688899071887
1003 1129 0.0585907987209575
1003 1045 0.0626826958352425
1003 1070 0.0660757861128676
1003 1014 0.0662929607751338
第一列是第一个名称,第二列是第二个名称,第三列是[0, 1]
范围内每两个点之间的距离。如果我们在第三列中具有更高的值,则我们具有更大的距离,并且如果我们在第三列中具有更低的值,则在所提到的点之间具有更小的距离。我有超过20,000点的数据。现在我想要一个模式(图形)和更多信息,以便更好地理解点的距离或假设位置。例如,我希望在点附近聚集在一起,并再次在聚类附近聚集到更大的聚类。我怎么能用MATLAB做到这一点?我有这些数据用于所有点。
答案 0 :(得分:1)
近乎精确配置的一个更简单的解决方案是使用cmdscale()
(https://www.mathworks.com/help/stats/cmdscale.html)根据距离限制找到潜在的配置。
给定点之间距离的向量,cmdscale()
将在n*p
维度中返回n
个p
点的矩阵,其中p
最小化。
您必须将数据重新组织为每个点之间的n*n
距离矩阵,但要获得此类数据的任何体面图形表示,无论如何都必须这样做。
distance = [0.0 0.1 0.2;
0.1 0.0 0.3;
0.2 0.3 0.0];
Y = cmdscale(distance);
plot(ones(3,1),Y,'o'); % In this case my solution is 1 dimensional
对于20,000个数据点,您肯定需要更高的订单维度(希望您的数据已经被限制为2D或3D)。如果它不受3维限制,则必须减少Y
的配置矩阵(请参阅https://www.mathworks.com/help/stats/cmdscale.html寻求帮助)并且您将失去一些准确性(但这是真的缩放维度数据中的任何精确表示。)
如果您对更具概率性的表示感兴趣,我已经在利用动态链接物理/重力将节点基于权重拉到一起的网络引擎中取得了更大的成功,但我还没有看到任何动态内置在MATLAB中的东西。