2009-12-07 86 views
3

任何人有MDSJ的經驗嗎?以下輸入只產生NaN結果,我無法弄清楚原因。文檔相當稀少。的Java 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不正確。在input長度13的每個子陣列旨在表示一個對象,然而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的意義呢?我認爲它應該將一組屬性燒製成座標。

+0

這可能爲四年爲時已晚 - 但你必須定義比較兩個對象的度量。這會給你的陣列A,其中每個條目(A_I,j)的包含度量(I,J)的值,其中度量是一個函數,它在兩個向量,並返回一個雙。那時,你可以在A上使用MDS。 – sdasdadas 2013-05-15 18:43:55

回答

1

多維縮放將距離轉換爲座標 - 如果您已經在高維空間中具有座標並希望它們在低維空間中以最佳方式嵌入,則主成分分析(PCA)可能是您正在尋找的技術。

古典MDS和PCA是密切相關的:首先,MDS輸入轉換成距離初步高維座標(維度是高達對象的描述的數);其次,通過消除最不重要的軸,這些座標的維度在PCA類步驟中減少。

使用MDS的一點是,在某些設置中,輸入距離不是從現有座標導出的,而是從非幾何的其他東西導出的,例如人們所做的不相似性等級。因爲d [1] [0] + d [0] [2] < d [1] [2]),因此您的3x3不相似矩陣不服從三角不等式,因此不能準確嵌入歐幾里德空間。從技術上講,第二維中的NaN值是由於修正的相異矩陣的第二個特徵值爲負。

+1

好的,也許你是對的。你有推薦使用的Java包嗎?我一直在環顧四周,沒有看起來像我需要的東西。 – 2009-12-08 00:07:19