任何人有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的意義呢?我認爲它應該將一組屬性燒製成座標。
這可能爲四年爲時已晚 - 但你必須定義比較兩個對象的度量。這會給你的陣列A,其中每個條目(A_I,j)的包含度量(I,J)的值,其中度量是一個函數,它在兩個向量,並返回一個雙。那時,你可以在A上使用MDS。 – sdasdadas 2013-05-15 18:43:55