Понятный ML - Статьи по машинному обучению
Назад к статьям

Инжиниринг признаков (Feature Engineering)

Елена Капаца
14 мин

Процесс преобразования сырых данных, чтобы те лучше подходили для моделирования

Машинное обучение

Feature Engineering (инжиниринг признаков) — это процесс преобразования сырых данных, чтобы те лучше подходили для моделирования. Он включает в себя выбор, создание и преобразование признаков.

Зачем Нужна Инженерия Признаков?

  1. Улучшение производительности: Правильные признаки могут значительно повысить точность модели.
  2. Снижение переобучения: Уменьшение избыточности в данных помогает избежать переобучения модели.
  3. Упрощение модели: Сокращение числа признаков может привести к более простой и интерпретируемой модели.

Основные Этапы Инженерии Признаков

1. Анализ данных: Понимание структуры и содержания данных.

2. Обработка пропусков: Заполнение или удаление пропущенных значений.

3. Кодирование категориальных признаков: Преобразование категориальных данных в числовые.

4. Создание новых признаков: Извлечение новых признаков из существующих.

5. Масштабирование признаков: Приведение признаков к одному масштабу.

6. Выбор признаков: Определение значимости признаков и удаление несущественных.

Инжиниринг признаков на Python

Мы создадим простую модель линейной регрессии на основе набора данных о жилье (с использованием библиотеки pandas и scikit-learn).

import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import OneHotEncoder, StandardScaler
from sklearn.compose import ColumnTransformer
from sklearn.pipeline import Pipeline
# Чтение данных о жилье
data = pd.read_csv('housing_data.csv')
print(data.head())

Предположим, что данные содержат следующие колонки: size, bedrooms, location, price.

# Кодируем категориальные признаки
# Использование OneHotEncoder для категориального признака 'location'
categorical_features = ['location']
numerical_features = ['size', 'bedrooms']
# Создание трансформера столбцов
preprocessor = ColumnTransformer(
    transformers=[
        ('num', StandardScaler(), numerical_features), # Приведет столбцы к числовому типу

        ('cat', OneHotEncoder(), categorical_features)]) # Приведет столбцы к категориальному типу

В дальнейшем модель обучается. 

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