Инструкция

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

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

Это пример приложения конкурса, размещенного на Kaggle. Вкратце: он публикует различные твиты в Твиттере. Это серьезные проблемы, шутки, критика, оскорбления, катастрофы и многое другое.

Набор данных, который предлагает Kaggle, включает множество твитов. В наборе данных, подготовленном для теста, есть 3243 уникальных данных, а в наборе данных поезда есть 7503 уникальных данных. В наборах данных для обучения и тестирования есть столбцы id, keyword, location, text (tweeted). Мы будем делать различные разработки, чтобы улучшить прогнозирование набора данных о поездах. Следовательно, есть целевая колонка, которая принесет нам пользу в качестве плюса. В наборе тестовых данных еще нет целевого столбца, мы создадим этот столбец и посмотрим, насколько хорошо мы сможем угадать.

В наборе данных поезда есть данные целевого столбца 1 и 0. Итак, у нас есть целевой столбец с категориальной переменной с дискретными значениями. Если Target = 1, твит в том же столбце является твитом катастрофы. Если Target = 0, твит в том же столбце не является твитом катастрофы.

То, что проблема является проблемой НЛП, и данные, которые нам нужно предсказать, составляют только 1 или 0, означает, что мы можем использовать алгоритм классификации в качестве решения. Более подробная информация находится в Шаге 8.

Конкурс здесь: Реальный или нет? НЛП с катастрофическими твитами

Шаг 1. Объединение наборов данных, чтобы сделать их доступными

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

Шаг 2: визуализация данных

Визуальное представление данных позволяет лучше понять обсуждаемую тему.

В Python доступно множество модулей и методов для визуализации данных. Я выбрал простой способ - облако слов. Значимые слова можно выделить с помощью облака слов. В этом методе размер слова больше или меньше в зависимости от частоты его использования.

Шаг 3. Очистите текстовое поле

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

Наиболее важными из них являются стоп-слова. Стоп-слова - это набор часто используемых слов в языке, которые удалены из запросов поисковых систем из-за их неэффективности. В Python есть модуль NLTK, который перечисляет стоп-слова.

Слишком много значимых или бессмысленных символов, отличных от букв и цифр, что является ожидаемой ситуацией на платформе Twitter, где люди мгновенно пишут свои идеи. Наряду с этими символами также доступны адреса электронной почты, общие ссылки и т. Д. Избавление от этих структур повысит нашу эффективность и производительность, верно? так что нам делать? Мы пишем эквивалент регулярного выражения и используем его в функции замены для поиска и удаления этих ненужных или бессмысленных структур.

Шаг 4. Удаление бесполезных столбцов

Столбцы местоположения и идентификатора в наборах данных не помогают в наших прогнозах. Поэтому удалил столбцы location и id.

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

Получаем результат (221,). Другими словами, в столбце с ключевыми словами 221 уникальных данных.

Распечатайте теги / категории в столбце ключевых слов;

Давайте посмотрим, что мы можем сделать:

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

Шаг 5. Анализ Word и периодичность документа

Существуют статистические методы измерения текстовых групп, называемых документами, в задачах интеллектуального анализа данных и NLP. Название этого метода для расчета весового коэффициента - TF-IDF (Term Frequency - Inverse Document Frequency).

TF (Term Frequency): измеряет, как часто термин встречается в документе. Этот расчет на самом деле является процессом нормализации. Потому что каждый документ отличается по длине, и термин может чаще встречаться в длинном документе, а термин может встречаться чаще в длинном документе. Если мы посмотрим на все термины во всех документах, нормализация станет важной для расчета частоты использования терминов. По этой причине количество раз, когда термин встречается в документе, деленное на общее количество терминов в документе.

TF = (Количество раз, когда термин встречается в документе) / (Общее количество терминов в документе)

IDF (обратная частота документа): Короче говоря, измеряет важность термина. Слова почти во всех документах, и большинство из них служат в качестве союзов, не имеют значения в соответствии с этим расчетом. Редко используемые или уникальные слова важны и имеют высокую ценность IDF.

IDF = log_e (Общее количество документов / Количество документов с термином в нем)

Придумайте пример слова и назовите его «кошка». Чем выше количество документов, содержащих термин «кот», тем ниже значение TF-IDF. Кроме того, чем больше термина «кошка» встречается в отдельном документе, тем выше значение TF-IDF.

В Python для операций TF-IDF используется Vectorizer;

Шаг 6. Контроль несбалансированного набора данных

Необходимо разработать прогнозные модели для наборов данных с несбалансированными классами. Несбалансированные наборы данных отрицательно влияют на результаты прогнозных моделей, основанных на классификации. Хотя модель хорошо предсказывает более крупный класс, она делает плохой прогноз для класса данных, составляющего меньшинство, игнорируя класс меньшинства.

Если мы посмотрим на нашу модель, в ней нет крайне несбалансированного класса. Но все же существует дисбаланс, влияющий на модель прогнозирования;

Наиболее распространенный способ решения этой проблемы - метод под названием повторная выборка. Это быстрый и простой метод. Техника повторной выборки делится на две части; приведение набора данных к более сбалансированному уровню путем добавления образцов в класс меньшинства или удаления образцов из класса большинства.

  • Передискретизация: этот метод добавляет копию выборки к классу, рассматриваемому как меньшинство, что приводит к сбалансированному набору данных.
  • Недостаточная выборка: этот метод обеспечивает сбалансированный набор данных за счет удаления большинства выборок с использованием различных методов.

Мы можем получить более сбалансированный набор данных за счет избыточной выборки модели классификации. Пакет Python под названием imbalanced-learn (imblearn) можно использовать для избыточной выборки. Использовал метод SMOTE в пакете imblearn.

SMOTE (метод синтетической передискретизации меньшинства): копирует близлежащие образцы по соседству с образцами, которые уже существуют в классе меньшинства. SMOTE находит K-ближайших соседей каждой выборки в классе меньшинства. Затем новые точки данных добавляются на линии, соединяющие исходный образец и обнаруженные соседние образцы.

Шаг 7. Разделение данных

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

В самом начале всех этих операций мы объединили наборы обучающих и тестовых данных и создали фрейм данных all_data. Пришло время снова взять поезд и протестировать наборы данных.

Шаг 8: Выбор модели

Если необходимо начать с очень простого вопроса, какова цель модели обучения? Мы пытаемся найти лучший образец для имеющихся данных с помощью различных алгоритмов математического обучения. С нашим набором поездов он помогает нам найти шаблон, который нам нужен. Когда мы находим наиболее близкий образец, модель обучения, мы получаем успешный результат в нашем тестовом наборе.

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

При выборе модели иногда полезно поэкспериментировать с несколькими моделями. Таким образом, можно увидеть, какая модель дает лучшие результаты. Я попробовал производительность моей модели с помощью Naive Bayes, Random Forest и SVM. В результате я получил наилучшие данные прогноза с помощью SVM (Support Vector Machine). Я предлагаю вам сделать и эти испытания. Помимо достижения наилучшего результата, мы также набираемся опыта. Сфера машинного обучения становится более понятной с опытом, как и во многих других областях. По мере того, как вы экспериментируете, у вас может возникнуть больше различных практических идей.

SVM (машина опорных векторов): представляет набор данных, которые нельзя разделить линейно. Кривая может разделять две категории, но не линией. Он представляет собой линейно неразделимый набор данных, как и большинство реальных наборов данных. Мы можем экспортировать эти данные в пространство более высоких измерений, например, сопоставить их с трехмерным пространством. После преобразования мост может определить границу между двумя категориями. Поскольку сейчас мы находимся в трехмерном пространстве, мы представляем его как разделяющую плоскость.

Эта плоскость может использоваться для классификации новых или неизвестных целевых данных. Следовательно, алгоритм SVM генерирует оптимальную гиперплоскость, которая классифицирует новые образцы.

Это видео будет полезно для лучшего визуального понимания:

Шаг 9: Расчет точности модели

После обучения нашей модели мы сделали целевые прогнозы в тестовой выборке. Итак, какой процент прогнозов верен? После расчета точности, если мы получаем нежелательно низкий результат, он возвращается к обработке данных и проверяется. Мы пытаемся оптимизировать данные для модели прогнозирования, или мы меняем модель. В Python оценка точности рассчитывается из библиотеки sklearn с метрикой precision_score. Оценка точности принимает значение от 1 до 0. Оценка точности достигает наилучшего значения при 1 и худшего значения 0. Мы выразим оценку точности в процентах.

Его можно использовать в матрице неточностей как один из способов получения точности классификаторов. Эта матрица показывает исправленные и неправильные оценки по сравнению с реальными тегами. В каждой строке матрицы неточностей показаны правильные метки в тестовом наборе, а в столбцах показаны оценочные метки по классификатору. Этот метод называется F1-Score. Мы можем визуально более четко увидеть, сколько экземпляров какого класса было предсказано правильно, а сколько - неверно.

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

Результат прогноза составил 99,15%. Это хороший результат.

Интерпретация таблицы: Согласно таблице оценок F1, 10 выборок с целевым значением 1 оцениваются как 0, 991 как 1. Другими словами, после 10 твитов были сделаны неправильные предположения. 7 образцов с целевым значением 0 были оценены как 1, а 992 - как 0. Другими словами, после 7 твитов были сделаны неправильные предположения.

Заключение

Вот краткие заметки, которые мы сделаем на основании того, что мы достигли успеха:

  • Когда вы сталкиваетесь с проблемой, которую необходимо решить, сначала просмотрите данные и попытайтесь понять общую схему проблемы. Так вы поймете, с какими моделями можно работать.
  • Не бойтесь визуализировать имеющиеся у вас данные, это позволит вам лучше понять эти данные.
  • Если вы работаете с текстами (например, над этим примером мы работаем). Подумайте о словах, которые помогут вам на этапе угадывания, и постарайтесь выделить те слова или группы слов, которые влияют на результаты, которые вы получите. Мы можем для краткости называть это очисткой текста.
  • Если возможна классификация данных, проверьте, является ли набор данных сбалансированным или несбалансированным. Это может стать проблемой, которая сильно повлияет на результат.
  • Не бойтесь экспериментировать при подготовке данных для модели или выборе модели. Если добавленный вами шаг плохо влияет на результаты, удалите его и рассмотрите другой вариант. Машинное обучение - это область, в которой вы можете двигаться вперед, если проявите терпение.

Спасибо за чтение !!