Примеры кода на Java — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
Строка 26: Строка 26:
 
   '''import''' weka.core.Instances;
 
   '''import''' weka.core.Instances;
  
   //Load Data set
+
   <font color="green">//Load Data set</font>
 
   '''var''' data = new Instances(new BufferedReader(new FileReader("dataset/house.arff")));
 
   '''var''' data = new Instances(new BufferedReader(new FileReader("dataset/house.arff")));
 
   data.setClassIndex(data.numAttributes() - 1);
 
   data.setClassIndex(data.numAttributes() - 1);
   //Build model
+
   <font color="green">//Build model</font>
 
   '''var''' model = new LinearRegression();
 
   '''var''' model = new LinearRegression();
 
   '''try''' { model.buildClassifier(data); }
 
   '''try''' { model.buildClassifier(data); }
 
   '''catch''' (Exception e) { e.printStackTrace(); }
 
   '''catch''' (Exception e) { e.printStackTrace(); }
   //output model
+
   <font color="green">//output model</font>
 
   System.out.printf("model parameters: %s%n", model);
 
   System.out.printf("model parameters: %s%n", model);
   // Now Predicting the cost
+
   <font color="green">// Now Predicting the cost</font>
 
   '''var''' myHouse = data.lastInstance();
 
   '''var''' myHouse = data.lastInstance();
 
   '''var''' price  = model.classifyInstance(myHouse);
 
   '''var''' price  = model.classifyInstance(myHouse);
   System.out.printf("predicted price = %s%n", price);
+
   System.out.printf("predicted price = %s%n", price)
 
====Логистическая регрессиия====
 
====Логистическая регрессиия====
 
{{main|Логистическая регрессия}}
 
{{main|Логистическая регрессия}}
Строка 116: Строка 116:
 
   '''import''' java.io.File;
 
   '''import''' java.io.File;
  
 +
  <font color="green">// read train & test datasets and build MLP classifier</font>
 
   '''var''' trainds = new DataSource("etc/train.csv");
 
   '''var''' trainds = new DataSource("etc/train.csv");
 
   '''var''' train  = trainds.getDataSet();
 
   '''var''' train  = trainds.getDataSet();
Строка 124: Строка 125:
 
   '''var''' mlp = new MultilayerPerceptron();
 
   '''var''' mlp = new MultilayerPerceptron();
 
   mlp.buildClassifier(train);
 
   mlp.buildClassifier(train);
   // Test the model
+
   <font color="green">// Test the model</font>
 
   '''var''' eTest = new Evaluation(train);
 
   '''var''' eTest = new Evaluation(train);
 
   eTest.evaluateModel(mlp, test);
 
   eTest.evaluateModel(mlp, test);
   // Print the result à la Weka explorer:
+
   <font color="green">// Print the result à la Weka explorer:</font>
 
   '''var''' strSummary = eTest.toSummaryString();
 
   '''var''' strSummary = eTest.toSummaryString();
 
   System.out.println(strSummary);
 
   System.out.println(strSummary);
Строка 153: Строка 154:
 
   '''import''' java.util.Arrays;
 
   '''import''' java.util.Arrays;
  
   // read train & test dataset
+
   <font color="green">// read train & test dataset</font>
 
   '''var''' parser = new DelimitedTextParser();
 
   '''var''' parser = new DelimitedTextParser();
 
   parser.setResponseIndex(new NominalAttribute("class"), 0);
 
   parser.setResponseIndex(new NominalAttribute("class"), 0);
Строка 159: Строка 160:
 
   '''var''' test    = parser.parse("USPS Test", this.getClass().getResourceAsStream("/smile/data/usps/zip.test"));
 
   '''var''' test    = parser.parse("USPS Test", this.getClass().getResourceAsStream("/smile/data/usps/zip.test"));
 
   '''var''' classes = Arrays.stream(test.labels()).max().orElse(0) + 1;
 
   '''var''' classes = Arrays.stream(test.labels()).max().orElse(0) + 1;
   // build SVM classifier
+
   <font color="green">// build SVM classifier</font>
 
   '''var''' svm    = new SVM<>(new GaussianKernel(8.0), 5.0, classes, SVM.Multiclass.ONE_VS_ONE);
 
   '''var''' svm    = new SVM<>(new GaussianKernel(8.0), 5.0, classes, SVM.Multiclass.ONE_VS_ONE);
 
   svm.learn(train.x(), train.labels());
 
   svm.learn(train.x(), train.labels());
 
   svm.finish();
 
   svm.finish();
   // calculate test error rate
+
   <font color="green">// calculate test error rate</font>
 
   '''var''' error = 0;
 
   '''var''' error = 0;
 
   for (int i = 0; i < test.x().length; i++) {
 
   for (int i = 0; i < test.x().length; i++) {
Строка 195: Строка 196:
 
   '''import''' java.util.Random;
 
   '''import''' java.util.Random;
  
   //load data
+
   <font color="green">//load data</font>
 
   '''var''' data = new Instances(new BufferedReader(new FileReader("data/bank-data.arff")));
 
   '''var''' data = new Instances(new BufferedReader(new FileReader("data/bank-data.arff")));
   // new instance of clusterer
+
   <font color="green">// new instance of clusterer</font>
 
   '''var''' model = new EM();
 
   '''var''' model = new EM();
   // build the clusterer
+
   <font color="green">// build the clusterer</font>
 
   model.buildClusterer(data);
 
   model.buildClusterer(data);
 
   System.out.println(model);
 
   System.out.println(model);

Версия 17:20, 8 апреля 2019

Популярные библиотеки

  • Weka[1] — популярная библиотека, написанная на языке Java и содержащая в себе множество алгоритмов машинного обучения для задач анализа данных. Предоставляет инструменты для решения задач классификации, кластеризации данных, регрессионного анализа и др.
  • Smile[2]Java фреймворк для машинного обучения, анализа естественного языка, линейной алгебры и визуализации данных. Smile покрывает все основные аспекты машинного обучения и предоставляет высокопроизводительные алгоритмы и структуры данных.
  • deeplearning4j[3]Java библиотека для глубокого обучения, создания рекуррентых (в том числе распределенных) нейронных сетей.

Примеры кода

Для работы с приведенными ниже примерами необходим JDK версии не ниже 10 и система сборки Maven.
Каждый пример структурирован следующим образом:

  1. Maven зависимость на необходимые библиотеки
  2. Список необходимых import директив
  3. Код примера с комментариями

Вариации регрессии

Основная статья: Вариации регрессии

Линейная регрессия

Основная статья: Линейная регрессия

Пример линейной регресии с применением weka.classifiers.functions.LinearRegression[4]

 <dependency>
   <groupId>nz.ac.waikato.cms.weka</groupId>
   <artifactId>weka-stable</artifactId>
   <version>3.8.0</version>
 </dependency>
 import weka.classifiers.functions.LinearRegression;
 import weka.core.Instance;
 import weka.core.Instances;
 //Load Data set
 var data = new Instances(new BufferedReader(new FileReader("dataset/house.arff")));
 data.setClassIndex(data.numAttributes() - 1);
 //Build model
 var model = new LinearRegression();
 try { model.buildClassifier(data); }
 catch (Exception e) { e.printStackTrace(); }
 //output model
 System.out.printf("model parameters: %s%n", model);
 // Now Predicting the cost
 var myHouse = data.lastInstance();
 var price  = model.classifyInstance(myHouse);
 System.out.printf("predicted price = %s%n", price)

Логистическая регрессиия

Основная статья: Логистическая регрессия

Пример линейной регрессии с применением smile.classification.LogisticRegression[5]

 <dependency>
   <groupId>com.github.haifengl</groupId>
   <artifactId>smile-core</artifactId>
   <version>1.5.2</version>
 </dependency>
 import smile.data.AttributeDataset;
 import smile.data.NominalAttribute;
 import smile.classification.LogisticRegression;
 import smile.data.parser.ArffParser;
 var arffParser = new ArffParser();
 arffParser.setResponseIndex(4);
 var iris   = arffParser.parse(smile.data.parser.IOUtils.getTestDataFile("weka/iris.arff"));
 var logClf = new LogisticRegression(iris.x(), iris.labels());
 logClf.predict(testX);

Гребневая регрессия (ридж-регрессия)

Пример гребневой регрессии с применением smile.regression.RidgeRegression[6]

 <dependency>
   <groupId>com.github.haifengl</groupId>
   <artifactId>smile-core</artifactId>
   <version>1.5.2</version>
 </dependency>
 import smile.data.NominalAttribute;
 import smile.data.parser.DelimitedTextParser;
 import smile.regression.RidgeRegression;
 var parser = new DelimitedTextParser();
 parser.setDelimiter(", ");
 parser.setResponseIndex(new NominalAttribute("class"), 0);
 var dataset  = parser.parse("dataset.csv");
 var lambda   = 0.0057d;
 var ridgeClf = new RidgeRegression(dataset.x(), dataset.y(), lambda);
 ridgeClf.predict(testX);

Лассо-регрессия

Пример Лассо-регрессии с применением smile.regression.LASSO[7]

 <dependency>
   <groupId>com.github.haifengl</groupId>
   <artifactId>smile-core</artifactId>
   <version>1.5.2</version>
 </dependency>
 import smile.data.NominalAttribute;
 import smile.data.parser.DelimitedTextParser;
 import smile.regression.LASSO;
 var parser = new DelimitedTextParser();
 parser.setDelimiter(", ");
 parser.setResponseIndex(new NominalAttribute("class"), 0);
 var dataset = parser.parse("dataset.csv");
 var lasso   = new LASSO(dataset.x(), dataset.y(), 10);
 lasso.predict(testX);

Классификация при помощи MLP

Пример классификации с применением weka.classifiers.functions.MultilayerPerceptron[8]

 <dependency>
   <groupId>nz.ac.waikato.cms.weka</groupId>
   <artifactId>weka-stable</artifactId>
   <version>3.8.0</version>
 </dependency>
 import weka.classifiers.functions.MultilayerPerceptron;
 import weka.core.converters.CSVLoader;
 import java.io.File;
 // read train & test datasets and build MLP classifier
 var trainds = new DataSource("etc/train.csv");
 var train   = trainds.getDataSet();
 train.setClassIndex(train.numAttributes() - 1);
 var testds = new DataSource("etc/test.csv");
 var test   = testds.getDataSet();
 test.setClassIndex(test.numAttributes() - 1);
 var mlp = new MultilayerPerceptron();
 mlp.buildClassifier(train);
 // Test the model
 var eTest = new Evaluation(train);
 eTest.evaluateModel(mlp, test);
 // Print the result à la Weka explorer:
 var strSummary = eTest.toSummaryString();
 System.out.println(strSummary);

Рекуррентные нейронные сети

Пример простой рекуррентной нейронной сети, способной генерировать заданную строку по первому символу, с применением библиотеки deeplearning4j.

Долгая краткосрочная память

Пример реализации рекуррентной нейронной сети, использующей механизм LSTM и натренированной на текстах Шекспира, с применением библиотеки deeplearning4j.

Метод опорных векторов

Пример классификации с применением smile.classification.SVM[9]

 <dependency>
   <groupId>com.github.haifengl</groupId>
   <artifactId>smile-core</artifactId>
   <version>1.5.2</version>
 </dependency>
 import smile.classification.SVM;
 import smile.data.NominalAttribute;
 import smile.data.parser.DelimitedTextParser;
 import smile.math.kernel.GaussianKernel;
 import java.util.Arrays;
 // read train & test dataset
 var parser = new DelimitedTextParser();
 parser.setResponseIndex(new NominalAttribute("class"), 0);
 var train   = parser.parse("USPS Train", this.getClass().getResourceAsStream("/smile/data/usps/zip.train"));
 var test    = parser.parse("USPS Test", this.getClass().getResourceAsStream("/smile/data/usps/zip.test"));
 var classes = Arrays.stream(test.labels()).max().orElse(0) + 1;
 // build SVM classifier
 var svm     = new SVM<>(new GaussianKernel(8.0), 5.0, classes, SVM.Multiclass.ONE_VS_ONE);
 svm.learn(train.x(), train.labels());
 svm.finish();
 // calculate test error rate
 var error = 0;
 for (int i = 0; i < test.x().length; i++) {
  if (svm.predict(test.x()[i]) != test.labels()[i]) {
    error++;
   }
 }
 System.out.format("USPS error rate = %.2f%%\n", 100.0 * error / test.x().length);

Деревья решений, случайный лес

Бустинг, Ada-boost

EM-алгоритм

Основная статья: EM-алгоритм

Пример кластеризации с применением weka.clusterers.EM[10]

 <dependency>
   <groupId>nz.ac.waikato.cms.weka</groupId>
   <artifactId>weka-stable</artifactId>
   <version>3.8.0</version>
 </dependency>
 import weka.clusterers.ClusterEvaluation;
 import weka.clusterers.EM;
 import weka.core.Instances;
 import java.io.BufferedReader;
 import java.io.FileReader;
 import java.util.Random;
 //load data
 var data = new Instances(new BufferedReader(new FileReader("data/bank-data.arff")));
 // new instance of clusterer
 var model = new EM();
 // build the clusterer
 model.buildClusterer(data);
 System.out.println(model);
 var logLikelihood = ClusterEvaluation.crossValidateModel(model, data, 10, new Random(1));

Уменьшение размерности

Байесовская классификация

Метрический классификатор и метод ближайших соседей

См. также

Примечания