Машинное обучение с Apache Spark: битва пакетов или отличия библиотек MLLib от ML

Автор Категория , ,
Машинное обучение с Apache Spark: битва пакетов или отличия библиотек MLLib от ML

Сегодня рассмотрим Apache Spark с точки зрения Data Science специалиста: поговорим про сходства и отличия библиотек машинного обучения в этом фреймворке. Также ответим на вопрос «Spark ML vs MLLib», разберем, зачем Data Scientist’у и аналитику больших данных нужны курсы по Apache Spark, а в заключение отметим наиболее важные улучшения библиотеки Machine Learning в 3-ей версии фреймворка.

За что Data Scientist любит Apache Spark: 4 основных причины

На текущий момент Apache Spark считается одним из наиболее популярных фреймворков в мире Big Data, благодаря возможности быстро обрабатывать большие объемы данных. Для специалиста по Data Science он предоставляет следующие преимущества:

  • обработка действительно больших объемов данных благодаря распределенной архитектуре и распараллеливанию вычислительных потоков по разделам на разных узлах кластера, который можно масштабировать, добавляя новые машины;
  • быстрота вычислений за счет размещения промежуточных результатов MapReduce в оперативной памяти узлов вместо записи на диск, как в классическом Apache Hadoop;
  • поддержка популярного в Data Science среде языка программирования Python – PySpark, об особенностях перехода на который мы писали здесь;
  • наличие популярных алгоритмов машинного обучения (классификация, регрессия, кластеризация, фильтрация) и средств подготовки данных к моделированию (очистка, извлечение признаков, преобразование и пр.), а также алгебраических и статистических функций. Все это упаковано в специальные пакеты библиотек Machine Learning – MLLib и ML, о которых мы поговорим далее.

Немного истории: как в Спарк появились библиотеки Machine Learning

Работа над библиотекой Mllib стартовала одновременно с разработкой самого Apache Spark, в 2009 году. Благодаря распределенной архитектуре фреймворка, MLlib работал в 9 раз быстрее, чем широко используемая тогда ML-библиотека Apache Mahout. Первая версия MLlib в составе Spark 1.0.0 вышла 30 мая 2014 года [1].

Изначальной структурой данных в Apache Spark был RDD (Resilient Distributed Dataset, надежная распределенная коллекция типа таблицы), на которой позднее были основаны структуры более высокого уровня абстракции – DataFrame и DataSet, о чем мы рассказывали здесь. Поэтому сперва Spark MLLib работал именно с API RDD, будучи упакован в пакет spark.mllib.

Но современные Spark-разработчики и Data Scientist’ы работают чаще с DataFrame, а не с RDD. Поэтому с версии фреймворка 2.0, выпущенной в 2016 году, основным ML-API в Spark стал DataFrame в пакете spark.ml, а библиотека MLlib на базе RDD перешла в режим обслуживания. Это означает, что в API MLlib на основе RDD больше не добавляются новые функции, хотя пакет spark.mllib входит в состав каждого нового релиза Apache Spark, включая исправления ошибок предыдущих версий.

По сравнению с RDD, DataFrame предоставляет более удобный API, включая единый API для алгоритмов машинного обучения на нескольких языках программирования (Scala, Java, Python, R). Кроме того, датафреймы упрощают прикладную работу с конвейерами Machine Learning, особенно операции преобразования.

Примечательно, что «Spark ML» не является официальным названием библиотеки в пакете spark.ml, но часто используется для обозначения API MLlib на основе DataFrame, чтобы подчеркнуть отличия от предыдущей альтернативы в spark.mllib. При этом официальная документация фреймворка подчеркивает, что оба API поддерживаются и ни один из них не является устаревшим [2].

Spark MLLib версии 3.0: важные улучшения

В заключение отметим важных несколько зависимостей и улучшений библиотеки MLlib в 3-ей версии Apache Spark. MLlib использует пакеты линейной алгебры Breeze и netlib-java для оптимизации числовой обработки, которые могут вызывать собственные библиотеки ускорения (Intel MKL или OpenBLAS), если они доступны. Но из-за различных лицензий OSS собственные прокси-серверы netlib-java не могут распространяться вместе с Apache Spark. В этом случае придется вручную включить ускоренную обработку линейной алгебры в MLlib. Если этого не сделать, будет использоваться чистая реализация JVM, о чем предупредят следующие сообщения:

  • WARN BLAS: Failed to load implementation from:com.github.fommil.netlib.NativeSystemBLAS
  • WARN BLAS: Failed to load implementation from:com.github.fommil.netlib.NativeRefBLAS

Чтобы использовать MLlib в Python, понадобится NumPy версии 1.4 или новее.

Из наиболее значимых улучшений и добавлений MLlib Apache Spark 3.0, можно выделить следующие [2]:

  • поддержка нескольких столбцов ​​в операторах Binarizer, StringIndexer, StopWordsRemover и PySpark QuantileDiscretizer;
  • преобразование функций работы с деревьями решений (случайный лес, градиентные и ансамблевые методы);
  • два новых оценщика MultilabelClassificationEvaluator и RankingEvaluator;
  • поддержка весов выборки ​​в методах DecisionTreeClassifier/Regressor, RandomForestClassifier/Regressor, GBTClassifier/Regressor, MulticlassificationEvaluator, RegressionEvaluator, BisectingKMeans, KMeans и
  • API языка R для PowerIterationClustering;
  • слушатель для отслеживания состояния ML-конвейера;
  • подгонка валидационного набора ​​к градиентным деревьям в Python;
  • преобразователь RobustScaler, который преобразует датасет векторных строк, удаляя медианное значение и масштабируя данные в соответствии с диапазоном квантилей. Он похож на StandardScaler, но вместо среднего и стандартного отклонения используются медиана и квантильный диапазон, что делает его устойчивым к выбросам.
  • классификатор и регрессор Factorization Machines, чтобы оценивать взаимодействия между функциями даже в очень специфических задачах, например, в рекомендательной системе. Sml поддерживает машины факторизации для двоичной классификации и регрессии.
  • наивный гауссовский байесовский классификатор и дополнительный Naive Bayes Classifier;
  • однозначное соответствие функций ML между Scala и Python – удалены разночтений, связанные с тем, что большинство моделей в PySpark не поддерживают методы получения и установки параметров;
  • поддержка методов прогнозирования predictRaw и predictProbability на одном экземпляре для моделей классификации, регрессии и кластеризации, кроме LinearSVCModel.

Таким образом, в 3-ей версии фреймворка ML с API Data Frame стал еще лучше и удобнее для специалиста по Data Science и Machine Learning. Больше подробностей про возможности Apache Spark для разработки распределенных приложений аналитики больших данных вы узнаете на специализированных курсах в нашем лицензированном учебном центре обучения и повышения квалификации для разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data в Москве:

Источники

  1. https://ru.wikipedia.org/wiki/Apache_Spark
  2. http://spark.apache.org/docs/latest/ml-guide.html