2013-04-03 46 views
0

我正在使用SMOTE機制來過濾數據集,但過濾器操作往往失敗。由於「distanceToInstance」計算和比較造成的doSMOTE故障

我發現我在doSMOTE功能,在這種情況下,路線原因:計算實例之間

1-距離。

2的情況下,根據使用比較這些距離下令:

public int compare(Object o1, Object o2) { 
     double distance1 = (Double) ((Object[]) o1)[0]; 
     double distance2 = (Double) ((Object[]) o2)[0]; 
     return (int) Math.ceil(distance1 - distance2); 
} 

但在這個階段 - 在Java的comparison-規則被打破,則拋出異常。

我懷疑是因爲我的實例太靠近對方了。在這篇文章的末尾附上一段距離。

我的問題是:

1-這是一個合理的情況嗎?

2-有沒有辦法繞過它?

3-如果SMOTE在這種情況下無效 - 您可以推薦哪種過濾器?

的距離的採樣:

0.0000000000000000000

0.0012141773193000000

0.0038432461240999900

0.0061871080511999900

0.0100299787545999000

0.0104868096109699000

0.0105987645799099000

0.0108892893852699000

0.0117478589556099000

1.0309228276616200000

1.0310198235697600000

1.0313107565587700000

2.1496389158514700000

2.1507375480523100000

3.0822389928979700000

3.0824063362008500000

3.0827550748437000000

3.1315505239392400000

4。0849290781932300000

4.0849749023536100000

5.0827069584694600000

5.0827154979640900000

5.0827562565688700000

6.0680583877232500000

6.0680629044326200000

6.0680841744788300000

6.0681194562755100000

6.0681666719043900000

7.0640507924313300000

7.0640864288327500000

99983.1268106843000000000

99983.1287314636000000000

99983.1306576871000000000

99983.1325893850000000000

99983.1345265875000000000

99983.1454175467000000000

99983.1475548918000000000

99983.1496988369000000000

99983.1518494214000000000

99983.1540066853000000000

99983.1561706687000000000

99983.1583414124000000000

99983.1605189572000000000

99983.1627033444000000000

99983.1692979800000000000

99983.1715101578000000000

99983.1737293904000000000

99983.1759557214000000000

99983.1781891948000000000

99983.1804298551000000000

99983.2325590018000000000

99983.2784693506000000000

99984。1164113154000000000

99984.1167578005000000000

99984.1290293883000000000

99984.1405635856000000000

99984.1514150653000000000

99984.1616332310000000000

99984.1987066124000000000

99984.2049288990000000000

99984.6421596405000000000

99985.0506858703000000000

99985.1065026751000000000

99985.7425293353000000000

99985.7456043256000000000

99985.7486938850000000000

99985.8799957050000000000

99985.8918001021000000000

99986.0036067922000000000

99986.0163781578000000000

99986.0284093637000000000

99986.0362028056000000000

99986.0397551119000000000

99986.0504648354000000000

99986.5805672649000000000

99986.5908405239000000000

99986.6006006520000000000

99986.8206430289000000000

99986.8239828836000000000

99986.8273 4115740億

99986.8307180474000000000

99986.8336975245000000000

99986.8341137537000000000

99986.9395424908000000000

99986.9570787376000000000

99986。9729798986000000000

99987.1063584039000000000

99987.2804998215000000000

99987.2814803568000000000

99987.2824628995000000000

99987.2834474572000000000

99987.2844340383000000000

99987.2854226507000000000

99987.2864133025000000000

99987.2874060019000000000

99987.2884007571000000000

99987.3135877017000000000

+0

什麼是失敗的訊息,例外? –

+0

是的,一個空指針異常。 – Maoritzio

+0

stacktrace請 –

回答

1

此問題已固定在SMOTE包Weka的3.7.x.

該修正也適用於Weka 3.6。使用weka版本3.7時 - 可以通過軟件包管理器進行更新。

欲瞭解更多信息:

SMOTE update