Ich musste ein basianisches Netzwerk in Java betreiben, also suchte ich nach einer schönen Bibliothek.
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.
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)
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