В этой статье мы поговорим про компонент MLlib, который входит в популярный Big Data фреймворк Apache Spark. Читайте далее про архитектуру и типы данных этого полезного средства реализации алгоритмов машинного обучения в промышленной разработке Big Data приложений.
Как работает MLlib: особенности архитектуры
Напомним, MLlib позволяет вести работу с функциями машинного обучения во фреймворке Spark. При этом в качестве данных для обучения он принимает распределенные наборы RDD. Это обусловлено особенностями архитектуры MLlib, которую мы рассмотрим далее.
Архитектура MLlib
MLlib – это библиотека функций, позволяющих реализовать алгоритмы машинного обучения. Она предназначена для использования в кластерах и может использоваться во всех языках программирования, которые поддерживаются фреймворком Spark (JAVA, Python, Scala). Библиотека MLlib построена с применением очень простой архитектуры, когда к распределенным наборам данных, которые представлены в виде наборов RDD, применяются разные алгоритмы машинного обучения.
В этой библиотеке вводится несколько новых типов данных (например, маркированные точки и векторы). Все алгоритмы, которые содержит эта библиотека, являются параллельными. В MLlib имеется реализация таких алгоритмов, как распределенные случайные леса (distributed random forest), метод К-средних (K-means) и метод чередующихся наименьших квадратов (alternating least squares). Это означает, что MLlib предназначена для обработки больших массивов данных. Все эти алгоритмы требуют определить для каждого элемента набор характеристических признаков (features), который будет передаваться как параметр для функции обучения. После того, как пройдет преобразование в векторы признаков, большинство алгоритмов обучения пытаются найти оптимум математической функции на их основе. Отметим, что обучающие алгоритмы имеют параметры, влияющие на результаты, поэтому на практике в процессе обучения создается несколько версий модели и производится оценка каждой из них.
Типы данных
MLlib предоставляет несколько собственных типов данных. Среди них наиболее значимыми являются следующие:
- Vector – это вектор в математическом смысле. В MLlib есть 2 разновидности векторов:
- плотные, которые хранят все элементы;
- разреженные, которые хранят все ненулевые значения.
- LabeledPoint – маркированная точка, которая используется в обучающих алгоритмах классификации и регрессии. Она включает в себя вектор признаков и маркер, который является вещественным числом;
- Семейство классов классов Model – это все модели, которые являются результатом работы обучающего алгоритма.
Все объекты этих данных обычно создаются путем выполнения команд компонента Spark SQL (например, SELECT
, GROUP BY
, ORDER BY
).
Начало работы с MLlib: несколько практических примеров
Для того, начать работу с библиотекой MLlib, необходимо настроить базовую конфигурацию в зависимости от того, какие функции необходимо использовать. Давайте рассмотрим простой пример создания векторов. Для этого нам необходимо импортировать класс Vectors
:
from pyspark.mllib.linalg import Vectors
А теперь создадим сам вектор:
Vector = Vectors.dense([1.0, 2.0, 3.0])
Таким образом мы создали плотный вектор. Теперь давайте создадим разреженный вектор с помощью метода sparse()
:
Vector_sp = Vectors.sparse (4,{0: 1.0, 2: 2.0})
Мы рассмотрели 2 способа создания векторов. А теперь давайте с помощью библиотеки MLlib рассмотрим пример масштабирования двух векторов по средним значениям и стандартным отклонениям, вычислив среднее арифметическое и дисперсию каждого столбца датасета:
from pyspark.mllib.feature import StandardScaler vectors = [Vectors.dense([-2.0, 5.0, 1.0]), Vectors.dense([2.0, 0.0, 1.0])] vectors_data = sc.parallelize(vectors) scaler = StandardScaler(withMean=True, withStd=True) data_model = scaler.fit(vectors_data) result_rdd = model.transform(vectors_data) result.collect()
Как мы видим, в результате масштабирования мы получили 2 вектора с равными весами. Благодаря такому масштабированию, алгоритмы машинного обучения более точно оценивают величину каждого элемента в векторе признаков.
Таким образом, параллельность алгоритмов машинного обучения библиотеки Spark MLlib позволяет обрабатывать огромные наборы данных и получать наиболее точные результаты. Все это делает фреймворк Apache Spark весьма полезным средством для Data Scientist’а и разработчика Big Data приложений. В следующей статье мы поговорим про выполнение Spark-приложений в кластере.
Больше подробностей про применение Apache Spark в проектах анализа больших данных, разработки Big Data приложений и прочих прикладных областях Data Science вы узнаете на практических курсах по Spark в нашем лицензированном учебном центре обучения и повышения квалификации ИТ-специалистов в Москве.