我有一个n乘n的非负整数的对称矩阵F:F[I,j]是衡量I和j之间距离的尺度我想在平面上找到n个点,代表n个人
两个接近的人用接近的点表示,
理想情况下,两个不那么亲密,甚至连一系列亲密的友谊都没有联系的人,用距离很远的点来表示。
有标准的算法来做这个吗?
最佳答案
您所描述的通常称为多维标度(MDS)或主坐标分析(PCA),但请注意,还有其他技术也称为PCA。
有很多著名的算法来执行mds。这主要是因为经典的方法相当慢——o(n2)。大多数其他方法都是试图减少运行时间,同时尽量减少精度损失。
至少在我的经验中,Landmark多维缩放(LMD)保持了接近完整MDS的精度,但大大减少了运行时间。这里的基本思想是在点的子组上计算mds,计算一种将各个部分组合在一起的方法。
如果你真的想要最大速度,并且不太在意精度,你可以考虑FASTMAP算法。
值得一提的是:我发现最有用的方法是使用lmd将原始数据减少到17-21自由度左右,然后(如果你想显示结果)使用fastmap将原始数据从那里减少到3或2维。我并没有太多使用完整的MDS,但是如果您使用的点不够多,那么它通常是首选的解决方案。
以下是一些相关链接:
MDS
LMDS
FastMap
关于algorithm - 考虑到他们之间的友谊,得出一些观点,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24225869/