Для начинающих ML

Разворачиваем наивный байесовский метод с нуля! Дубль-3 🎬

Вы почти готовы скрыть все аспекты алгоритма классификации наивного байесовского текста.

Если вы пропустили предыдущие сообщения в блоге, вы можете сослаться на них по следующим ссылкам

Разворачиваем наивный байесовский метод с нуля, дубль-1 🎬! Перед тем, как приступить к программированию, нужно простое объяснение наивного Байеса, чтобы получить четкое представление о том, как работает этот алгоритм

Наивный байесовский метод с нуля! Take-2 🎬 : реализация наивного байесовского метода с нуля в базовом питоне только для того, чтобы укрепить базовое понимание, прежде чем переходить к набору инструментов машинного обучения Python

Кто такая целевая аудитория? 🗣 🗣 🗣

Как я уже упоминал в своих предыдущих сообщениях в блоге, этот тоже предназначен для новичков в машинном обучении и сосредоточен на фундаментальных концепциях.

Результат этого учебного пособия - практическая реализация Scikit-learn NB

Полное пошаговое руководство по реализации NB в NB с использованием платформы машинного обучения Python - Scikit-learn

Определение дорожной карты… .. 🚵

Этап №1: Предварительная обработка набора данных для обучения

Этап №2: Обучающая модель NB на предварительно обработанном наборе обучающих данных

Этап № 3: Тестирование с использованием модели обученного ноутбука

Этап №4: Обучение и тестирование с использованием функциональности Scikit-learn Pipeline

Давайте начнем с реализации Scikit-learn!

Предварительная обработка набора данных обучения

Несколько импортных…

Функция предварительной обработки та же, что была определена в Разворачивании Наивного Байеса с нуля! Дубль-2 🎬

Загрузка набора данных 20newsgroup

Это тот же набор данных, который использовался ранее в Unfolding Naïve Bayes from Scratch! Дубль-2 🎬

Вот как выглядит набор обучающих данных в необработанном виде ...

Начнем с предварительной обработки набора данных для обучения, который включает

  1. Очистка текста
  2. Создание BoW-представления нашего обучающего набора данных (потребуется то же самое и для тестового набора данных)

Очистка текста

Вот как выглядит обработанный набор обучающих данных

Создание BoW-представления нашего обучающего набора данных

Несколько строк о CountVectorizer

Что делает Countvectorizer?
Принимает корпус текста, строит его матрицу документа терминов (то есть BoW) и возвращает его

Каждому слову присваивается фиксированный уникальный целочисленный идентификатор, а значение каждой ячейки этой матрицы представляет собой количество слов - BoW

Так, например, X_train_counts [i, j] (i относится к документу, и в нашем случае каждый документ указывает обучающий пример, а j относится к индексу слова w в соответствующем документе i) вернет счетчик слова j

Вот как выглядит матрица X_train_counts:
X_train_counts [0,12048] будет извлекать количество слов в слове с целым идентификатором = 12048 и идентификатором документа / примера 0.

Веха №1 достигнута 👍

Обучающая модель NB на предварительно обработанном наборе обучающих данных

Просто после создания экземпляра объекта NB мы вызываем функцию соответствия для обучения модели NB. Мы просто передадим обучающие примеры в качестве первого аргумента, а метки обучающего набора - в качестве второго.

Обратите внимание, что X_train_counts (матрица документа терминов) передается в качестве обучающих примеров, а не текстовых данных

И мы закончили обучение всего за 3 строчки кода!

Веха № 2 достигнута 👍 👍

Тестирование с использованием обученной модели NB

Перед тем, как мы начнем тестирование, нам сначала нужно будет предварительно обработать его так же, как мы это сделали для обучающего набора данных.

Очистка текста тестового набора

Создание BoW-представления тестового набора данных
Тот же объект count_vect, который был создан для обучающего набора данных, будет использоваться для тестового набора данных. Но помните, что мы не вызываем fit_transform в наборе тестов, поскольку мы хотим только преобразовать тестовые данные в матрицу документа-термина, тогда как fit_transform сначала изучает словарь словаря, а затем возвращает матрицу документа-термина.
Мы должны выучить словарь только на обучающем наборе данных.

fit_transform : learns the vocabulary dictionary and returns term-document matrix
transform : transforms documents to document-term matrix

Теперь мы можем протестировать преобразованную версию тестового набора данных

Мы просто вызовем функцию прогнозирования для объекта clf, который был адаптирован / обучен для модели NB.

Этап №3 достигнут 👍 👍 👍

Обучение и тестирование с использованием функций конвейера Scikit-learn

Трубопровод творит чудеса! Приведенный выше код может быть сокращен буквально до 3 строк кода, используя конвейерную функциональность sklearn.

Мы просто создаем объект конвейера, указывая действия конвейера, и как только этот объект конвейера используется для обучения, он автоматически выполняет шаги конвейера в указанном порядке.

В нашем случае, поскольку нам сначала нужно создать CountVectorizer для целей BoW, а затем подогнать / обучить модель NB, поэтому точно таким же образом мы укажем эти действия в нашем конвейере.

Обратите внимание, что теперь при вызове метода fir мы будем передавать исходные текстовые данные, поскольку теперь count_vect в конвейере сам преобразует их в числовую форму. Поэтому здесь важно передать текстовые данные, иначе появятся неприятные ошибки. То же самое и с тестовыми данными. Нет необходимости рассчитывать векторизацию отдельно, но нам нужно предварительно обработать тестовые данные с точки зрения очистки

И последняя часть - Тестирование

Все обучение и тестирование выполняются всего в 3 строчках кода!

И вы это сделали!

Этап №4 достигнут 👍 👍 👍 👍

Вы можете найти весь исходный код в Блокноте Jupyter здесь

Если у вас есть какие-либо мысли, комментарии или вопросы, не стесняйтесь оставлять комментарии ниже или связываться 📞 со мной в LinkedIn