Разработка функций для машинного обучения на простом языке

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

Объяснение

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

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

Итак, какие у нас есть данные о том, следует ли нам есть пиццу на ужин?

  1. Содержимое холодильника / кладовой

2. Питание, которое вы ели за последние 2 недели.

3. Погода

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

Возможно, мы разработаем функции, которые сообщают нам, есть ли у нас ингредиенты, необходимые для пиццы (не стесняйтесь менять начинки здесь!):

  • Есть ли корочки для пиццы (да / нет)?
  • Есть ли у меня соус для пиццы (да / нет)?
  • Есть ли у меня сыр (да / нет)?
  • Есть ли у меня ветчина (да / нет)?
  • Есть ли ананас (да / нет)?

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

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

  • Подсчет пиццы за последние 2 недели

Это числовая характеристика. Он дискретный, потому что это будет некоторое целое число (вы ели пиццу 0, 1, 2, 3… раз).

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

  • Вы вчера ели пиццу (да / нет)?
  • Были ли у вас вчера макароны (да / нет)?

Более категоричные, логические функции! Сегодня мы не будем вдаваться в особенности временных рядов, но эти данные представляют собой временные ряды (исторические данные за последние 2 недели), поэтому вы можете включить этот компонент временных рядов в свои функции!

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

  • Температура на улице сегодня

Это числовая характеристика. В отличие от дискретной функции, приведенной выше, она является непрерывной, потому что вы можете иметь температуру с десятичными знаками (например, 75,2).

Не стесняйтесь придумывать еще больше возможностей! (И, может быть, возьмете пиццу. Кто-нибудь еще проголодался после этого?)

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

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

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

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