Suchen Sie eine Java-Bibliothek für ein mögliches basianisches Netzwerk

Einführung

Ich musste ein basianisches Netzwerk in Java betreiben, also suchte ich nach einer schönen Bibliothek.

Was ich getan habe

Als Bedingung

――Die Wartung läuft noch

In der Bibliothek des basianischen Netzwerks Ich suchte nach einer Person, die die Netzwerkstruktur und die bedingte Wahrscheinlichkeit lernen konnte.

Ergebnis

Die folgenden zwei können verwendet werden

Davon abgesehen das Folgende

--Netica-j (Fehler konnte nicht behoben werden) --jayes (GitHub-Update ist vor 5-6 Jahren fehlgeschlagen und es herrscht eine ungepflegte Atmosphäre) --BayesServer (Es fühlt sich wirklich gut an, kostet aber ungefähr 70.000 Yen)

Nutzung der Bibliothek

weka weka ist eine Software für maschinelles Lernen, die an der Waikato University in Neuseeland entwickelt wurde. JAR-Dateien können auch als GUI-Anwendungen verwendet werden. Dieses Mal werde ich die Klasse in der JAR-Datei in Java verwenden. Ich habe dies für die Daten zum Lernen verwendet. https://gist.github.com/carl0967/7a3588cd6f0d40d02a26

Unterhalb des Quellcodes

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();
			//Generierung von Suchalgorithmen
			SearchAlgorithm searchAlgorithm = new K2();
			//Stellen Sie auf BayesNet ein
			bnet.setSearchAlgorithm(searchAlgorithm);
			//Starten Sie die Klassifizierung
			bnet.buildClassifier(instances);
		} catch(Exception e){
			e.printStackTrace();
		}
		
	}

	void evalute(){
		try{
			//Auswertung
			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();
	}

}

Referenz: Erstellen Sie ein Basian-Netzwerk mit der Weka-API in Java

Ergebnis

WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by weka.core.WekaPackageClassLoaderManager (file:/Users/Mnb0130/unirvFILE/semi/Spezielle technische Übungen/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

Wenn die richtige Antwortrate bei einem kleinen Datensatz etwa 89% beträgt, denke ich, dass es sich um eine angenommene Bewegungsoperation handelt. Immerhin fand ich die Verwendung von Weka in den meisten Fällen angemessen.

Recommended Posts

Suchen Sie eine Java-Bibliothek für ein mögliches basianisches Netzwerk
Eine Bibliothek, die mehrzeilige Zeichenfolgen in mehrzeiligen Java-Zeichenfolgen realisiert
Suchen Sie eine Teilmenge in Java
Eine Geschichte, die ich als Nicht-Ingenieur endlich verstanden habe
Über das Verfahren, damit Java funktioniert
2018 Java Empfohlene Bibliothek zum einfachen Erstellen von Mikrodiensten
[Java] Erstellen wir eine DB-Zugriffsbibliothek!
Erstellt eine multifunktionale Routing-Bibliothek für Android, die auch Shared Element - MoriRouter unterstützt