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

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

Этот пост предполагает базовое понимание Python, Pandas, NumPy и matplotlib. В большинстве случаев ссылки предоставляются для более глубокого понимания того, что используется. Если что-то не имеет смысла, оставьте комментарий, и я постараюсь уточнить его.

Что такое биннинг?

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

Например, допустим, у нас есть DataFrame автомобилей.

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

Изготовление контейнеров

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

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

Поскольку Python упрощает создание гистограмм с помощью matplotlib, давайте визуализируем эти данные в виде гистограммы и установим для параметра бинов значение 3.

import import matplotlib.pyplot as plt
mpgs = cars['MPG']
plt.hist(mpgs, bins=3)
plt.show()

Похоже, что наши 3 корзины примерно 10–25, 25–40 и 40–56.

Давайте подтвердим, что мы правы, вернув массив, показывающий ширину бункера.

plt.hist(mpgs, bins=3)[1]
\\array([10.        , 25.33333333, 40.66666667, 56.        ])

Мы также могли бы провести некоторое исследование топливной эффективности и посмотреть, есть ли лучший способ создать наши диапазоны бункеров. При быстром поиске в Google становится очевидно, что эффективность использования топлива относительна. Это определяется многими факторами, обычно связанными с возрастом автомобиля и типом / классом автомобиля. Чтобы не усложнять этот пример, мы будем придерживаться метода гистограммы. Но помните, что данные - важная часть биннинга, и небольшое исследование может иметь большое значение.

Помещение MPG в правую корзину

Теперь, когда мы знаем диапазоны для наших ящиков, мы можем создать простую функцию, которая использует супер классную функцию вырезания Pandas. Cut разделит наш столбец на части, используя предоставленные нами имена ярлыков и диапазоны. Обратите внимание: чтобы добавить 10, мы должны начать нашу первую резку с 9.

def make_bins(df):
   label_names = ["Gas Guzzler", "Average Fuel Efficiency","Fuel Effecient" ]
   cut_points = [9, 25.333, 40.667, 56]
   df["MPG_effeciency"] = pd.cut(df["MPG"], cut_points, labels=label_names)
   return df

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

new_cars_df = make_bins(cars)

Это даст нам… .. барабанную дробь, пожалуйста…. новый DataFrame со столбцом категории MPG!

Манекен это вверх

Последний шаг - получить несколько манекенов, поскольку наша модель, скорее всего, будет принимать только целые числа.

dummies = pd.get_dummies(new_cars_df["MPG_effeciency"])
new_cars_df = pd.concat([new_cars_df, dummies], axis=1)

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

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

И это все. Через несколько минут мы разработали новые функции!