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.

Источники / ссылки: