Примеры кода на Java — различия между версиями
м (rollbackEdits.php mass rollback)  | 
				|||
| (не показано 11 промежуточных версий 4 участников) | |||
| Строка 1: | Строка 1: | ||
[[File:Java.jpeg|auto|thumb|Java: https://www.oracle.com/java/]]  | [[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>Weka</code><ref>[https://www.cs.waikato.ac.nz/~ml/weka/ Weka]</ref> {{---}} популярная библиотека, написанная на языке <code>Java</code> и содержащая в себе множество алгоритмов машинного обучения для задач анализа данных. Предоставляет инструменты для решения задач классификации, кластеризации данных, регрессионного анализа и др. Основные возможности <code>Weka</code> можно сгруппировать в 3 категории: инструменты пре-процессинга данных, алгоритмы машинного обучения и инструменты оценки модели. Инструменты пре-процессинга в <code>Weka</code> называются фильтрами, <code>Weka</code> содержит фильтры для дискретиации, нормализации, уменьшения размерности, трансформации и комбинирования признаков. <code>Weka Machine Learning Toolkit</code> содержит алгоритмы классификации, регрессии, кластеризации. Реализованы следующие алгоритмы обучения: деревья решений, метод опорных векторов, <code>MLP</code>, логистическая регрессия, Байесовские сети, и др., мета-алгоритмы включают в себя: бэггинг, [[Бустинг, AdaBoost|бустинг]], стекинг, алгоритмы выбора признаков: [[Метод главных компонент (PCA)| PCA]]<sup>[на 28.01.19 не создан]</sup>, фильтрующие методы, основанные на information gain, коэффициенте корреляции Пирсона и <code>OneR</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>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>deeplearning4j</code><ref>[https://github.com/deeplearning4j/deeplearning4j deeplearning4j, deep learning & linear algebra for Java/Scala with GPUs + Spark]</ref> {{---}} <code>Java</code> библиотека для глубокого обучения, создания рекуррентых (в том числе распределенных) нейронных сетей.  | ||
| + | ==Основные особенности использования Java для задач машинного обучения==  | ||
| + | В отличие от <code>Python</code>, <code>Java</code> не обладает столь обширной экосистемой, ориентированной на решение задач машинного обучения и анализа данных. Большинство имеющихся инструментов являются узко специализированными (по сравнению, например, с <code>scikit-learn</code><ref>[https://scikit-learn.org/stable/ Библиотека scikit-learn]</ref>) и хуже документированы. Ввиду более низкой популярности языка в сфере <code>ML</code> большинство онлайн курсов и обучающих материалов ориентированы на <code>Python</code>. Однако, несмотря на вышеперечисленные факторы, <code>Java</code> остается  | ||
| + | популярной альтернативой, особенно при необходимости интеграции с существующими <code>JVM</code> проектами. Также к достоинствам <code>Java</code> можно отнести статическую типизацию (и как следствие уменьшенную вероятность ошибок времени исполнения) и заметно более развитую поддержку в IDE.  | ||
==Примеры кода==  | ==Примеры кода==  | ||
Для работы с приведенными ниже примерами необходим <code>JDK</code> версии не ниже 10 и система сборки <code>Maven</code>.<br>  | Для работы с приведенными ниже примерами необходим <code>JDK</code> версии не ниже 10 и система сборки <code>Maven</code>.<br>  | ||
| Строка 13: | Строка 16: | ||
{{main|Вариации регрессии}}  | {{main|Вариации регрессии}}  | ||
====Линейная регрессия====  | ====Линейная регрессия====  | ||
| − | {{main|Линейная регрессия}}  | + | {{main|Линейная регрессия#Пример на языке Java}}  | 
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
====Логистическая регрессиия====  | ====Логистическая регрессиия====  | ||
| − | {{main|Логистическая регрессия}}  | + | {{main|Логистическая регрессия#Пример на языке Java}}  | 
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
====Гребневая регрессия (ридж-регрессия)====  | ====Гребневая регрессия (ридж-регрессия)====  | ||
| − | {{Main|Вариации регрессии#  | + | {{Main|Вариации регрессии#Пример на языке Java}}  | 
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
====Лассо-регрессия====  | ====Лассо-регрессия====  | ||
| − | {{Main|Вариации регрессии#  | + | {{Main|Вариации регрессии#Пример на языке Java_2}}  | 
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
===Метрический классификатор и метод ближайших соседей===  | ===Метрический классификатор и метод ближайших соседей===  | ||
| Строка 107: | Строка 29: | ||
===Классификация при помощи MLP===  | ===Классификация при помощи MLP===  | ||
| − | {{main|Нейронные сети, перцептрон}}  | + | {{main|Нейронные сети, перцептрон#Пример на языке Java}}  | 
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
===Рекуррентные нейронные сети===  | ===Рекуррентные нейронные сети===  | ||
| − | {{Main|Рекуррентные нейронные сети}}  | + | {{Main|Рекуррентные нейронные сети#Пример на языке Java}}  | 
| − | |||
===Долгая краткосрочная память===  | ===Долгая краткосрочная память===  | ||
| − | {{Main|Долгая краткосрочная память}}  | + | {{Main|Долгая краткосрочная память#Пример на языке Java}}  | 
| − | |||
===Метод опорных векторов===  | ===Метод опорных векторов===  | ||
| − | {{main|Метод опорных векторов (SVM)  | + | {{main|Метод опорных векторов (SVM)#Пример на языке Java}}  | 
| − | Пример   | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
===Деревья решений, случайный лес===  | ===Деревья решений, случайный лес===  | ||
{{Main|Дерево решений и случайный лес#Пример на языке Java}}  | {{Main|Дерево решений и случайный лес#Пример на языке Java}}  | ||
| Строка 217: | Строка 76: | ||
==См. также==  | ==См. также==  | ||
*[[:Примеры кода на Scala|Примеры кода на Scala]]  | *[[:Примеры кода на Scala|Примеры кода на Scala]]  | ||
| − | *[[:Примеры кода на R|Примеры кода на R]]  | + | *[[:Примеры кода на R|Примеры кода на R]]  | 
*[[:Обзор библиотек для машинного обучения на Python|Обзор библиотек для машинного обучения на Python]]  | *[[:Обзор библиотек для машинного обучения на Python|Обзор библиотек для машинного обучения на Python]]  | ||
Текущая версия на 19:22, 4 сентября 2022
Содержание
- 1 Популярные библиотеки
 - 2 Основные особенности использования Java для задач машинного обучения
 - 3 Примеры кода
- 3.1 Вариации регрессии
 - 3.2 Метрический классификатор и метод ближайших соседей
 - 3.3 Классификация при помощи MLP
 - 3.4 Рекуррентные нейронные сети
 - 3.5 Долгая краткосрочная память
 - 3.6 Метод опорных векторов
 - 3.7 Деревья решений, случайный лес
 - 3.8 Бустинг, Ada-boost
 - 3.9 EM-алгоритм
 - 3.10 Уменьшение размерности
 - 3.11 Байесовская классификация
 
 - 4 См. также
 - 5 Примечания
 
Популярные библиотеки
-  
Weka[1] — популярная библиотека, написанная на языкеJavaи содержащая в себе множество алгоритмов машинного обучения для задач анализа данных. Предоставляет инструменты для решения задач классификации, кластеризации данных, регрессионного анализа и др. Основные возможностиWekaможно сгруппировать в 3 категории: инструменты пре-процессинга данных, алгоритмы машинного обучения и инструменты оценки модели. Инструменты пре-процессинга вWekaназываются фильтрами,Wekaсодержит фильтры для дискретиации, нормализации, уменьшения размерности, трансформации и комбинирования признаков.Weka Machine Learning Toolkitсодержит алгоритмы классификации, регрессии, кластеризации. Реализованы следующие алгоритмы обучения: деревья решений, метод опорных векторов,MLP, логистическая регрессия, Байесовские сети, и др., мета-алгоритмы включают в себя: бэггинг, бустинг, стекинг, алгоритмы выбора признаков: PCA[на 28.01.19 не создан], фильтрующие методы, основанные на information gain, коэффициенте корреляции Пирсона иOneRклассификаторе. -  
Smile[2] —Javaфреймворк для машинного обучения, анализа естественного языка, линейной алгебры и визуализации данных.Smileпокрывает все основные аспекты машинного обучения и предоставляет высокопроизводительные алгоритмы и структуры данных. -  
deeplearning4j[3] —Javaбиблиотека для глубокого обучения, создания рекуррентых (в том числе распределенных) нейронных сетей. 
Основные особенности использования Java для задач машинного обучения
В отличие от Python, Java не обладает столь обширной экосистемой, ориентированной на решение задач машинного обучения и анализа данных. Большинство имеющихся инструментов являются узко специализированными (по сравнению, например, с scikit-learn[4]) и хуже документированы. Ввиду более низкой популярности языка в сфере ML большинство онлайн курсов и обучающих материалов ориентированы на Python. Однако, несмотря на вышеперечисленные факторы, Java остается
популярной альтернативой, особенно при необходимости интеграции с существующими JVM проектами. Также к достоинствам Java можно отнести статическую типизацию (и как следствие уменьшенную вероятность ошибок времени исполнения) и заметно более развитую поддержку в IDE.
Примеры кода
Для работы с приведенными ниже примерами необходим JDK версии не ниже 10 и система сборки Maven.
Каждый пример структурирован следующим образом: 
-  
Mavenзависимость на необходимые библиотеки -  Список необходимых 
importдиректив - Код примера с комментариями
 
Вариации регрессии
Линейная регрессия
Логистическая регрессиия
Гребневая регрессия (ридж-регрессия)
Лассо-регрессия
Метрический классификатор и метод ближайших соседей
Классификация при помощи MLP
Рекуррентные нейронные сети
Долгая краткосрочная память
Метод опорных векторов
Деревья решений, случайный лес
Бустинг, Ada-boost
EM-алгоритм
Пример кластеризации с применением weka.clusterers.EM[5]
<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));