Изменения
Новая страница: «auto|thumb|Java: https://www.oracle.com/java/ ==Популярные библиотеки== * <code>Weka</code><ref>[https://www.cs.waikato.ac.…»
[[File:Java.jpeg|auto|thumb|Java: https://www.oracle.com/java/]]
==Популярные библиотеки==
* <code>Weka</code><ref>[https://www.cs.waikato.ac.nz/~ml/weka/ Weka]</ref> {{---}} популярная библиотека, написанная на языке <code>Java</code> и содержащая в себе множество алгоритмов машинного обучения для задач анализа данных. Предоставляет инструменты для решения задач классификации, кластеризации данных, регрессионного анализа и др.
* <code>Smile</code><ref>[https://haifengl.github.io/smile/ Smile, Statistical Machine Intelligence and Learning Engine]</ref> {{---}} <code>Java</code> фреймворк для машинного обучения, анализа естественного языка, линейной алгебры и визуализации данных. <code>Smile</code> покрывает все основные аспекты машинного обучения и предоставляет высокопроизводительные алгоритмы и структуры данных.
* <code>deeplearning4j</code><ref>[https://github.com/deeplearning4j/deeplearning4j deeplearning4j, deep learning & linear algebra for Java/Scala with GPUs + Spark]</ref> {{---}} <code>Java</code> библиотека для глубокого обучения, создания рекуррентых (в том числе распределенных нейронных сетей).
==Примеры кода==
Для работы с приведенными ниже примерами необходим <code>JDK</code> версии не ниже 10 и система сборки <code>Maven</code>.<br>
Каждый пример структурирован следующим образом:
# <code>Maven</code> зависимость на необходимые библиотеки
# Список необходимых <code>import</code> директив
# Код примера с комментариями
===Вариации регрессии===
{{main|Вариации регрессии}}
====Линейная регрессия====
{{main|Линейная регрессия}}
Пример линейной регресии с применением <code>weka.classifiers.functions.LinearRegression</code><ref>[http://weka.sourceforge.net/doc.dev/weka/classifiers/functions/LinearRegression.html/ Weka, Linear Regression]</ref>
<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);
====Логистическая регрессиия====
{{main|Логистическая регрессия}}
Пример линейной регрессии с применением <code>smile.classification.LogisticRegression</code><ref>[https://haifengl.github.io/smile/api/java/smile/classification/LogisticRegression/ Smile, Logistic Regression]</ref>
<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);
====Гребневая регрессия (ридж-регрессия)====
{{Main|Вариации регрессии#Гребневая регрессия (ридж-регрессия)}}
Пример гребневой регрессии с применением <code>smile.regression.RidgeRegression</code><ref>[https://haifengl.github.io/smile/api/java/smile/regression/RidgeRegression.html/ Smile, Ridge Regression]</ref>
<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);
====Лассо-регрессия====
{{Main|Вариации регрессии#Лассо-регрессия}}
Пример Лассо-регрессии с применением <code>smile.regression.LASSO</code><ref>[https://haifengl.github.io/smile/api/java/smile/regression/LASSO.html/ Smile, LASSO regression]</ref>
<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===
{{main|Нейронные сети, перцептрон}}
Пример классификации с применением <code>weka.classifiers.functions.MultilayerPerceptron</code><ref>[http://weka.sourceforge.net/doc.dev/weka/classifiers/functions/MultilayerPerceptron.html/ Weka, MLP]</ref>
<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;
'''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);
===Рекуррентные нейронные сети===
{{Main|Рекуррентные нейронные сети}}
[https://github.com/deeplearning4j/dl4j-examples/blob/master/dl4j-examples/src/main/java/org/deeplearning4j/examples/recurrent/basic/BasicRNNExample.java Пример] простой рекуррентной нейронной сети, способной генерировать заданную строку по первому символу, с применением библиотеки <code>deeplearning4j</code>.
===Долгая краткосрочная память===
{{Main|Долгая краткосрочная память}}
[https://github.com/deeplearning4j/dl4j-examples/blob/master/dl4j-examples/src/main/java/org/deeplearning4j/examples/recurrent/character/LSTMCharModellingExample.java Пример] реализации рекуррентной нейронной сети, использующей механизм LSTM и натренированной на текстах Шекспира, с применением библиотеки <code>deeplearning4j</code>.
===Метод опорных векторов===
{{main|Метод опорных векторов (SVM)}}
Пример классификации с применением <code>smile.classification.SVM</code><ref>[https://haifengl.github.io/smile/api/java/smile/classification/SVM.html/ Smile, SVM]</ref>
<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);
===Деревья решений, случайный лес===
{{Main|Дерево решений и случайный лес#Пример на языке Java}}
===Бустинг, Ada-boost===
{{main|Бустинг, AdaBoost#Пример на языке Java}}
===EM-алгоритм===
{{Main|EM-алгоритм|ll=EM-алгоритм <sup>[на 08.04.19 не создан]</sup>}}
Пример кластеризации с применением <code>weka.clusterers.EM</code><ref>[http://weka.sourceforge.net/doc.dev/weka/clusterers/EM.html/ Weka, EM]</ref>
<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));
===Уменьшение размерности===
{{Main|Уменьшение размерности#Пример на языке Java}}
===Байесовская классификация===
{{Main|Байесовская классификация#Пример на языке Java}}
===Метрический классификатор и метод ближайших соседей===
{{Main|Метрический классификатор и метод ближайших соседей#Пример на языке Java}}
==См. также==
*[[:Примеры кода на Scala|Примеры кода на Scala]]
*[[:Примеры кода на R|Примеры кода на R]]<sup>[на 08.04.19 не создан]</sup>
*[[:Обзор библиотек для машинного обучения на Python|Обзор библиотек для машинного обучения на Python]]
== Примечания ==
<references/>
[[Категория: Машинное обучение]] [[Категория: Примеры кода]]
==Популярные библиотеки==
* <code>Weka</code><ref>[https://www.cs.waikato.ac.nz/~ml/weka/ Weka]</ref> {{---}} популярная библиотека, написанная на языке <code>Java</code> и содержащая в себе множество алгоритмов машинного обучения для задач анализа данных. Предоставляет инструменты для решения задач классификации, кластеризации данных, регрессионного анализа и др.
* <code>Smile</code><ref>[https://haifengl.github.io/smile/ Smile, Statistical Machine Intelligence and Learning Engine]</ref> {{---}} <code>Java</code> фреймворк для машинного обучения, анализа естественного языка, линейной алгебры и визуализации данных. <code>Smile</code> покрывает все основные аспекты машинного обучения и предоставляет высокопроизводительные алгоритмы и структуры данных.
* <code>deeplearning4j</code><ref>[https://github.com/deeplearning4j/deeplearning4j deeplearning4j, deep learning & linear algebra for Java/Scala with GPUs + Spark]</ref> {{---}} <code>Java</code> библиотека для глубокого обучения, создания рекуррентых (в том числе распределенных нейронных сетей).
==Примеры кода==
Для работы с приведенными ниже примерами необходим <code>JDK</code> версии не ниже 10 и система сборки <code>Maven</code>.<br>
Каждый пример структурирован следующим образом:
# <code>Maven</code> зависимость на необходимые библиотеки
# Список необходимых <code>import</code> директив
# Код примера с комментариями
===Вариации регрессии===
{{main|Вариации регрессии}}
====Линейная регрессия====
{{main|Линейная регрессия}}
Пример линейной регресии с применением <code>weka.classifiers.functions.LinearRegression</code><ref>[http://weka.sourceforge.net/doc.dev/weka/classifiers/functions/LinearRegression.html/ Weka, Linear Regression]</ref>
<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);
====Логистическая регрессиия====
{{main|Логистическая регрессия}}
Пример линейной регрессии с применением <code>smile.classification.LogisticRegression</code><ref>[https://haifengl.github.io/smile/api/java/smile/classification/LogisticRegression/ Smile, Logistic Regression]</ref>
<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);
====Гребневая регрессия (ридж-регрессия)====
{{Main|Вариации регрессии#Гребневая регрессия (ридж-регрессия)}}
Пример гребневой регрессии с применением <code>smile.regression.RidgeRegression</code><ref>[https://haifengl.github.io/smile/api/java/smile/regression/RidgeRegression.html/ Smile, Ridge Regression]</ref>
<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);
====Лассо-регрессия====
{{Main|Вариации регрессии#Лассо-регрессия}}
Пример Лассо-регрессии с применением <code>smile.regression.LASSO</code><ref>[https://haifengl.github.io/smile/api/java/smile/regression/LASSO.html/ Smile, LASSO regression]</ref>
<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===
{{main|Нейронные сети, перцептрон}}
Пример классификации с применением <code>weka.classifiers.functions.MultilayerPerceptron</code><ref>[http://weka.sourceforge.net/doc.dev/weka/classifiers/functions/MultilayerPerceptron.html/ Weka, MLP]</ref>
<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;
'''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);
===Рекуррентные нейронные сети===
{{Main|Рекуррентные нейронные сети}}
[https://github.com/deeplearning4j/dl4j-examples/blob/master/dl4j-examples/src/main/java/org/deeplearning4j/examples/recurrent/basic/BasicRNNExample.java Пример] простой рекуррентной нейронной сети, способной генерировать заданную строку по первому символу, с применением библиотеки <code>deeplearning4j</code>.
===Долгая краткосрочная память===
{{Main|Долгая краткосрочная память}}
[https://github.com/deeplearning4j/dl4j-examples/blob/master/dl4j-examples/src/main/java/org/deeplearning4j/examples/recurrent/character/LSTMCharModellingExample.java Пример] реализации рекуррентной нейронной сети, использующей механизм LSTM и натренированной на текстах Шекспира, с применением библиотеки <code>deeplearning4j</code>.
===Метод опорных векторов===
{{main|Метод опорных векторов (SVM)}}
Пример классификации с применением <code>smile.classification.SVM</code><ref>[https://haifengl.github.io/smile/api/java/smile/classification/SVM.html/ Smile, SVM]</ref>
<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);
===Деревья решений, случайный лес===
{{Main|Дерево решений и случайный лес#Пример на языке Java}}
===Бустинг, Ada-boost===
{{main|Бустинг, AdaBoost#Пример на языке Java}}
===EM-алгоритм===
{{Main|EM-алгоритм|ll=EM-алгоритм <sup>[на 08.04.19 не создан]</sup>}}
Пример кластеризации с применением <code>weka.clusterers.EM</code><ref>[http://weka.sourceforge.net/doc.dev/weka/clusterers/EM.html/ Weka, EM]</ref>
<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));
===Уменьшение размерности===
{{Main|Уменьшение размерности#Пример на языке Java}}
===Байесовская классификация===
{{Main|Байесовская классификация#Пример на языке Java}}
===Метрический классификатор и метод ближайших соседей===
{{Main|Метрический классификатор и метод ближайших соседей#Пример на языке Java}}
==См. также==
*[[:Примеры кода на Scala|Примеры кода на Scala]]
*[[:Примеры кода на R|Примеры кода на R]]<sup>[на 08.04.19 не создан]</sup>
*[[:Обзор библиотек для машинного обучения на Python|Обзор библиотек для машинного обучения на Python]]
== Примечания ==
<references/>
[[Категория: Машинное обучение]] [[Категория: Примеры кода]]