J'avais besoin de faire fonctionner un réseau Basian en Java, alors j'ai cherché une belle bibliothèque.
Comme condition
――La maintenance est toujours en cours --Distribué sous forme de fichier jar
Dans la bibliothèque du réseau Basian J'ai recherché une personne qui pourrait apprendre la structure du réseau et la probabilité conditionnelle.
Les deux suivants peuvent être utilisés
Autre que cela, ce qui suit
--Netica-j (l'erreur n'a pas pu être résolue) --jayes (la mise à jour de GitHub a échoué il y a 5-6 ans et il y a une atmosphère non maintenue) --BayesServer (ça fait vraiment du bien, mais ça coûte environ 70000 yens)
weka weka est un logiciel d'apprentissage automatique développé à l'Université de Waikato en Nouvelle-Zélande, et les fichiers jar peuvent également être utilisés comme applications GUI. Cette fois, j'utiliserai la classe dans le fichier jar en Java. Je l'ai utilisé pour les données d'apprentissage. https://gist.github.com/carl0967/7a3588cd6f0d40d02a26
Sous le code source
import java.io.*;
import java.util.*;
import weka.core.converters.ArffLoader;
import weka.classifiers.Evaluation;
import weka.classifiers.bayes.BayesNet;
import weka.classifiers.bayes.net.search.SearchAlgorithm;
import weka.classifiers.bayes.net.search.local.SimulatedAnnealing;
import weka.classifiers.bayes.net.search.local.K2;
import weka.core.Instances;
import weka.core.converters.ConverterUtils.DataSource;
public class bayesNet{
Instances instances;
BayesNet bnet;
Evaluation evaluation;
public bayesNet(){}
void setFile(File dataFile){
try {
ArffLoader al = new ArffLoader();
al.setFile(dataFile);
instances = al.getDataSet();
instances.setClassIndex(instances.numAttributes() - 1);
} catch (Exception e) {
e.printStackTrace();
}
}
void buildClassifier(){
try{
bnet = new BayesNet();
//Génération d'algorithmes de recherche
SearchAlgorithm searchAlgorithm = new K2();
//Défini sur BayesNet
bnet.setSearchAlgorithm(searchAlgorithm);
//Début du classement
bnet.buildClassifier(instances);
} catch(Exception e){
e.printStackTrace();
}
}
void evalute(){
try{
//Évaluation
evaluation = new Evaluation(instances);
evaluation.evaluateModel(bnet, instances);
} catch(Exception e){
e.printStackTrace();
}
}
void showResult(){
System.out.println(evaluation.toSummaryString("Results\n",false));
}
public static void main(String[] args) {
bayesNet classifier = new bayesNet();
classifier.setFile(new File(args[0]));
classifier.buildClassifier();
classifier.evalute();
classifier.showResult();
}
}
Référence: Créer un réseau Basian à l'aide de l'API de Weka en Java
résultat
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by weka.core.WekaPackageClassLoaderManager (file:/Users/Mnb0130/unirvFILE/semi/Exercices d'ingénierie spéciaux/bayesNet/weka/weka.jar) to method java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain)
WARNING: Please consider reporting this to the maintainers of weka.core.WekaPackageClassLoaderManager
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
Results
Correctly Classified Instances 34 89.4737 %
Incorrectly Classified Instances 4 10.5263 %
Kappa statistic 0.6122
Mean absolute error 0.204
Root mean squared error 0.299
Relative absolute error 59.8749 %
Root relative squared error 73.3056 %
Total Number of Instances 38
Si le taux de réponse correct est d'environ 89% avec un petit ensemble de données, je pense que c'est une opération de mouvement supposée. Après tout, j'ai pensé que l'utilisation de weka était appropriée dans la plupart des cas.
Recommended Posts