Добро пожаловать во вторую часть серии Всеобъемлющее руководство по машинному обучению. В первой части этой серии мы рассмотрели приведенные ниже концепции машинного обучения.

  • Получение данных
  • Очистка данных
  • Исследовательский анализ данных

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

  • Разработка функций
  • Выбор функции
  • Разделение обучения/валидации/тестирования

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

4) Разработка функций

Давайте сначала разберемся, что именно означает «функция». Согласно Википедии —

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

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

  • Все функции должны быть независимы друг от друга. То есть корреляция между ними должна быть минимальной или отсутствовать вовсе. (Мы уже обсуждали корреляционный анализ в первой части этой серии)
  • Функция должна быть интуитивно понятной и полезной для модели. Обычно считается, что лучше всего отказаться от неинтуитивных или бесполезных функций.

Теперь давайте перейдем к определению «Разработка функций».

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

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

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

  • Функции даты и времени

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

  1. Год
  2. Месяц
  3. Четверть
  4. Неделю
  5. День года
  6. День месяца
  7. День недели
  8. Если дата выпадает на выходные или нет
  9. Час
  10. Минута
  11. Второй
  12. Прошло минут

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

  • Категорические признаки

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

  1. Горячее кодирование

Это можно сделать с помощью функции «get_dummies» библиотеки Pandas, как показано ниже.

2. Кодировка ярлыка

Это можно сделать с помощью функции «factorize» библиотеки Pandas, как показано ниже.

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



  • Непрерывные функции

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

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

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



5) Выбор функции

Давайте сначала поймем, почему так важно выполнять выбор функций.

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

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

Ниже приведены преимущества использования функции выбора.

  • Это позволяет алгоритму машинного обучения обучаться быстрее.
  • Это снижает сложность модели и облегчает ее интерпретацию.
  • Это повышает точность модели, если выбрано правильное подмножество.
  • Это уменьшает переоснащение.

В этом посте я собираюсь обсудить только использование PCA в качестве метода выбора признаков.

PCA (анализ основных компонентов) — это метод уменьшения размерности, который проецирует данные в пространство более низкого измерения.

Давайте сначала посмотрим на количество функций, которые у меня были после того, как я закончил разработку функций.

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

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

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





6) Разделение обучения/валидации/тестирования

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

Допустим, у нас есть набор данных, содержащий 10 000 записей, которые мы должны использовать для построения модели машинного обучения. У меня есть следующие 3 возможных сценария при обучении модели.

  • Обучите модель всему набору данных из 10 000 записей. Но тогда у меня нет никаких дополнительных данных, чтобы проверить, работает ли модель так, как ожидалось.
  • Я могу выделить 2000 записей (набор тестовых данных) и обучить модель на остальных 8000 записей (набор обучающих данных). Таким образом, я могу проверить модель на оставшихся 2000 записей после завершения обучения. Однако единственная проблема с этим подходом заключается в том, что по мере того, как мы настраиваем гиперпараметры и переобучаем/повторно проверяем модель, она становится смещенной в сторону набора тестовых данных, поскольку модель теперь видела оба набора данных.
  • Я могу выделить 1000 записей (набор тестовых данных), которые я покажу модели только после того, как буду уверен, что она работает должным образом. Далее я выделю еще 1000 записей (набор данных проверки), которые буду использовать для проверки модели по различным гиперпараметрам. Я буду использовать остальные 8000 записей (обучающий набор данных) для обучения модели. Таким образом, я могу решить проблему смещения во втором подходе.

Теперь, когда у нас есть теоретическое представление о разделении наборов данных для обучения/проверки/тестирования, давайте кратко обсудим «недостаточное соответствие» и «переоснащение».

Недообучение — когда модель плохо работает как с наборами данных для обучения, так и для проверочных данных. Например, мы можем сказать, что модель недостаточно подходит, если она дает точность 70% для данных обучения и точность 55% для данных проверки. В таких сценариях рекомендуется сделать модель более сложной или увеличить количество функций для обучения модели.

Переобучение – когда модель отлично работает на обучающих данных, но плохо работает на проверочных данных. Например, мы можем сказать, что модель является избыточной, если она дает точность 99% для данных обучения и только точность 60% для данных проверки. В таких сценариях рекомендуется упростить модель или уменьшить количество функций для обучения модели.

Теперь давайте посмотрим на код для разделения набора данных обучения/проверки/тестирования. Библиотека Python «sklearn» предоставляет две функции для достижения этой цели.

  • sklearn.model_selection.train_test_split — я обычно предпочитаю это для задач регрессии.
  • sklearn.model_selection.StratifiedShuffleSplit — я обычно предпочитаю это для задач классификации.

На изображении ниже показан код Python для выполнения разделения набора данных.

Вы можете проверить приведенный ниже пост для дальнейшего понимания разделения набора данных для проверки модели.



Заключительные замечания

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

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



Посетите мой блог (ссылка ниже), чтобы узнать больше о машинном обучении и Linux-вычислениях.