Инженерингът на функции е процесът на използване на знанията за домейна на данните за създаване на функции, които карат алгоритмите за машинно обучение да работят. Този процес увеличава предсказващата сила на алгоритмите за машинно обучение чрез създаване на функции от необработени данни, които помагат за улесняване на процеса на машинно обучение.

Ето няколко общи инженерни техники за функции:

  1. Групиране или групиране: Стойностите се групират заедно в контейнери. Групирането може да помогне на модела да се справи с отклоненията и да подобри точността на модела.
  2. Полиномни характеристики: Особено при регресия можете да създавате нови характеристики, като вземете предвид полинома на характеристиките.
  3. Преобразуване на категориални в числени: Много модели за машинно обучение изискват цифрово въвеждане. Така че трябва да преобразувате категориални променливи в числови променливи. Два популярни метода са One-Hot Encoding и Ordinal Encoding.
  4. Функции за взаимодействие: Можете да създавате нови функции, като изчислявате взаимодействията между функциите.
  5. Обработване на липсващи стойности: Това може да стане чрез импутиране на средната стойност, медианата или режима на колоната или чрез използване на по-сложни методи като K-NN импутиране или MICE импутиране.

Ето пример за създаване на полиномиални характеристики и еднократно кодиране с помощта на Python:

import pandas as pd
from sklearn.preprocessing import PolynomialFeatures, OneHotEncoder
from sklearn.compose import make_column_transformer
from sklearn.model_selection import train_test_split

# Assume we have a DataFrame 'df' with some numerical and categorical features
df = pd.DataFrame({
    'feature1': [1, 2, 3, 4, 5],
    'feature2': [2, 3, 4, 5, 6],
    'feature3': ['a', 'b', 'a', 'b', 'a'],
})

# We want to create polynomial features for the numerical features
# and one-hot encode the categorical feature
preprocessor = make_column_transformer(
    (PolynomialFeatures(degree=2), ['feature1', 'feature2']),
    (OneHotEncoder(), ['feature3']),
)

# Assume we have a target variable 'y'
y = pd.Series([1, 0, 1, 0, 1])

# Split the data into a training set and a test set
X_train, X_test, y_train, y_test = train_test_split(df, y, test_size=0.2, random_state=1)

# Fit the preprocessor and transform the training data
X_train_transformed = preprocessor.fit_transform(X_train)

# Transform the test data
X_test_transformed = preprocessor.transform(X_test)

В този пример PolynomialFeatures(degree=2) създава нови характеристики, като взема предвид всички полиномиални комбинации на характеристиките със степен по-малка или равна на 2. OneHotEncoder() преобразува категориалната променлива feature3 в числов формат чрез създаване на фиктивни променливи. make_column_transformer прилага тези трансформации към посочените колони на DataFrame.