2011-05-26 51 views
6

有誰知道使用WEKA API從數據中學習貝葉斯網絡的「正確」過程嗎?我無法在WEKA文檔中找到好的說明。如何使用WEKA API學習貝葉斯網絡(結構+參數)?

基於文檔和每個功能是「應該」做什麼,我想這會工作:

Instances ins = DataSource.read(filename); 
ins.setClassIndex(0); 

K2 learner = new K2(); 

MultiNomialBMAEstimator estimator = new MultiNomialBMAEstimator(); 
estimator.setUseK2Prior(true); 

EditableBayesNet bn = new EditableBayesNet(ins); 
bn.initStructure(); 

learner.buildStructure(bn, ins); 
estimator.estimateCPTs(bn); 

但事實並非如此。我試過這個和其他的變化,我不斷得到ArrayIndexOutOfBoundsExceptionNullPointerException WEKA代碼內的某個地方,所以我錯過了什麼?

+0

我一直在尋找資源開始使用貝葉斯網絡。將看看你提到的WEKA API。 – r3st0r3 2011-05-26 19:25:56

+0

WEKA GUI本身是否使用API​​?如果是這樣,你可以用它作爲例子。你也可以看一看源代碼,看看它是否有意義。 – 2011-05-26 19:45:39

回答

5

它適合我。我試着用下面的一組數據:

@relation test 

@attribute x {0,1} 
@attribute y {0,1,2} 
@attribute z {0,1} 

@data 
0,1,0 
1,0,1 
1,1,1 
1,2,1 
0,0,0 

讓我提及的是,當你的目標屬性不是標稱的例外預期(如數字)。當所有的屬性都是標稱的時,貝葉斯網絡會更好地工作。如果您將目標屬性更改爲數字,您將獲得NullPointerExceptionArrayIndexOutOfBoundsException。特別是,這個例外是拋出在線:

EditableBayesNet bn = new EditableBayesNet(ins); 

你應該先離散你的目標類。

+0

我不知道以前有什麼不對,但現在也適用於我。 – trutheality 2011-05-26 21:32:29