StandardScaler sebelum dan sesudah memisahkan data

20

Ketika saya membaca tentang menggunakan StandardScaler, sebagian besar rekomendasi mengatakan bahwa Anda harus menggunakan StandardScaler sebelum membagi data menjadi kereta / tes, tetapi ketika saya memeriksa beberapa kode yang diposting online (menggunakan sklearn) ada dua kegunaan utama.

1- Menggunakan StandardScalerpada semua data. Misalnya

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

Atau

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

Atau sederhananya

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

2- Menggunakan StandardScalerdata terpecah.

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

Saya ingin membakukan data saya, tetapi saya bingung metode mana yang terbaik!

tsumaranaina
sumber

Jawaban:

25

Demi mencegah informasi tentang distribusi set tes yang bocor ke dalam model Anda, Anda harus memilih opsi # 2 dan mencocokkan scaler pada data pelatihan Anda saja, kemudian membakukan pelatihan dan set tes dengan scaler itu. Dengan memasang scaler pada dataset lengkap sebelum pemisahan (opsi # 1), informasi tentang set tes digunakan untuk mengubah set pelatihan, yang pada gilirannya diteruskan ke hilir.

Sebagai contoh, mengetahui distribusi seluruh dataset mungkin memengaruhi cara Anda mendeteksi dan memproses outlier, serta bagaimana Anda membuat parameter model Anda. Meskipun data itu sendiri tidak terbuka, informasi tentang distribusi data tersebut. Akibatnya, kinerja rangkaian pengujian Anda bukanlah perkiraan kinerja yang sebenarnya pada data yang tidak terlihat. Beberapa diskusi lebih lanjut yang mungkin bermanfaat bagi Anda adalah di Cross Validated .

redhqs
sumber
Apakah hal yang sama berlaku untuk set validasi? Dengan kata lain, jika saya membagi Set Pelatihan saya menjadi set Kereta dan Validasi, apakah saya mempelajari kecocokan hanya pada kereta dan kemudian menerapkan ke kedua set Validasi dan Tes nanti? atau apakah saya mempelajari kecocokan pada seluruh set data yang terdiri dari contoh Validasi dan Pelatihan dan hanya khawatir tentang penerapannya pada set Tes nanti.
Phil Glau
hai - itu benar, hanya cocok di kereta api - bukan validasi atau tes
redhqs
0

Bagaimana dengan yang berikut:

from sklearn.preprocessing import StandardScaler

sc = StandardScaler()

X_train = sc.fit_transform(X_train)

X_test = sc.fit_transform (X_test)

Karena jika X_test = sc.transform(X_test), itu mengembalikan kesalahan X_testbelum pas. Atau apakah saya melewatkan sesuatu di sini?

pengguna253546
sumber
2
Hapus saja fit dari X_test
tsumaranaina
0

Anda seharusnya tidak melakukan fit_transform (X_test) pada data pengujian.
Kecocokan sudah terjadi di atas.

from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform (X_test)
starsini
sumber
Maaf, ini dimaksudkan sebagai balasan untuk apa yang ada di bawah ini :)
starsini