/ Java

Java ML Overview

Если Вы решили заниматься машинным обучением, то java не лучший выбор, смело берите python. Но если есть необходимость именно на java запустить какой-то анализ, или применить в уже готовом проекте, то Вы вполне сможете это сделать.

Я бы хотел рассмотреть несколько библиотек для классического машинного обучения и для глубоких нейронных сетей.

Обратите внимание, что любую существующую библиотеку можно запустить на java используя JNI и другие трюки, но здесь больше пойдёт речь о решениях доступных из коробки.

Обзор библиотек машинного обучения

Ожидаемо, на java не много удобных библиотек, которые у всех на слуху, я нашёл несколько ссылок с обзорами:

В списке в первую очередь я выбран наиболее интересные. выбирать будем по следующим критериям:

  • относительно жилой проект
  • не коммерческий (ну правда, кому нужен коммерческий инструмент, когда есть мощные инструменты в open source)
  • качество документации и сообщество
#ml - машинное обучение, 
#dl - deep learning, 
#dm - data mining,
#nn - neural networks, 
#nlp - обработка текстов, 
#pr - подходит для продакшена, 
#el - промышленное обучение.

Итак сам список:

  • Tensorflow - сейчас это самый мощный инструмент в, как для промышленного программирования, так и для исследовательского. Сам thensorflow написан на c++, модели создаются на python, а запускать модели можно уже и на java, haskell, go. (#ml, #dl, #nn, #pr, #el)
  • MLlib (Spark) - библиотека распределённого машинного обучения. Можно использовать с java, scala, python, R. Постоянно развивается, и почти стандарт, наряду с Hadoop. (#ml, #pr, #el)
  • Deeplearning4j - Очень интересная библиотека из java мира, open-source, библиотека для распределённого глубокое-обучения написанная для Java и Scala. Она спроектирована для промышленного использования и исследований. (#dl, #nn, #pr)
  • Mahout - machine learning framework с встроенными алгоритмами. Предоставляет несколько off-the-shelf реализаций алгоритмов. Основной уклон идёт на промышленные системы. Можно использовать с Hadoop. (#ml, #pr, #el)
  • Apache SAMOA - ML framework который содержит абстракции для распределённых потоковых ML алгоритмов и включает разработку новых ML алгоритмов не работая с сложными распределёнными движками обработки. (DSPEe, такие как Apache Storm, Apache S4, and Apache Samza). Пользователи могут разрабатывать потоковые ML алгоритмы однажды и запускать их на множестве DSPEs. Программа в инкубаторе apache. Проект интересный, но больше создан для больший распределённых проектов. (#ml, #pr, #el)
  • Weka - содержит коллекцию алгоритмов машинного обучения и майнинга. Алгоритмы могут быть легко применены напрямую к набору данных или вызываться с java кода. Weka содержит инструменты для предварительной обработки данных, классификации, регрессии, кластеризации, нахождения правил и визуализации. (#ml, #dm, #pr)
  • MOA - популярный open source фреймворк для потокового майнинга, с активно растущим сообществом. Включает набор алгоритмов машинного обучения (классификация, регрессия, кластеризация, нахождения аномалий, рекомендательных систем) и инструменты. Связан с WEKA проектом, MOA написана на Java, и расширяема для многих предметных областей. (#ml, #dm, #pr)
  • MEKA - предоставляет open source реализацию методов для мультиклассового обучения. В мультиклассовой классификации, мы хотим предсказывать несколько выходных параметров для каждого входного значения. Это отличие от стандартного случая, который использует только одну целевую переменную. MEKA базируется на WEKA. (#ml, #pr)
  • Encog - поддерживает SVM, нейронные сети, генетические алгоритмы, байесовы нейронные сети, скрытые марковские модели, генетическое программирование. Библиотека безусловно выглядит интересной, вполне живой, и поддерживает GPU. Одна беда, что разрабатывается она одним человеком, поэтому для промышленного применения может быть не применима. (#ml, #nn)
  • Datumbox - Machine Learning Framework, open-source, написан на Java, позволяет разрабатывать Machine Learning и статистические приложения. Включает большое количество алгоритмов, статистических тестов. Есть алгоритмы для анализа текста, social-media мониторинга. Библиотека кажется интересной. (#ml, #nlp)
  • H2O - Open Source быстро масштабируемое Machine Learning API для приложений (Deep Learning, Gradient Boosting, Random Forest, Generalized Linear Modeling (Logistic Regression, Elastic Net), K-Means, PCA, Stacked Ensembles). Библиотека действительно большая. Не могу сказать, на сколько она на самом деле полезная. Можно использовать с hadoop. (#ml, #el)

Не стандартные алгоритмы

  • N-Dimensional Arrays for Java (ND4J) - научная библиотека для JVM. Также подходит для промышленного использования. Оптимизирована, чтобы потреблять минимум RAM. Библиотека на первый взгляд не про машинное обучение. Но не забывайте, что большинство алгоритмов представляются матричными операциями. Так что библиотеку можно вполне использовать, но всё же она больше для исследований, и разработки чего-то своего.(#pr)
  • RankLib -
    библиотека с алгоритмами для ранжирования, реализовано 8 популярных алгоритмов: MART (Multiple Additive Regression Trees, a.k.a. Gradient boosted regression tree), RankNet, RankBoost, AdaRank, Coordinate Ascent,
    LambdaMART,ListNet,Random Forests.(#ml)
  • Stanford Classifier -
    инструмент для машинного обучения который умеет относить элементы в один из k классов. Вероятностный классификатор, может также вычислять вероятностное распределение для элементов данных. Это реализация maximum entropy классификатора. Звучит сложно, основное применение - анализ текстов. Инструмент в полуживом состоянии.(#nlp)
  • ELKI - open source (AGPLv3) data mining приложение написанное на java. ELKI нацелен на исследовательские алгоритмы, с акцентом на алгоритмы без учителя, кластеризации и выявления аномалий. (#ml, #dm)
  • htm.java - (Иерархическая временная память реализованная на Java) порт Numenta Platform для интеллектуальных вычислений. Думаю библиотека интересна только для исследовательских целей.
  • Neuroph - как говорится в описании: упрощает разработку нейронных сетей, предоставляя Java библиотеку и GUI инструменты для создания, тренировки и сохранения нейронных сетей. Объективно не конкурент современный фреймворкам для нейронных сетей. Возможно не плохо при изучении, т.к. позволяет визуализировать. (#nn)
  • Oryx 2 - реализация лямбда-архитектуры построенная на Apache Spark и Apache Kafka, но со специализацией на real-time масштабируемое машинное обучение. Это фреймворк для построения приложений, но также включает пакеты для e2e приложения для коллаборативной фильтрации (рекомендательные системы), классификации, регрессии и кластеризации. Проект кажется интересным для масштабного обучения.(#el)
  • Advanced Data mining And Machine learning System - Официальная информация: это новый гибкий механизм документооборота, нацеленный на быстрое создание и поддержание в реальном времени сложных технологических потоков знаний, выпущенных под лицензией GPLv3. Проект вроде бы живой, но информации о нём не много, не вижу причин использовать эту библиотеку. Это некоторый инструмент, для создания полных потоков обработки, работает с MOA, WEKA, deeplearning4j.

Устаревшие или коммерческие библиотеки

  • Mallet - java machine learning набор инструментов для текстовых документов. Mallet поддерживает алгоритмы классификации, такие как максимальная энтропия, наивный байес и деревья решения для классификации. Проект содержит несколько интересных алгоритмов, но в настоящее время не активный. По моему мнению библиотека может быть интересна для изучения алгоритмов, но не для реального использования. (#nlp)
  • JSAT - разработка почти не активная. Ведётся одним человеком, как говорит автор, больше для его самообучения. Не содержит внешних зависимостей. (#ml)
  • Java Machine Learning Library - набор реализаций алгоритмов машинного обучения. Алгоритмы хорошо документированы. В основном написаны на java. Но использовать для настоящих проектов следует с осторожностью, т.к. проект почти не развивается.(#ml)
  • Java-ML - java API с набором алгоритмов машинного обучения, реализованных на Java. Он предоставляет только стандартный интерфейс для алгоритмов. Библиотека почти не обновлялась с 2012, значит и смысла в ней мало сегодня.(#ml)
  • Cortical.io - включает Retina API, предоставляет алгоритмы, включая NLP. Из описания на сайте сложно понять о возможностях, выглядит как сайт для продаж. Не стал бы полагаться на эту библиотеку.
  • Repidminer - Есть коммерческая и свободная версия. По сайту не сразу понятно, что же умеет делать эта библиотека. На сайте много информации для продаж, не похоже, что стоит трать время на этот инструмент.

Резюме

Позже отдельно и более детально рассмотрю tensorflow с java, Spark MLib, Deeplearning4j.

Основная информация получена по этим ссылкам:

  1. http://www.demnag.com/b/java-machine-learning-tools-libraries-cm570/
  2. http://www.javaworld.com/article/2461485/big-data/5-ways-to-add-machine-learning-to-java-javascript-and-more.html
  3. https://jaxenter.com/top-5-machine-learning-libraries-java-132091.html
  4. http://blog.takipi.com/how-to-get-started-with-java-machine-learning/
  5. http://www.datasciencecentral.com/profiles/blogs/10-popular-java-machine-learning-tools-libraries
Java ML Overview
Share this

Subscribe to Yet another blog