2011-05-26 1 views
6

Est-ce que quelqu'un connaît la procédure «appropriée» pour apprendre un réseau bayésien à partir de données utilisant l'API WEKA? Je ne trouve pas de bonnes instructions dans la documentation WEKA.Comment apprendre un réseau bayésien (structure + paramètres) avec l'API WEKA?

Sur la base de la documentation et ce que chaque fonction est « censé » faire, je pensais que cela fonctionnerait:

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); 

Mais il ne fonctionne pas. J'ai essayé ceci et d'autres variations et je continue d'obtenir ArrayIndexOutOfBoundsException ou NullPointerException quelque part dans le code WEKA, alors qu'est-ce qui me manque?

+0

Je cherchais des ressources pour démarrer avec les réseaux bayésiens. Jetez un oeil à l'API WEKA vous avez mentionné. – r3st0r3

+0

L'interface graphique de WEKA utilise-t-elle elle-même l'API? Si oui, vous pouvez l'utiliser comme exemple. Vous pouvez également jeter un coup d'œil au code source juste pour voir si cela a du sens. –

Répondre

5

Cela fonctionne pour moi. J'ai essayé avec l'ensemble des données suivantes:

@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 

Permettez-moi de mentionner que les exceptions sont attendus lorsque votre attribut cible n'est pas nominale (par exemple numérique). Les réseaux bayésiens fonctionnent mieux lorsque tous vos attributs sont nominaux. Si vous modifiez l'attribut cible en numérique, vous obtiendrez un NullPointerException ou un ArrayIndexOutOfBoundsException. En particulier, cette exception est lancée à la ligne:

EditableBayesNet bn = new EditableBayesNet(ins); 

Vous devez d'abord discrétiser votre classe cible.

+0

Je ne sais pas ce qui n'allait pas avant mais ça marche aussi pour moi maintenant. – trutheality

Questions connexes