Feature engineering

Machine Learning-modellen ontwikkelen voor productie

Sinan Ozdemir

Data Scientist and Author

Introductie tot feature engineering

  • Trainingsdata transformeren om de ML-pijplijn te maximaliseren
  • Rekencomplexiteit verlagen
  • Voorbeelden
    • Data uit meerdere bronnen aggregeren
    • Nieuwe features construeren
    • Feature-transformaties toepassen

feature engineering pipeline

1 https://www.manning.com/books/feature-engineering-bookcamp
Machine Learning-modellen ontwikkelen voor productie

Data aggregeren uit meerdere bronnen

  • Data uit verschillende datasets combineren
  • Meerdere datatypes gebruiken (bv. numeriek en categorisch)

Dit helpt om:

  • De nauwkeurigheid te verbeteren
  • Complexere modellen te gebruiken

grafieken op een scherm

Machine Learning-modellen ontwikkelen voor productie

Voorbeeld van data-aggregatie

class DataAggregator:
    def __init__(self):
        pass

    def fit(self, X, y=None):
        return self  # niets om te fitten

    def transform(self, X, y=None):
        # Laad data uit meerdere bronnen
        data1 = pd.read_csv('data1.csv')
        data2 = pd.read_csv('data2.csv')
        data3 = pd.read_csv('data3.csv')

        # Combineer data uit alle bronnen (incl. X) tot één dataframe
        aggregated_data = pd.concat([X, data1, data2, data3], axis=0)

        return aggregated_data  # Geef geaggregeerde data terug
Machine Learning-modellen ontwikkelen voor productie

Feature-constructie

  • Nieuwe features maken uit bestaande
  • Nieuwe features genereren uit bestaande data
  • Modelprestaties verbeteren
  • Interpreteerbaarheid vergroten
Machine Learning-modellen ontwikkelen voor productie

Voorbeeld van feature-constructie

class FeatureConstructor:
    def __init__(self):
        pass

    def fit(self, X, y=None):
        return self

    def transform(self, X, y=None):
        # Bereken het gemiddelde van elke kolom
        mean_values = X.mean()

        # Maak nieuwe features op basis van de gemiddelden
        X['mean_col1'] = X['col1'] - mean_values['col1']
        X['mean_col2'] = X['col2'] - mean_values['col2']

        return X  # Geretourneerde, uitgebreide dataset
Machine Learning-modellen ontwikkelen voor productie

Feature-transformaties

Bestaande features ter plekke transformeren

  • Data-distributies normaliseren
  • Uitbijters verwijderen
  • Modelnauwkeurigheid en prestaties verbeteren
from sklearn.datasets import load_breast_cancer
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import accuracy_score

data = load_breast_cancer()  # Load dataset
X, y = data.data, data.target
model = LogisticRegression(random_state=42)  # instantiate a model

# Split data into train and test sets
X_train, X_test, y_train, y_test = train_test_split(
  X, y, test_size=0.3, random_state=42)

model.fit(X_train, y_train)  # Fit logistic regression model without scaling
y_pred_no_scaling = model.predict(X_test)
acc_no_scaling = accuracy_score(y_test, y_pred_no_scaling)

scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)

model.fit(X_train_scaled, y_train)  # Fit logistic regression model with scaling
y_pred_with_scaling = model.predict(X_test_scaled)
acc_with_scaling = accuracy_score(y_test, y_pred_with_scaling)

# Compare accuracies of models with and without scaling
print(f"Accuracy without scaling: {acc_no_scaling}")  # 0.971
print(f"Accuracy with scaling: {acc_with_scaling}")  # 0.982
Machine Learning-modellen ontwikkelen voor productie

Feature-selectie

Een subset van features kiezen door overbodige en irrelevante features te verwijderen

  • Vermindert overfitting
  • Verhoogt nauwkeurigheid en prestaties
  • Verbetert interpreteerbaarheid

feature selection

1 https://www.manning.com/books/feature-engineering-bookcamp
Machine Learning-modellen ontwikkelen voor productie

Voorbeeld van feature engineering (vervolg)

import pandas as pd
from sklearn.preprocessing import StandardScaler
from sklearn.feature_selection import SelectKBest, chi2
from sklearn.pipeline import Pipeline

pipeline = Pipeline([  # Definieer feature-engineeringpijplijn

    ('aggregate', DataAggregator()),  # Data uit meerdere bronnen aggregeren

    ('construction', FeatureConstructor()),  # Feature-constructie

    ('scaler', StandardScaler()),  # Feature-transformatie

    ('select', SelectKBest(chi2, k=10)),  # Feature-selectie
])
X_transformed = pipeline.fit_transform(X)  # Fit en transformeer data via de pijplijn
Machine Learning-modellen ontwikkelen voor productie

Meer leren over feature engineering

fe book

Machine Learning-modellen ontwikkelen voor productie

Laten we oefenen!

Machine Learning-modellen ontwikkelen voor productie

Preparing Video For Download...