3

有人对MDSJ有任何经验吗?以下输入仅产生 NaN 结果,我不知道为什么。文档非常稀疏。

import mdsj.Data;
import mdsj.MDSJ;

public class MDSJDemo {
    public static void main(String[] args) {                                           
        double[][] input = {
        {78.0, 60.0, 30.0, 25.0, 24.0, 7.125, 1600.0, 1.4953271028037383, 15.0, 60.0, 0.0, 0.0, 50.0},
        {63.1578947368421, 51.81818181818182, 33.0, 30.0, 10.714285714285715, 6.402877697841727, 794.2857142857143, 0.823045267489712, 15.0, 20.0, 2.8571428571428568, 0.0, 75.0},
        {55.714285714285715, 70.0, 16.363636363636363, 27.5, 6.666666666666666, 5.742574257425742, 577.1428571428571, 0.6542056074766355, 12.857142857142856, 10.0, 17.142857142857142, 0.0, 25.0} 
        };

        int n=input[0].length;    // number of data objects
        double[][] output=MDSJ.classicalScaling(input); // apply MDS
        System.out.println(Data.format(output));
        for(int i=0; i<n; i++) {  // output all coordinates
            System.out.println(output[0][i]+" "+output[1][i]);
        }
    }
}

这是输出:

NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 
NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 

NaN NaN
NaN NaN
NaN NaN
NaN NaN
NaN NaN
NaN NaN
NaN NaN
NaN NaN
NaN NaN
NaN NaN
NaN NaN
NaN NaN
NaN NaN

也许我错误地使用了 MDS。每个长度为 13 ininput的子数组旨在表示一个对象,但 MDSJ 返回 13 个点。

此输入也失败:

    double[][] input = {
            {3, 4, 3},
            {5, 6, 1},
            {0, 1, 2}
    };

编辑:看来我用错了。我一直在给它这样的输入:

Object A: {30d, 1d, 0d, 4.32, 234.1}
Object B: {45d, 3.21, 45, 91.2, 9.9}
Object C: {7.7, 93.1, 401, 0d, 0d}

但它真正想要的是这样的距离矩阵:

     A     B     C
A    0     3     1
B    3     0     5
C    1     5     0    

但是,不完全是,因为对于此输入:

    double[][] input = {
            {0, 3, 1},
            {3, 0, 5},
            {1, 5, 0}
    };

我得到这个结果:

0.8713351726043931 -2.361724203891451 2.645016918006963 
NaN NaN NaN 

0.8713351726043931 NaN
-2.361724203891451 NaN
2.645016918006963 NaN

但是,如果它确实需要一系列距离,那么首先使用 MDS 有什么意义呢?我认为它应该将一组属性归结为坐标。

4

1 回答 1

1

多维缩放将距离转换为坐标 - 如果您已经在高维空间中拥有坐标并希望它们以最佳方式嵌入到低维空间中,那么主成分分析 (PCA) 可能是您正在寻找的技术。

经典MDS和PCA密切相关:首先,MDS将输入距离转换为初步的高维坐标(维度与描述的对象数量一样高);其次,通过摆脱最不重要的轴,在类似 PCA 的步骤中降低了这些坐标的维数。

使用 MDS 的要点是,在某些设置中,输入距离不是从现有坐标中得出的,而是从其他非几何的东西中得出的,例如,人们做出的不相似性评级。

您的 3x3 相异矩阵不遵守度量空间中所需的三角不等式(因为 d[1][0]+d[0][2]<d[1][2]),因此无法准确嵌入欧几里得空间。从技术上讲,第二维中的 NaN 值是由于修改后的相异矩阵的负第二特征值造成的。

于 2009-12-07T09:44:37.323 回答