4 Библиотеки Python для Feature Engineering, которые вам стоит использовать в 2023 году
“Feature Engineering” (отбор признаков)- это процесс использования предметной области данных для создания признаков. Feature Engineering является фундаментом для приложений машинного обучения, a также процессом трудным и затратным. Необходимости ручного конструирования признаков можно избежать при автоматизации прикладного обучения признакам.
относится к использованию знаний предметной области к данным для создания новых функций, которые будут использоваться в алгоритмах машинного обучения.
- Features — Информация, извлечённая из данных, которая полезна для прогнозирования.
- Feature Engineering — процесс обработки данных с использованием профессиональных базовых знаний и навыков, чтобы функции могли играть важную роль в алгоритмах машинного обучения.
Другими словами, feature – это переменная (столбец в таблице датафрейма), которая описывает отдельную характеристику объекта данных. Признаки являются основой в задачах машинного обучениям, на их основании строятся предсказания в моделях.
В этой отрасли есть популярная поговорка: данные и разработка функций определяют верхний предел модели, а улучшенный только приближается к этому верхнему пределу.
Feature Engineering на Python направлен на повышение общей производительности моделей машинного обучения и создание наборов данных.
Качество и количество признаков оказывают большое влияние на производительность модели, будет она хорошей или нет.
Feature Engineering
Во многих производственных проектах построение и отбор признаков выполняется вручную и опирается на знания предметной области, интуицию и данные. Весь процесс занимает очень много времени. А “автоматизированный отбор признаков” направлен на процесс автоматической генерации большого количества фич для обработки датасетов, чтобы помочь специалистам по обработке данных и инженерам. Фишка заключается в том, что автоматизация может выбрать наиболее полезные из этих функций для дальнейшей обработки и обучения.
Автоматизированный отбор признаков – позволяет специалистам по обработке данных тратить больше времени на другие аспекты машинного обучения, тем самым повышая эффективность работы.
В этой статье я покажу вам 4 популярные библиотеки Python для автоматизированного отбора признаков с которыми каждый Data Science-разработчик должен быть знаком.
1. Featuretools
Чтобы лучше погрузиться в Featuretools, необходимо понять следующие три ключевых компонента:
- Сущности
- Глубокий синтез признаков (DFS)
- Функциональные примитивы
В Featuretools мы используем сущности для включения содержимого исходного фрейма данных Pandas, а EntitySet состоит из разных сущностей.
Ядром Featuretools является Deep Feature Synthesis (DFS), который представляет собой метод разработки функций, позволяющий создавать новые признаки из одного или нескольких фреймов данных.
DFS создаёт функции из примитивов, указанных в EntitySet. Например, функция mean
в примитивах вычислит среднее значение переменных при агрегировании.
а) Подготовка данных
Скачайте и установите Featuretools от pip:
$ pip install featuretools
Запустите следующий код из официальной демо-версии:
import featuretools as ft
data = ft.demo.load_mock_customer()
customers_df = data["customers"]
customers_df
sessions_df = data["sessions"]
sessions_df.sample(5)
transactions_df = data["transactions"]
transactions_df.sample(5)
Ниже мы указываем словарь, содержащий каждый фрейм данных в датасете. Если в наборе данных есть столбец “id”, мы передаём его вместе с фреймами данных, как показано на рисунке ниже.
dataframes = {
"customers": (customers_df, "customer_id"),
"sessions": (sessions_df, "session_id", "session_start"),
"transactions": (transactions_df, "transaction_id", "transaction_time"),
}
Далее мы определяем связи между фреймами данных. В этом примере у нас есть два отношения:
relationships = [
("sessions", "session_id", "transactions", "session_id"),
("customers", "customer_id", "sessions", "customer_id"),
]
b) Глубокий синтез признаков
Далее мы можем генерировать объекты с помощью DFS, для чего требуются три основных входных данных: “Фреймы данных”, “Список связей” и “Имя целевого фрейма данных”:
feature_matrix_customers, features_defs = ft.dfs(
dataframes=dataframes,
relationships=relationships,
target_dataframe_name="customers",
)
feature_matrix_customers
Мы также можем использовать сеансы в качестве целевого фрейма данных для создания новых функций.
feature_matrix_sessions, features_defs = ft.dfs( dataframes=dataframes, relationships=relationships, target_dataframe_name="sessions"
)
feature_matrix_sessions.head(5)
c) Визуализированный вывод функций
Featuretools может не только выполнять автоматическую генерацию функций, но и визуализировать сгенерированные объекты, а также объяснять, как Featuretools это реализовало.
feature = features_defs[18]
feature
Вы можете найти более подробную информацию на официальном сайте.
2. TSFresh
TSFresh – это библиотека Python с открытым исходным кодом и мощными функциями извлечения данных временных рядов. Она применяет типичные алгоритмы статистики, анализа временных рядов, обработки сигналов и нелинейной динамики наряду с надёжными методами выбора признаков для завершения извлечения временных рядов.
TSFresh автоматически извлекает 100 объектов из временного ряда. Эти характеристики описывают основные факторы из временного ряда, такие как количество пиков и средние или максимальные значения, а также более сложные факторы, такие как симметричная распределение.
Следуя документации, вы можете легко протестировать её производительность, используя приведенные ниже коды:
$ pip install tsfresh
# example data download
from tsfresh.examples.robot_execution_failures import download_robot_execution_failures, load_robot_execution_failures
download_robot_execution_failures()
timeseries, y = load_robot_execution_failures()
# feature extraction
from tsfresh import extract_features
extracted_features = extract_features(timeseries, column_id="id", column_sort="time")
Вы можете найти более подробную информацию на официальном сайте.
3. Featurewiz
Featurewiz – это ещё одна очень мощная библиотека автоматизированных инструментов разработки функций, которая сочетает в себе два различных метода, которые работают вместе, помогая находить лучшие функции:
a) SULOV
Поиск некоррелированного списка переменных (SULOV):
Этот метод выполняет поиск в некоррелированном списке переменных для выявления допустимых пар. Он рассматривает пару переменных с наименьшей корреляцией и максимальным рейтингом MIS (оценка взаимной информации) для дальнейшей обработки.
b) Recursive XGBoost
Переменные, определённые в SULOV на предыдущем шаге, рекурсивно передаются в XGBoost, и функции, наиболее соответствующие целевому столбцу, выбираются с его помощью. В процессе объединяются и добавляются новые функции. Этот процесс повторяется до тех пор, пока не будут сгенерированы все допустимые варианты.
Простая демонстрация кода приведена ниже:
from featurewiz import FeatureWiz
features = FeatureWiz(corr_limit=0.70, feature_engg='', category_encoders='', dask_xgboost_flag=False, nrows=None, verbose=2)
X_train_selected = features.fit_transform(X_train, y_train)
X_test_selected = features.transform(X_test)
features.features # the selected feature list #
# automated feature generation
import featurewiz as FW
outputs = FW.featurewiz(dataname=train, target=target, corr_limit=0.70, verbose=2, sep=',',
header=0, test_data='',feature_engg='', category_encoders='',
dask_xgboost_flag=False, nrows=None)
Вы можете найти более подробную информацию на официальном сайте.
4) PyCaret
PyCaret – это библиотека машинного обучения с открытым исходным кодом на Python, которая автоматизирует рабочие процессы машинного обучения. Это комплексный инструмент машинного обучения и управления моделями, который ускоряет циклы экспериментов и повышает производительность.
В отличие от других библиотек, описанных в этой статье, PyCaret не является специализированной для автоматизированного проектирования функций, но она включает в себя функциональность для автоматической генерации объектов.
Пример простого кода, реализованного на PyCaret:
$ pip install pycaret
# load dataset
from pycaret.datasets import get_data
insurance = get_data('insurance')
# setup
from pycaret.regression import *
reg1 = setup(data = insurance, target = 'charges', feature_interaction = True, feature_ratio = True)
Приведённая ниже таблица содержит функции, которые были сгенерированы автоматически:
Надеюсь, вы найдете что-то полезное в этой статье, спасибо за чтение!
@bigdatai – больше практических инструментов по работе с данными.