Машинное обучение помогло Google отделить спам-сообщения от обычных. Кто-то может подумать, что построить его быстро — сложная задача. В этой статье я попытаюсь показать вам, что это очень простой процесс. Как я всегда делал в прошлом, я буду объяснять это с помощью рабочего процесса машинного обучения, который можно увидеть на изображении ниже.

Прежде чем начать, давайте импортируем соответствующие библиотеки

СБОР ДАННЫХ

Набор данных, используемый в этом проекте, был получен с kaggle.com. Все ресурсы, используемые в этом проекте, будут в разделе ресурсов внизу. Набор данных содержит тексты и соответствующий им класс, который является либо «спамом», либо «ветчиной». Загрузка набора данных выполняется с помощью библиотеки pandas.

NB: Как мы уже видим, данные нуждаются в очистке, и это ведет нас к следующему этапу.

ОЧИСТКА И ПРЕДВАРИТЕЛЬНАЯ ОБРАБОТКА ДАННЫХ

Глядя и набор данных. У нас есть 3 столбца, которые не имеют отношения к делу, а имена столбцов недостаточно информативны. Таким образом, используя pandas, оба были решены, как вы можете видеть ниже.

Прежде чем двигаться дальше, давайте проверим дисбаланс вызовов.

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

ВЫДЕЛЕНИЕ ПРИЗНАКОВ И ВЫБОР ПРИЗНАКОВ

Алгоритмы машинного обучения работают только с числами, а наш набор данных содержит текст. поскольку наш столбец «Класс» содержит только «спам» и «ветчина», простое сопоставление должно работать.

Затем мы решили разделить набор данных на зависимую и независимую переменную. Затем разбивка на обучающие и тестовые наборы. Как следует из названий, набор поездов будет использоваться для обучения нашей модели, а набор тестов будет использоваться для проверки производительности нашей модели.

NB: на данный момент столбец «Текст» по-прежнему содержит текст, а не числа.

Теперь мы преобразуем столбец «текст» в числа, используя класс Count Vectorizer в sklearn. Если вы не знаете, как работает класс векторизатора подсчета, ниже я дам ссылку и статью, в которой это будет хорошо объяснено.

Теперь к самой легкой части всего этого.

КЛАССИФИКАЦИОННАЯ МОДЕЛЬ

NB: А вот и важная часть. В наивном байесовском модуле в sklearn есть три часто используемых классификатора: MultinomialNB, GaussianNB и BernoulliNB.

BernoulliNB лучше всего подходит для двоичных данных, MultinomialNB лучше всего подходит для категориальных данных, поэтому мы использовали его, а GaussianNB лучше всего подходит для непрерывных данных.

теперь к последнему этапу.

ПРОВЕРКА РАБОТЫ МОДЕЛИ

Теперь мы видим, что и тренировочный, и тестовый наборы имеют точность 99%. Но не обманывайтесь этим. Набор данных, с которым мы работаем, несбалансирован, даже если бы модель предсказывала все классы как «ветчины», точность была бы огромной. Чтобы получить лучшее представление о точности, нам нужно использовать матрицу путаницы. Здесь мы решили создать функцию, визуализирующую матрицу путаницы.

Использование функции для визуализации нашей матрицы путаницы

С помощью этой визуализации мы видим, что модель ошибочно классифицировала только 3 спам-сообщения как спам и 9 спам-сообщений как спам.

ДОПОЛНИТЕЛЬНЫЙ

Ради забавы мы решили отображать спам и сообщения ветчины с помощью облака слов.

Для спама:

Для ветчины:

РЕСУРСЫ:

Векторизатор подсчета: «https://towardsdatascience.com/basics-of-countvectorizer-e26677900f9c»

GitHub: oluwatomsin/Spam_Detection: содержит код для встроенной модели обнаружения спама (github.com)