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 インチの各部分配列はinput1 つのオブジェクトを表すことを意図していますが、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] のため)、ユークリッドに正確に埋め込むことができません。スペース。技術的には、2 番目の次元の NaN 値は、修正された非類似度行列の負の 2 番目の固有値によるものです。

于 2009-12-07T09:44:37.323 に答える