StandardScaler przed i po podziale danych


20

Kiedy czytałem o używaniu StandardScaler, większość zaleceń mówiła, że ​​powinieneś użyć StandardScaler przed podzieleniem danych na pociąg / test, ale kiedy sprawdzałem niektóre kody opublikowane online (za pomocą sklearn), były dwa główne zastosowania.

1- Korzystanie StandardScalerze wszystkich danych. Na przykład

from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_fit = sc.fit(X)
X_std = X_fit.transform(X)

Lub

from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X = sc.fit(X)
X = sc.transform(X)

Lub po prostu

from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_std = sc.fit_transform(X)

2- Korzystanie StandardScalerz podzielonych danych.

from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform (X_test)

Chciałbym ujednolicić swoje dane, ale nie wiem, która metoda jest najlepsza!

Odpowiedzi:


25

Aby nie dopuścić do wycieku informacji o rozmieszczeniu zestawu testowego w twoim modelu, powinieneś wybrać opcję nr 2 i dopasować skaler tylko do danych treningowych, a następnie ustandaryzować zarówno zestaw szkoleniowy, jak i testowy za pomocą tego skalera. Dzięki dopasowaniu skalera do pełnego zestawu danych przed podziałem (opcja # 1), informacje o zestawie testowym są wykorzystywane do transformacji zestawu treningowego, który z kolei jest przekazywany dalej.

Na przykład znajomość rozmieszczenia całego zestawu danych może wpłynąć na sposób wykrywania i przetwarzania wartości odstających, a także na parametryzację modelu. Chociaż same dane nie są narażone, informacje na temat dystrybucji danych są. W rezultacie wydajność zestawu testowego nie jest prawdziwym oszacowaniem wydajności na niewidocznych danych. Dalsza dyskusja, która może Ci się przydać, znajduje się na temat Cross Validated .


Czy to samo dotyczy zestawu sprawdzania poprawności? Innymi słowy, jeśli podzielę mój zestaw treningowy na zestawy trenujące i sprawdzające poprawność, czy nauczę się dopasowania tylko do pociągu, a następnie zastosuję się zarówno do zestawów sprawdzających poprawność, jak i testowych później? czy też uczę się dopasowania w całym zestawie danych, który zawierał zarówno przykłady sprawdzania poprawności, jak i szkolenia, i martwię się o zastosowanie go później do zestawu testowego.
Phil Glau,

cześć - to prawda, pasuje tylko w pociągu - nie jest to sprawdzanie poprawności ani test
redhqs

0

Co powiesz na następujące:

from sklearn.preprocessing import StandardScaler

sc = StandardScaler()

X_train = sc.fit_transform(X_train)

X_test = sc.fit_transform (X_test)

Ponieważ jeśli X_test = sc.transform(X_test)zwraca błąd, X_testnie jest jeszcze dopasowany. A może coś mi umknęło?


2
Wystarczy usunąć dopasowanie z X_test
tsumaranaina

0

Nie powinieneś wykonywać fit_transform (X_test) na danych testowych.
Dopasowanie nastąpiło już powyżej.

from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform (X_test)

Przepraszam, to miało być odpowiedzią na to, co poniżej :)
starsini 10.10
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.