Разработка функций в машинном обучении

Подготовка модели данных

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

Задача преобразования необработанных данных в набор данных называется Разработка функций.

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

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

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

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

Почему Feature Engineering?

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

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

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

  • Кодирование
  • Биннинг
  • Нормализация
  • Стандартизация
  • Работа с отсутствующими значениями
  • Методы импутации данных

Кодирование

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

Одно горячее кодирование:

Преобразование категориальных данных в столбцы с каждой уникальной категорией в качестве столбца - это One-hot Encoding.

Вот фрагмент кода для реализации One-hot кодирования,

encoded_columns = pd.get_dummies(data['column'])
data = data.join(encoded_columns).drop('column', axis=1)

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

Кодировка метки:

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

Например, 0 для "комедии", 1 для "ужасов", 2 для "романтики" случайным образом. Но такое назначение может привести к излишней упорядоченности категорий.

Этот метод можно использовать, когда категории являются порядковыми (в определенном порядке), например 3 для «отлично», 2 для «хорошо» и 1 для «плохо». В таких случаях полезно упорядочить категории. И присвоенные значения не обязательно должны быть последовательными.

Вот фрагмент кода для реализации кодировщика меток,

from sklearn.preprocessing import ColumnTransformer
labelencoder = ColumnTransformer()
x[:, 0] = labelencoder.fit_transform(x[:, 0])

Биннинг

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

#Numerical Binning Example
Value      Bin       
0-30   ->  Low       
31-70  ->  Mid       
71-100 ->  High
#Categorical Binning Example
Value      Bin       
Germany->  Europe      
Italy  ->  Europe       
India  ->  Asia
Japan  ->  Asia

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

Нормализация

Нормализация (также называемая нормализацией минимума и максимума) - это метод масштабирования, при котором при его применении масштаб функций будет изменен так, что данные будут попадать в диапазон [0,1].

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

Математическая формула нормализации

Здесь «x» - исходное значение, а «x» - нормализованное значение.

В необработанных данных характеристика алкоголь находится в [11,15], а функция malic находится в [0,6]. В нормализованных данных характеристика алкоголь находится в [0,1], а функция malic находится в [0,1]

Стандартизация

Стандартизация (также называемая нормализацией по Z-баллам) - это метод масштабирования, при котором при его применении масштаб функций будет изменен так, что они будут иметь свойства стандартного нормального распределения с средним , μ = 0 и стандартное отклонение, σ = 1; где μ - среднее (среднее), а σ - стандартное отклонение от среднего.

Стандартные оценки (также называемые z оценками) образцов рассчитываются следующим образом:

Математическая формула стандартизации

Это масштабирует функции таким образом, чтобы они находились в диапазоне [-1,1]

В необработанных данных характеристика алкоголь находится в [11,15], а функция malic находится в [0,6]. В стандартизованных данных функция алкоголь и яблочный центрируются на 0.

Чтобы узнать больше о масштабировании функций с помощью нормализации и стандартизации, посмотрите мою статью.



Работа с отсутствующими значениями

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

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

Методы импутации данных

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

Для числовых признаков пропущенные значения могут быть заменены на,

  • просто 0 или значение по умолчанию
#Filling all missing values with 0
data = data.fillna(0)
  • наиболее повторяющееся значение признака
#Filling missing values with mode of the columns
data = data.fillna(data.mode())
  • среднее значение этого признака (на которое влияют выбросы, может быть заменено даже на медианное значение признака)
#Filling missing values with medians of the columns
data = data.fillna(data.median())

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

  • наиболее повторяющееся значение признака
#Most repeated value function for categorical columns
data['column_name'].fillna(data['column_name'].value_counts()
.idxmax(), inplace=True)
  • «Другие» или любая новая категория, подразумевающая условное исчисление точки данных.

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

Спасибо за прочтение. В будущем я собираюсь писать больше постов для начинающих. Подпишитесь на меня на Medium, чтобы быть в курсе о них. Я приветствую обратную связь, и с ней можно связаться в Twitter ramya_vidiyala и LinkedIn RamyaVidiyala. Удачного обучения!