Feature engineering en selectie

End-to-End Machine Learning

Joshua Stapleton

Machine Learning Engineer

Feature engineering

Features maken

  • Vereenvoudigt het probleem
  • Maakt modellen efficiënter

Technieken

  • Bestaande features aanpassen
  • Nieuwe features ontwerpen

Voordelen

  • Eenvoudiger deployen, onderhouden, trainen
  • Betere interpreteerbaarheid

Huidige fase van de machine learning-levenscyclus: feature engineering

End-to-End Machine Learning

Normaliseren

  • Schaa lt numerieke features naar [0, 1]
  • Handig als features verschillende schalen/bereiken hebben
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import Normalizer

# Split de data
X_train, X_test = train_test_split(df, test_size=0.2, random_state=42)
# Maak normalizer, fit op trainingsdata, normaliseer en transformeer testset
norm = Normalizer()
X_train_norm = norm.fit_transform(X_train)
X_test_norm = norm.transform(X_test)
End-to-End Machine Learning

Standaardiseren

  • Schaal data naar gemiddelde = 0, variantie = 1
  • Nuttig voor algoritmes die gelijke gemiddelde en variantie aannemen
from sklearn.preprocessing import StandardScaler

# Split de data
X_train, X_test = train_test_split(df, test_size=0.2, random_state=42)
# Maak een scaler en fit trainingsdata om te standaardiseren
sc = StandardScaler()
X_train_stzd = sc.fit_transform(X_train)
# Standaardiseer alleen de testdata
X_test_stzd = sc.transform(X_test)
End-to-End Machine Learning

Wat is een goede feature?

  • Gebruik relevante features
  • Het weer op de dag van de afspraak zegt niets over de diagnose

 

Een foto van stormachtig weer die het principe van feature-relevantie bij featureselectie toont

  • Gebruik afwijkende (orthogonale) features
  • Twee features: leeftijd in maanden en in jaren helpen niet

 

Een diagram dat het principe van orthogonaliteit bij featureselectie toont

End-to-End Machine Learning

sklearn.feature_selection

 

from sklearn.ensemble import RandomForestClassifier
from sklearn.feature_selection import SelectFromModel
from sklearn.model_selection import train_test_split

# Data eerst in train- en testsets splitsen om datalekken te voorkomen X_train, X_test, y_train, y_test = train_test_split( heart_disease_df_X, heart_disease_df_y, test_size=0.2, random_state=42)
End-to-End Machine Learning

sklearn.feature_selection (vervolg)

 

# Definieer en fit het random forest-model
rf = RandomForestClassifier(n_jobs=-1, class_weight='balanced', max_depth=5)
rf.fit(X_train, y_train)

# Definieer en voer featureselectie uit model = SelectFromModel(rf, prefit=True) features_bool = model.get_support() features = heart_disease_df.columns[features_bool]
End-to-End Machine Learning

Laten we oefenen!

End-to-End Machine Learning

Preparing Video For Download...