Особенность играет очень важную роль в машинном обучении. Вдумчиво созданные вручную функции могут сыграть очень важную роль в вашем классическом случае машинного обучения. В настоящее время вы можете использовать рекуррентные нейронные сети или их варианты, такие как закрытые рекуррентные единицы (GRU) или долговременная кратковременная память (LSTM). которые имеют тенденцию определять функции сами по себе и, как правило, очень эффективны, чем классические модели машинного обучения, но эта статья не об этом. Эта статья о том, как мы можем вручную создать некоторые функции и использовать классические алгоритмы для получения хороших результатов. Итак, если вы хотите знать, как вы можете вручную создать некоторые функции и быть инновационными в этом, эта статья для вас. :)

Здесь вы можете найти оригинальный конкурс Quora на Kaggle. Каждая точка данных состоит просто из 3 столбцов. 1 — вопрос № 1, 2 — вопрос № 2 и последний, если они похожи или нет. Что мы можем сделать, так это выделить вопросы, а затем применить к ним наш алгоритм классификации.

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

Теперь мы перейдем к расширению функций. Вот некоторые функции, которые мы можем использовать:

  1. Общие слова в обоих вопросах/минимум непрерывных слов из обоих вопросов.
  2. Общие слова в обоих вопросах/максимум непрерывных слов из обоих вопросов.
  3. Общие стоп-слова в обоих вопросах/минимум стоп-слов в обоих вопросах.
  4. Общие стоп-слова в обоих вопросах/максимум стоп-слов в обоих вопросах.
  5. Общие токены в обоих вопросах/максимум токенов из обоих вопросов.
  6. Общие токены в обоих вопросах/максимум токенов из обоих вопросов.
  7. Если последнее слово обоих вопросов одинаково или нет.
  8. если первое слово обеих функций одинаково или нет.
  9. Среднее количество токенов.
  10. Сколько раз Q1-Q2 появлялся в соответствующем списке вопросов
  11. длина Q1 и Q2.
  12. Всего слов в Q1 и Q2.
  13. Общее количество слов.
  14. Общее количество слов, т.е. set(q1).union(set(q2)).
  15. Общие слова / всего слов.
  16. Сумма и разница обоих вопросов в соответствующем списке.

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

17.token_sort_ratio

18.Qотношение

19.fuzz_partial_ratio

20.longest_substr_ratio

Еще одна функция, которую мы собираемся использовать, — это жаккардовое расстояние. Это пересечение, деленное объединением нет. слов в каждом вопросе, то есть (q1 пересечение q2)/(q1 объединение q2).

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

Некоторые дополнительные функции, которые мы собираемся использовать, можно получить из встроенной предварительно обученной модели word-2-vec библиотеки Spacy. Используя предварительно обученную модель, мы используем встраивание моделей для создания вектора из наши вопросы. что модель уже сделала, так это сопоставила похожие слова по смыслу вместе, поскольку она была обучена на большом корпусе. И поскольку слов много, наше отображение также находится в пространстве более высокого измерения. смысл двух вопросов в том, что большее сходство вы можете найти в их векторах. обычно более полезное отображение вопроса в вектор более высокого размера, но мы обычно используем 300 во многих вложениях.

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

Здесь, как мы видим, модель бустинга кошек достигла минимальной потери журнала на тестовом наборе (0,3270). Логарифмическая потеря — это метрика, которая варьируется от 0 до 1, 1 — самая высокая, т. е. самая высокая потеря, которую может получить любая модель, а 0 — наилучшая, то есть отсутствие потерь, лучшая модель. Мы можем еще больше уменьшить логарифмическую потерю нашей модели. модель, создавая другие функции, а также опробовав другие модели и настроив их с помощью гиперпараметров.

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

Здесь — это ссылка на мое ядро ​​kaggle, разветвите его и измените, чтобы узнать что-то новое и улучшить производительность модели.

Ссылки:

https://www.appliedaicourse.com/course/11/applied-machine-learning-online-course

Спасибо за чтение. Продолжайте учиться :)