2011-07-15 86 views
0

我使用的Weka機器學習庫的Java API ...充分利用了Weka的Java API

我試圖用EuclidianDistance類來計算兩個實例之間的距離,歐氏距離:

http://weka.sourceforge.net/doc.dev/weka/core/EuclideanDistance.html

我有這樣的代碼:

 EuclideanDistance ed = new EuclideanDistance(finalInst); 
     double dist; 

     dist = ed.distance(finalInst.firstInstance(),finalInst.lastInstance()); 

finalInst是一個有效的實例對象,它包含有效Instanc Ë對象...

這裏的第一個和最後一個實例是什麼,當你使用System.out.println

finalInst.firstInstance(): 

?,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 

finalInst.lastInstance(): 

?,?,?,?,1,1,?,1,?,1,?,?,1,?,?,?,?,?,1 

但是當我運行的代碼,它返回一個空指針異常......

我哪裏做錯了?

+0

什麼是異常的堆棧跟蹤? – Jeffrey

+0

沒有堆棧跟蹤它是一個捕獲異常 –

+0

你必須看到錯誤,並顯示給我們,這是有道理的。誰在拋出錯誤?什麼是ed.distance的方法簽名? – Karl

回答

3

我有兩個實用建議:

1)挖掘WEKA的代碼。它是開源的,所以你實際上可以將源代碼添加到Eclipse項目中,並使用F3瀏覽相關函數(我希望你使用Eclipse或其他合理的IDE)。

2)實現你自己的歐幾里得距離。這很簡單。在這裏,我甚至做了你:

public double distance(List<Double> instance1, List<Double> instance2) { 
    double dist = 0.0; 

    for (int i = 0; i < instance1.size(); i++) { 
     double x = instance1.get(i); 
     double y = instance2.get(i); 

     if (Double.isNaN(x) || Double.isNaN(y)) { 
      continue; // Mark missing attributes ('?') as NaN. 
     } 

     dist += (x-y)*(x-y); 
    } 

    return Math.sqrt(dist); 
} 
1

舊線,但: 你要傳遞對象的實例(通常來自一個ARFF文件)的歐幾里得距離構造。 重新實施車輪通常會導致未來出現問題。例如,屬性可以是標稱的。