Обзор библиотек для машинного обучения на Python
Содержание
- 1 Популярные библиотеки
- 2 Примеры кода
- 2.1 Вариации регрессии
- 2.2 Классификация при помощи MLP
- 2.3 Рекуррентные нейронные сети
- 2.4 Долгая краткосрочная память
- 2.5 Метод опорных векторов
- 2.6 Деревья решений, случайный лес
- 2.7 Бустинг, Ada-boost
- 2.8 EM-алгоритм
- 2.9 Уменьшение размерности
- 2.10 Байесовская классификация
- 2.11 Метрический классификатор и метод ближайших соседей
- 3 См. также
- 4 Примечания
Популярные библиотеки
-
Weka
[1] — популярная библиотека, написанная на языкеJava
и содержащая в себе множество алгоритмов машинного обучения для задач анализа данных. Предоставляет инструменты для решения задач классификации, кластеризации данных, регрессионного анализа и др. -
Smile
[2] —Java
фреймворк для машинного обучения, анализа естественного языка, линейной алгебры и визуализации данных.Smile
покрывает все основные аспекты машинного обучения и предоставляет высокопроизводительные алгоритмы и структуры данных. -
deeplearning4j
[3] —Java
библиотека для глубокого обучения, создания рекуррентых (в том числе распределенных) нейронных сетей.
Примеры кода
Для работы с приведенными ниже примерами необходим JDK
версии не ниже 10 и система сборки Maven
.
Каждый пример структурирован следующим образом:
-
Maven
зависимость на необходимые библиотеки - Список необходимых
import
директив - Код примера с комментариями
Вариации регрессии
Линейная регрессия
Пример линейной регресии с применением 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-алгоритм
Пример кластеризации с применением 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));
Уменьшение размерности
Байесовская классификация
Метрический классификатор и метод ближайших соседей
См. также
- Примеры кода на Scala
- Примеры кода на R[на 08.04.19 не создан]
- Обзор библиотек для машинного обучения на Python