MLlib - это библиотека машинного обучения (ML) Spark. Его цель - сделать практическое машинное обучение масштабируемым и простым. На высоком уровне он предоставляет такие инструменты, как:
- Алгоритмы машинного обучения: распространенные алгоритмы обучения, такие как классификация, регрессия, кластеризация и совместная фильтрация.
- Featurization: извлечение признаков, преобразование, уменьшение размерности и выбор
- Конвейеры: инструменты для создания, оценки и настройки конвейеров машинного обучения
- Постоянство: сохранение и загрузка алгоритмов, моделей и конвейеров
- Утилиты: линейная алгебра, статистика, обработка данных и др.
Предпосылки:
Прежде чем мы начнем, настройте на своем компьютере среду Python и Apache Spark. Перейдите в этот блог здесь, чтобы установить, если вы еще не сделали этого.
Позже мы также будем использовать модуль MLlib от Python в нашей виртуальной среде, который по умолчанию встроен в Spark.
Spark MLlib:
Apache Spark предлагает API машинного обучения под названием MLlib. PySpark также имеет этот API машинного обучения на Python. Он поддерживает различные типы алгоритмов, которые упомянуты ниже:
- mllib.classification - пакет spark.mllib поддерживает различные методы двоичной классификации, многоклассовой классификации и регрессионного анализа. Некоторые из самых популярных алгоритмов классификации: Случайный лес, Наивный байесовский алгоритм, Дерево решений и т. Д.
- mllib.clustering. Кластеризация - это проблема неконтролируемого обучения, при которой вы стремитесь сгруппировать подмножества объектов друг с другом на основе некоторого понятия сходства.
- mllib.fpm - частое сопоставление с образцом - это поиск часто встречающихся элементов, наборов элементов, подпоследовательностей или других подструктур, которые обычно являются одними из первых шагов для анализа крупномасштабного набора данных. Это была активная тема исследований в области интеллектуального анализа данных в течение многих лет.
- mllib.linalg - MLlib-утилиты для линейной алгебры.
- mllib.recommendation - совместная фильтрация обычно используется для рекомендательных систем. Эти методы направлены на заполнение недостающих записей в матрице ассоциации пользовательских элементов.
- spark.mllib - в настоящее время поддерживает совместную фильтрацию на основе моделей, при которой пользователи и продукты описываются небольшим набором скрытых факторов, которые можно использовать для прогнозирования пропущенных записей. spark.mllib использует алгоритм альтернативных наименьших квадратов (ALS) для изучения этих скрытых факторов.
- mllib.regression - линейная регрессия относится к семейству алгоритмов регрессии. Цель регрессии - найти взаимосвязи и зависимости между переменными. Интерфейс для работы с моделями линейной регрессии и сводками моделей аналогичен случаю логистической регрессии.
Преимущества Spark MLlib:
- Spark MLlib тесно интегрирован со Spark, что упрощает разработку эффективных крупномасштабных алгоритмов машинного обучения, которые обычно являются итеративными по своей природе.
- Сообщество Spark с открытым исходным кодом привело к быстрому росту и внедрению Spark MLlib. Более 200 человек из 75 организаций предоставляют около 2000+ исправлений только для MLlib.
- MLlib легко развернуть и не требует предварительной установки, если кластер Hadoop 2 уже установлен и запущен.
- Масштабируемость, простота и языковая совместимость Spark MLlib (вы можете писать приложения на Java, Scala и Python) помогают специалистам по обработке данных быстрее решать итерационные задачи с данными. Специалисты по обработке данных могут сосредоточиться на важных проблемах с данными, прозрачно используя скорость, простоту и тесную интеграцию унифицированной платформы Spark.
- MLlib обеспечивает максимальную производительность для специалистов по обработке данных и в 10–100 раз быстрее, чем Hadoop и Apache Mahout. Чередование алгоритмов машинного обучения методом наименьших квадратов в Amazon Reviews по набору данных из 660 миллионов пользователей, 2,4 миллиона элементов и оценок 3,5 B выполняется за 40 минут с 50 узлами.
Базовая статистика и исследовательский анализ данных
Сводные статистические данные :
Мы получаем сводную статистику столбца для RDD[Vector]
с помощью функции colStats
, доступной в Statistics
.
colStats()
возвращает экземпляр MultivariateStatisticalSummary
, который содержит максимальное, минимальное, среднее значение, дисперсию и количество ненулевых значений по столбцам, а также общее количество.
Корреляции:
Вычисление корреляции между двумя сериями данных - обычная операция в статистике. В MLlib мы обеспечиваем гибкость для расчета попарных корреляций между множеством рядов. В настоящее время поддерживаемые методы корреляции - это корреляция Пирсона и Спирмена.
Statistics
предоставляет методы для расчета корреляций между рядами. В зависимости от типа ввода, два RDD[Double]
или RDD[Vector]
, на выходе будет Double
или корреляция Matrix
соответственно.
Стратифицированная выборка:
В отличие от других статистических функций, которые находятся в MLLib, методы стратифицированной выборки sampleByKey
и sampleByKeyExact
могут выполняться на RDD пар ключ-значение. Для стратифицированной выборки ключи можно рассматривать как метку, а значение - как особый атрибут.
Генерация случайных данных:
Генерация случайных данных полезна для рандомизированных алгоритмов, прототипирования и тестирования производительности. MLlib поддерживает создание случайных RDD с помощью i.i.d. значения, взятые из данного распределения: равномерный, стандартный нормальный или пуассоновский.
RandomRDDs
предоставляет фабричные методы для генерации случайных двойных RDD или векторных RDD. В следующем примере создается случайное двойное RDD, значения которого соответствуют стандартному нормальному распределению N(0, 1)
, а затем оно сопоставляется с N(1, 4)
.
Извлечение и преобразование признаков:
TF-IDF:
мы начинаем с набора предложений. Мы разбиваем каждое предложение на слова, используя Tokenizer
. Для каждого предложения (набора слов) мы используем HashingTF
для хеширования предложения в вектор признаков. Мы используем IDF
для изменения масштаба векторов признаков; это обычно улучшает производительность при использовании текста в качестве функций. Затем наши векторы признаков можно было бы передать алгоритму обучения.
Обратитесь к документации HashingTF Python и документации IDF Python для получения более подробной информации об API.
Word2Vec:
Начнем с набора документов, каждый из которых представлен в виде последовательности слов. Для каждого документа мы преобразуем его в вектор признаков. Затем этот вектор признаков можно передать алгоритму обучения.
Обратитесь к документации Word2Vec Python для получения более подробной информации об API.
Токенизатор:
Токенизация - это процесс взятия текста (например, предложения) и разбиения его на отдельные термины (обычно слова). Эту функциональность обеспечивает простой класс Tokenizer. В приведенном ниже примере показано, как разбить предложения на последовательности слов.
Обратитесь к документации Tokenizer Python и RegexTokenizer Python для получения более подробной информации об API.
N-грамм:
N -грамма - это последовательность из nn токенов (обычно слов) для некоторого целого числа nn. Класс NGram
можно использовать для преобразования входных функций в nn-граммы.
Обратитесь к документации NGram Python для получения более подробной информации об API.
Классификация и регрессия:
Бинарная классификация (SVM, логистическая регрессия):
В следующем примере показано, как загрузить образец набора данных, построить модель логистической регрессии и сделать прогнозы на основе полученной модели для вычисления ошибки обучения.
В следующем примере показано, как загрузить данные обучения, проанализировать их как RDD LabeledPoint. Затем в примере используется LinearRegressionWithSGD для построения простой линейной модели для прогнозирования значений меток. В конце мы вычисляем среднеквадратичную ошибку, чтобы оценить степень соответствия.
Деревья решений:
Классификация:
В приведенном ниже примере показано, как загрузить файл данных LIBSVM, проанализировать его как RDD LabeledPoint
и затем выполнить классификацию с использованием дерева решений с примесью Джини в качестве меры примеси и максимальной глубиной дерева 5. Ошибка обучения вычисляется как измерить точность алгоритма.
Регрессия:
В приведенном ниже примере показано, как загрузить файл данных LIBSVM, проанализировать его как RDD LabeledPoint
и затем выполнить регрессию с использованием дерева решений с дисперсией в качестве меры примеси и максимальной глубиной дерева 5. Среднеквадратичная ошибка (MSE) вычисляется в конце для оценки степени соответствия.
Наивный Байес:
MLlib поддерживает полиномиальный наивный байесовский метод, который обычно используется для классификации документов.
NaiveBayes реализует полиномиальный наивный байесовский метод. Он принимает RDD LabeledPoint и необязательный параметр сглаживания lambda
в качестве входных данных и выводит NaiveBayesModel, которую можно использовать для оценки и прогнозирования.
Кластеризация:
В следующем примере после загрузки и анализа данных мы используем объект KMeans для кластеризации данных в два кластера. Количество желаемых кластеров передается в алгоритм. Затем мы вычисляем в пределах установленной суммы квадратов ошибок (WSSSE). Вы можете уменьшить эту меру ошибки, увеличив k.
Фактически, оптимальное k обычно такое, где есть «изгиб» на графике WSSSE.