Вы когда-нибудь задумывались, как провести быстрый анализ машинного обучения с текстовыми данными? Например, анализ настроений или прогнозирование того, могут ли произойти определенные вещи на основе исторических текстовых описаний.

Благодаря Mogady из Kaggle, он предоставил хороший (простой и чистый) набор данных, который может удовлетворить мой интерес, чтобы попробовать некоторую быструю аналитику машинного обучения Text. Я также использовал часть его кода :-P

Если ваши данные выглядят так, как показано выше, поздравляю! Вы можете сделать быстрое машинное обучение, чтобы предсказать состояние за 5 минут.

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

Я использую Pandas для обработки набора данных (наиболее распространенный способ, если с Python). Чтобы поиграть с фреймом данных, пожалуйста, никогда не используйте цикл for или while... на вашем компьютере закончится память :-(

Трюк 1

Используйте функцию применения лямбда, а НЕ цикл for.

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

лямбда-функция: она всегда выглядит очень похожей, df[‘column’].apply(lambda x: function(x)). df[‘column’] — это столбец в кадре данных, который вы хотите изменить. x - это просто переменная, может быть чем угодно.

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

1 . Подсчет слов с помощью CountVectorizer

чтобы использовать countVectorizer, нам нужно удалить некоторые стоп-слова (a, the,an и т. д.). В противном случае он засчитает там что угодно, что плохо скажется на результате.

2. Частота слов с TfidfVectorizer

Это аббревиатура от «Частота термина — Обратный документ». Частота, которая является компонентом итоговых оценок, присваиваемых каждому слову.

Частота термина. Обобщает, как часто данное слово появляется в документе.

Инверсия частоты документа: уменьшает масштаб слов, которые часто встречаются в документах.

3. Хеширование с помощью HashingVectorizer

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

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

Мы использовали второй метод (TfidfVectorizer) только для демонстрационных целей.

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

Уловка 2

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

напишите список entry = [] для хранения всех результатов прогнозирования для целей отображения.

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

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

Генеративная модель VS. Дискриминационная модель

Если вы не знаете этих двух, первое, что вы можете сделать, это погуглить, я сделал то же самое. Находил разные ответы. Я сделал некоторые выводы и перевел математические жаргоны на человеческий язык :-)

  1. Таким образом, оба подхода являются статистической классификацией.
  2. Генеративное моделирование заключается в обучении функции f (x, y) с оценкой, которая определяется y и x вместе. Тогда мы можем предсказать y с заданным x в функции f (x, y) с наибольшим числом очков, конечно. Это означает, что вы знаете, как на самом деле построена модель, и результат y можно легко объяснить с помощью функции и данного x. Нави Байес — хороший пример генеративной модели. Это не рисование линии, а точная маркировка каждого класса данных.
  3. Дискриминационная модель заключается в обучении функции f(x,y) на основе заданного x и поиске наиболее вероятного y. По сути, модель учится различать классы, рисуя одну линию. Даже если вы можете очень точно классифицировать данные, вы не имеете ни малейшего представления о том, как они могли быть сгенерированы. Сетевая сеть, логистическая регрессия и т. д. являются дискриминационным моделированием. Доказано, что при большом наборе данных дискриминационные модели более точны, чем генеративные модели.

Итак, мы протестировали логистическую регрессию и наивный байесовский анализ:

Точность: [('Логистическая регрессия', 0,6809270816416491), ('Полиномиальная', 0,6732710020184209)]

Хотя на картинке большой разницы нет, но для такого набора данных около 70% точности уже достаточно много, и небольшое улучшение точности очень сложно.

Код здесь!

Делюсь своим кодом Colab: https://colab.research.google.com/drive/1QXD2HtMhnRX1GZaqc-UBkDuBKODGzz5x

Пожалуйста, загрузите данные отсюда: https://drive.google.com/file/d/1dedHvEms8d00ZPYQ4Tx6z0fzLIJdRrvC/view?usp=sharing

Автор: Юди Сюй

CTO-консультант по новым цифровым технологиям

Руководитель проектов и эксперт в области Интернета вещей

Бывший специалист по данным в Shell

LinkedIn: https://www.linkedin.com/in/xuyudi/