Middle+
Kas ir back leakage?
sobes.tech AI
Atbilde no AI
Aizmugures noplūde (back leakage) ir situācija mašīnmācībā, kad informācija no testa vai validācijas datu kopas nejauši nonāk mācību procesā. Tas noved pie modeļa pārtrenišanas uz šiem datiem, un tādējādi novērtējuma metrikas uz testa kopas ir pārāk augstas un neparāda modeļa patieso spēju vispārīgi piemērot jaunus, unseen datus.
Back leakage iemesli:
- Datu iepriekšēja apstrāde (mērogošana, normalizācija, kategoriju kodēšana) uz visu datu kopu pirms tās sadalīšanas uz mācību, testa un validācijas kopām.
- Statistikas izmantošana no testa vai validācijas kopas (piemēram, vidējā, standarta novirze) apstrādājot mācību kopu.
- Raksturlielumu atlase (feature selection) uz visu datu kopu, ieskaitot testa.
- "Rokas" modeļa vai hiperparametru pielāgošana, balstoties uz novēroto veiktspēju testa datu kopā.
Back leakage sekas:
- Neuzticami modeļa veiktspējas novērtējumi.
- Modelis slikti darbojas uz jauniem datiem ražošanā.
- Resursu izšķērdēšana neefektīvam modelim.
Back leakage novēršana:
- Vienmēr sadaliet datus mācību, validācijas un testa kopās pirms jebkādas iepriekšējas apstrādes vai analīzes.
- Datu iepriekšēja apstrāde (piemēram,
StandardScaler,OneHotEncoder) jāveic tikai uz mācību kopas, un tad jāizmanto apmācītie transformatori validācijas un testa kopu pārveidošanai. - Raksturlielumu atlase jāveic tikai uz mācību kopas.
- Izmantojiet krustošanas validāciju uz mācību kopas hiperparametru pielāgošanai un modeļa novērtēšanai pirms galīgā testēšanas ar atlikto testu.
Nepareiza mērogošana piemērs (izraisa back leakage):
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
# Pieņemam, ka mums ir df datu rāmis
# Nepareizs pieejas veids: mērogo visu datu rāmi
scaler = StandardScaler()
df_scaled = scaler.fit_transform(df)
# Tad sadalām datus
X_train, X_test, y_train, y_test = train_test_split(df_scaled, ...)
Pareiza mērogošanas piemērs (izvairās no back leakage):
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
# Pieņemam, ka mums ir df datu rāmis
# Pareizais veids: vispirms sadalām datus
X_train, X_test, y_train, y_test = train_test_split(df, ...)
# Tad apmācām mērogošanas līdzekli tikai uz treniņa datiem
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
# Un piemērojam apmācīto mērogošanas līdzekli testiem datiem
X_test_scaled = scaler.transform(X_test)
# Tagad X_train_scaled un X_test_scaled ir gatavi modeļa apmācībai