Как правило, после того, как вы присоединитесь к своему первому конкурсу Kaggle, вы можете услышать термин «Разработка функций», который часто упоминается в обсуждениях, и вы можете не понять, что он означает. Согласно Википедии:

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

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

Что такое разработка признаков?

Все модели имеют 3 основных компонента:

  • Входные данные (то, чем вы кормите модель для обучения)
  • Сама модель
  • Выход (результат)

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

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

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

Как именно мне разрабатывать функции?

Один из способов, который мне нравится «разрабатывать» функции, — это играть с данными (исследовательский анализ данных — EDA) и выяснять, что оказывает наибольшее влияние на результаты. Для меня EDA действительно сияет, когда дается много количественных данных (числа, логические значения и т. д.) и меньше качественных данных (текст, изображения и т. д.).

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

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

В общем, есть 4 основных способа «спроектировать» фичи:

  • 1. Биннинг
  • 2. Трансформация
  • 3. Разделение
  • 4. Объединение

Подробнее о способах инжиниринга фич можно прочитать здесь.

Можно пример?

Конечно!

Давайте взглянем на некоторые разработки, которые я сделал для конкурса kaggle «PetFinder.my».

Здесь (выше) я добавляю 2 канала и вычитаю канал, чтобы получить «Канал общего фокуса». По сравнению с исходными каналами, этот канал оказывает существенное влияние на результат.

Вот (выше) еще один пример функции, которую я «спроектировал». Я объединил несколько различных факторов, которые способствовали общей аккуратности изображения. Сделав это, я смог придумать функцию под названием «красивая внешность», которая оказала значительное влияние на показатель популярности.

Результаты этой простой разработки функций были довольно ошеломляющими. От 23.35 CV они смогли снизить его до 19.81 (в данном случае чем ниже, тем лучше). Моя общедоступная оценка в фунтах оказалась 19.15. Эта оценка была одной из лучших для отправки только метаданных. Я обновлю это, добавив больше информации, как только конкурс закончится и станут доступны результаты в частной таблице лидеров!

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