Практика машинного обучения на основе Spark (2) — первое знакомство с MLlib
Практика машинного обучения на основе Spark (2) — первое знакомство с MLlib

1 Обзор MLlib

1.1 Введение в MLlib

◆ Это библиотека машинного обучения, основанная на ядре Spark и обладающая преимуществами Spark.

◆ Базовые вычисления оптимизированы и зачастую более эффективны, чем обычное кодирование.

◆ Реализует различные алгоритмы машинного обучения, позволяющие обучать модели и прогнозировать.

1.2 Алгоритм, реализованный Spark MLlib

◆ Логистическая регрессия Наивная байесовская линейная регрессия Дерево решений SVM Разложение матрицы LDA

1.3 Официальное введение Spark MLlib

1.3.1 Поиск в официальной документации

1.3.2 Чтение документации — Руководство по библиотеке машинного обучения (MLlib)

Введение

MLlib — это библиотека машинного обучения (ML) Spark. Цель — сделать практическое машинное обучение масштабируемым и простым. На высоком уровне он предоставляет следующие инструменты:

  • Алгоритмы машинного обучения: общие алгоритмы обучения,Такие как классификация,возвращаться,Кластеризация и совместная фильтрация
  • Характеристика: извлечение признаков,Конвертировать,Уменьшение размерности и выбор
  • Конвейеры: инструменты для построения, оценки и настройки конвейеров машинного обучения.
  • Персистентность: алгоритм сохранения и загрузки, модель и конвейер.
  • Утилиты: линейная алгебра, статистика, обработка данных и т.д.
Объявление: API на основе DataFrame является основным API.
API на основе MLlib RDD теперь находится в режиме обслуживания.

Из Искры 2.0начинать,spark.mllibПакет основан наRDDизAPIВошел в режим обслуживания Режим. Sparkиз Основное машинное обучениеAPIсейчас этоspark.mlПакет основан наDataFrameизAPI

Каков эффект?
  • MLlibвсе равно будет поддерживатьсяискра.mllibна основеRDDизAPIи исправления ошибок
  • MLlib не добавляет новые функции в API на основе RDD.
  • В выпусках Spark 2.x MLlib добавит функциональные возможности для API на основе DataFrames для достижения функционального равенства с API на основе RDD.
  • До достижения функционального паритета (грубая оценка Spark 2.3)после,Воля Устарелона основеRDDизAPI。
  • Ожидается,что API на основе RDD будет доступен в Spark. 3.0серединаудалить.
Почему MLlib перешла на API на основе DataFrame?
  • DataFrames предоставляют более удобный API, чем RDD. Многие преимущества DataFrame включают источники данных Spark, SQL / Запрос DataFrame,TungstenиCatalystОптимизированный и кросс-язычныйизединыйAPI。
  • MLlib на основе DataFrame API предоставляет унифицированный API для алгоритмов машинного обучения и нескольких языков.
  • DataFrames упрощает практические конвейеры машинного обучения,Особенно функция Конвертировать。Для получения дополнительной информации,ВидетьРуководство по трубопроводу
Что такое «Спарк МЛ»?

“Spark ML» не является официальным названием, но иногда используется для обозначения библиотек, основанных на MLlib. DataFrameизAPI。Это в основномдапотому чтона основеDataFrameизAPIиспользоватьизorg.apache.spark.ml Scalaимя пакета,и «Spark ML Терминал «Трубопроводы», который мы изначально использовали, чтобы подчеркнуть концепцию трубопровода.

MLlib устарел?

Нет,MLlib включает API на основе RDD и API на основе DataFrame. Однако API на основе RDD сейчас находится в режиме обслуживания.,APIВсе Нетодеяло Устарело,также НетдаMLlib

Зависимости

MLlib использует пакет линейной алгебры Breeze, который использует netlib-java для оптимизации численной обработки. Если собственная библиотека 1 недоступна во время выполнения, вы увидите предупреждающее сообщение и будет использоваться чистая реализация JVM.

Из-за проблем с лицензированием собственных двоичных файлов среды выполнения мы не включаем собственный агент netlib-java по умолчанию. Чтобы настроить netlib-java/Breeze для использования оптимизированных под систему двоичных файлов, включите com.github.fommil.netlib:all:1.1.2 (или создайте Spark с -Pnetlib-lgpl) в качестве зависимости вашего проекта и прочтите файл netlib-java. Документация содержит дополнительные инструкции по установке для вашей платформы.

Самые популярные собственные BLAS, такие как Intel MKL, OpenBLAS, могут использовать несколько потоков в одной операции, что может конфликтовать с моделью выполнения Spark.

Настройка этих реализаций BLAS для использования одного потока для операций может фактически повысить производительность (см. SPARK-21305). Обычно лучше всего сопоставить это количество ядер, используемых каждой конфигурацией задачи Spark, которое по умолчанию равно 1 и обычно оставляется равным 1.

Чтобы узнать, как настроить количество потоков, используемых этими реализациями BLAS, обратитесь к следующим ресурсам: Intel MKL и OpenBLAS.

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

Основные моменты версии 2.3

В следующем списке представлены некоторые новые функции и улучшения, добавленные в MLlib в версии Spark 2.3:

  • Добавлена ​​встроенная поддержка чтения изображений в DataFrame (SPARK-21866).
  • Был добавлен OneHotEncoderEstimator, который следует использовать вместо существующего преобразователя OneHotEncoder. Новый оценщик поддерживает преобразование нескольких столбцов.
  • QuantileDiscretizer и Bucketizer (SPARK-22397 и SPARK-20542) также добавляют поддержку нескольких столбцов.
  • Добавлен новый преобразователь FeatureHasher (SPARK-13969).
  • Добавлена ​​поддержка параллельной оценки нескольких моделей при выполнении перекрестной проверки с использованием TrainValidationSplit или CrossValidator (SPARK-19357).
  • Улучшена поддержка пользовательских компонентов конвейера в Python (см. SPARK-21633 и SPARK-21542).
  • Функция DataFrame для описательной сводной статистики векторных столбцов (SPARK-19634).
  • Устойчивая линейная регрессия с потерями Хубера (SPARK-3181).
перерыв изменения

Иерархии классов и функций сводок модели логистической регрессии были изменены, чтобы сделать их более понятными и лучше приспособленными для добавления сводок по нескольким классам. Это критическое изменение пользовательского кода, который приводит LogisticReprofitTrainingSummary к BinaryLogisticReprofitTrainingSummary. Пользователи должны использовать метод model.binarySummary. Дополнительные сведения см. в SPARK-17139 (обратите внимание, что это экспериментальный API). Это не влияет на метод дайджеста Python, который по-прежнему отлично работает для случаев с несколькими элементами и двоичными данными.

Отказ и изменения в поведении
Устарело
  • OneHotEncoder заменен на Устарело,Будет доступен в версии 3.0. Он был заменен новым OneHotEncoderEstimator (см. SPARK-13030). пожалуйста, обрати внимание,OneHotEncoderEstimator будет переименован в OneHotEncoder в версии 3.0 (но OneHotEncoderEstimator останется псевдонимом).
изменения в поведении
  • SPARK-21027: Степень параллелизма по умолчанию, используемая в OneVsRest, теперь установлена ​​на 1 (т. е. последовательный). В версии 2.2 и более ранних версиях уровень параллелизма установлен на размер пула потоков по умолчанию в Scala.
  • SPARK-22156: Когда для numIterations установлено значение больше 1.,Word2Vecиз Обновление скорости обучения Нетправильный。этот Воляпривести к2.3имежду более ранними версиямиизрезультаты обучения Неттакой же。
  • SPARK-21681: исправлена ​​ошибка в полиномиальной логистической регрессии, приводившая к неверным коэффициентам, когда некоторые функции имели нулевую дисперсию.
  • SPARK-16957: Древовидные алгоритмы теперь используют средние точки для разделения значений. Это может изменить результаты обучения модели.
  • SPARK-14657: исправлена ​​проблема, из-за которой функции, созданные с помощью RFormula без перехвата, не соответствовали выходным данным в R. Это может изменить результаты обучения модели в этом сценарии.

2 Структура данных MLlib

2.1 Локальный вектор (Локальный вектор)

Имеет целочисленный тип, индексацию на основе 0 и значения двойного типа.

локальный векторизбазовый классдаVector,Мы предоставляем две реализации:DenseVector и SparseVector

◆ Локальные векторы хранятся на локальных узлах, и их базовым типом данных является вектор. Он имеет два подмножества: плотное и разреженное.

  • Плотный вектор поддерживается двойным массивом его входных значений.
  • А разреженные векторы поддерживаются двумя параллельными массивами: индекс и значение.

Обычно мы используем фабричный класс Vectors для генерации Например:

◆ Vectors.dense(1.0,2.0,3.0) в основном использует плотные

◆ Vectors.sparse(3,(0,1),(1,2),(2,3)) Просто поймите разреженность

Вектор (1.00.03.0) может быть представлен в плотном формате как 1.00.03.0 или в разреженном формате как (3, 02, 1.03.0), где 3 — размер вектора.

2.2 Маркированные данные (маркированная точка)

локальный вектор, связанный с меткой/ответом, плотный или разреженный В MLlib используется для алгоритмов контролируемого обучения. Мы используем двойное хранилище меток, чтобы мы могли использовать помеченные точки в регрессии и классификации. Для двоичной классификации метка должна быть 0 (отрицательная) или 1 (положительная). Для многоклассовой классификации метки должны представлять собой индексы классов, отсчитываемые от нуля: 0, 1, 2,…

Отмеченные точки представлены классами случаев. LabeledPoint выражать

◆ Ранее мы ввели «обучение с учителем». Мы знаем, что обучение с учителем осуществляется в форме данных (x, y), где y — метка, а X — вектор признаков. То же самое относится и к данным метки. Давайте посмотрим на этот код.

Язык кода:javascript
копировать
LabeledPoint(1.0,Vectors.dense(1.0,2.0,3.0))

2.3 Локальная матрица

локальная Матрица имеет индекс строки и столбца, а также значения двойного типа целочисленного типа, хранящиеся на одной машине. MLlib поддерживает плотные матрицы, значения элементов которых хранятся в одном двойном массиве в порядке по столбцам, а также разреженные матрицы с ненулевыми значениями элементов, хранящиеся в порядке по столбцам в формате Compressed Sparse Column (CSC).

Подобно векторам, локальным типом матрицы является Матрица, которая делится на два типа: плотную и разреженную. Также используйте Используйте фабричный метод Matrices для его создания. Но имейте в виду, что матрицы MLlib хранятся по столбцам. Например, следующая команда создает единичную матрицу 3x3:

Язык кода:javascript
копировать
Matrices.dense(3,3,Array(1,0,0,0,1,0,0,0,1))

Аналогично, как создать разреженную матрицу

Язык кода:javascript
копировать
Matrices.sparse(3,3,Array(0,1,2,3),Array(0,1,2),Array(1,1,1))

2.4 Распределенная матрица

◆ Распространение и хранение моментальных данных в нескольких RDD. Для преобразования данных распределенной матрицы требуется глобальная функция перемешивания. Самая базовая распределенная матрица — RowMatrix.

распределенная матрица со строками длинного типа, индексами столбцов и значениями двойного типа,распределенныйхранится в одном или несколькихRDDсередина。выбиратьправильныйизформат для хранения большихираспределенныйматрицадаочень важноиз。Воляраспределенныйматрица Конвертироватьдля Неттакой жеиз Возможно, формат должен быть глобальным.shuffle,Это довольно дорого. На данный момент реализовано четыре типа распределенных матриц.

Базовый тип называется RowMatrix. A RowMatrix — это построчно распределенная матрица без значимых индексов строк, например коллекция собственных векторов. Он поддерживается СДР своих строк, где каждая строка является локальным вектором. Мы предполагаем, что количество столбцов RowMatrix не очень велико, поэтому драйверу разумно передать один локальный вектор или использовать для хранения/работы один узел. IndexedRowMatrix похож на RowMatrix, но имеет индексы строк, которые можно использовать для идентификации строк и выполнения соединений. CoordinateMatrixдаккоординатный список (COO) Распределенная матрица, хранящаяся в формате, поддерживаемом RDD ее записей. BlockMatrix — это распределенная матрица, поддерживаемая RDD MatrixBlock, который представляет собой кортеж (Int, Int, Matrix).

2.5 Распределенные наборы данных

◆ DataFrame набора данных RDD — это форматы распределенных наборов данных Spark. Все три могут в определенной степени трансформироваться друг в друга и иметь собственную сферу применения. Среди них RDD — самая базовая и простая форма набора данных.

2.5.1 RDD

◆ RDD (Resilient Distributed Datasets), эластичный распределенный набор данных, представляет собой простейшую структуру и наиболее часто используемую форму набора данных в Spark. Его можно понимать как абстракцию данных памяти, сформированную путем простой инкапсуляции входных данных.

2.5.2 Dataset

◆ В отличие от хранилища ветвей RDD, в котором нет концепции столбцов, Dataset вводит концепцию столбцов, аналогичную структуре файла CSV. Похоже на простую 2D-таблицу.

2.5.3 DataFrame

Структура DataFrame аналогична Dataset, и обе они представляют концепцию столбцов. В отличие от Dataset, каждая строка в DataFrame снова инкапсулируется с помощью объекта Row. Конкретное значение необходимо получить с помощью метода объекта.

3 MLlib и мл

3.1 Алгоритмы машинного обучения, предоставляемые Spark

◆ Общий алгоритм Классификация, регрессия, кластеризация и т. д.

◆ Разработка функций Уменьшение размерности, преобразование, выбор, извлечение признаков и т. д.

◆Математические инструменты Статистика вероятностей, матричные операции и т. д.

◆ трубопровод и т. д.

3.2 Разница между MLlib и ml

MLlib использует структуру данных в форме RDD, а ml — структуру DataFrame.

◆ Представители Spark надеются постепенно заменить MLlib на ml. ◆ Учитывайте и то, и другое в руководстве.

Если не указано иное, MLlib относится к компоненту машинного обучения Spark.

4 сценария применения MLlib

4.1 Анализ и извлечение больших объемов данных

◆ Например, провести анализ данных по массовой аренде и продаже домов, а также спрогнозировать цены на жилье и арендную плату. ◆ Типичный набор данных: набор данных о ценах на жилье в Бостоне. ◆ В основном используйте традиционные алгоритмы интеллектуального анализа данных, такие как алгоритмы регрессии.

4.2 Система машинного обучения больших данных

◆ Например, системы обработки естественного языка, системы рекомендаций и т. д. ◆ Система рекомендаций требует сбора данных в режиме реального времени, статистики, планирования задач и регулярного обновления модели обучения. ◆ Основная реализация: Spark Streaming +MLlib.

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose