tru*_*ity 7 java api bayesian-networks weka
有没有人知道使用WEKA API从数据中学习贝叶斯网络的"正确"程序?我在WEKA文档中找不到好的说明.
基于文档和每个函数"应该"做什么,我认为这将工作:
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);
Run Code Online (Sandbox Code Playgroud)
但事实并非如此.我已经尝试了这个和其他变化,我一直在WEKA代码中ArrayIndexOutOfBoundsException或者NullPointerException某个地方,所以我错过了什么?
这个对我有用.我尝试了以下数据集:
@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
Run Code Online (Sandbox Code Playgroud)
让我提一下,当您的目标属性不是名义上(例如数字)时,会出现异常.当所有属性都是名义上时,贝叶斯网络可以更好地工作.如果您将目标属性更改为数字,您将获得一个NullPointerException或一个ArrayIndexOutOfBoundsException.特别是,这个异常被抛出:
EditableBayesNet bn = new EditableBayesNet(ins);
Run Code Online (Sandbox Code Playgroud)
您应首先将目标类离散化.
| 归档时间: |
|
| 查看次数: |
3675 次 |
| 最近记录: |