Trouver une bibliothèque Java pour un éventuel réseau Basian

introduction

J'avais besoin de faire fonctionner un réseau Basian en Java, alors j'ai cherché une belle bibliothèque.

Ce que j'ai fait

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.

résultat

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)

Utilisation de la bibliothèque

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

Trouver une bibliothèque Java pour un éventuel réseau Basian
Une bibliothèque qui réalise des chaînes multilignes en chaîne multiligne Java
Rechercher un sous-ensemble en Java
Une histoire que j'ai finalement comprise Java pour une déclaration en tant que non-ingénieur
À propos de la procédure pour que Java fonctionne
Bibliothèque recommandée Java 2018 pour créer facilement des micro-services
[Java] Créons une bibliothèque d'accès à la base de données!
Création d'une bibliothèque de routage multifonctionnelle pour Android qui prend également en charge l'élément partagé --MoriRouter