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!

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 .


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?


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)

Maaf, ini dimaksudkan sebagai balasan untuk apa yang ada di bawah ini :)
starsini
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.