Middle+
Wat is back leakage?
sobes.tech AI
Antwoord van AI
Back leakage (achterwaartse lek) is een situatie in machine learning waarbij informatie uit de test- of validatiegegevens onbedoeld in het trainingsproces terechtkomt. Dit leidt tot overfitting van het model op deze gegevens, waardoor de prestatiewaarden (kwaliteitsmetingen) op de testset overschat lijken en niet de werkelijke generalisatiecapaciteit van het model op nieuwe, unseen gegevens weerspiegelen.
Oorzaken van back leakage:
- Data preprocessing (schaling, normalisatie, codering van categorische kenmerken) uitvoeren op de gehele dataset voordat deze wordt opgesplitst in training, test en validatie.
- Statistieken uit de test- of validatieset (bijvoorbeeld, gemiddelde, standaarddeviatie) gebruiken tijdens de verwerking van de trainingsset.
- Kenmerken selecteren op basis van de hele dataset, inclusief de test.
- Handmatig het model of hyperparameters afstemmen op basis van de waargenomen prestaties op de testset.
Gevolgen van back leakage:
- Onbetrouwbare prestatiewaarden van het model.
- Het model werkt slecht op nieuwe gegevens in productie.
- Verspilling van middelen op een inefficiënt model.
Voorkomen van back leakage:
- Verdeel altijd de gegevens in trainings-, validatie- en testsets voor elke preprocessing of analyse.
- Pas data preprocessing (bijvoorbeeld,
StandardScaler,OneHotEncoder) alleen toe op de trainingsset, en gebruik vervolgens de getrainde transformators om de validatie- en testsets te transformeren. - Voer kenmerkenselectie alleen uit op de trainingsset.
- Gebruik cross-validatie op de trainingsset om hyperparameters af te stemmen en het model te evalueren voordat je het finale test op de gereserveerde testset.
Voorbeeld van incorrecte schaling (leidt tot back leakage):
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
# Stel dat we een DataFrame df hebben
# Onjuiste aanpak: schaal de hele DataFrame
scaler = StandardScaler()
df_scaled = scaler.fit_transform(df)
# Vervolgens de data splitsen
X_train, X_test, y_train, y_test = train_test_split(df_scaled, ...)
Voorbeeld van correcte schaling (vermijdt back leakage):
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
# Stel dat we een DataFrame df hebben
# Correcte aanpak: split eerst de data
X_train, X_test, y_train, y_test = train_test_split(df, ...)
# Train vervolgens de scaler alleen op de trainingsdata
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
# En pas de getrainde scaler toe op de testdata
X_test_scaled = scaler.transform(X_test)
# Nu zijn X_train_scaled en X_test_scaled klaar voor modeltraining