Perbedaan antara pas dan pas_transformasi dalam model scikit_learn?

110

Saya pemula dalam ilmu data dan saya tidak mengerti perbedaan antara fitdan fit_transformmetode dalam scikit-belajar. Adakah yang bisa menjelaskan mengapa kita perlu mengubah data?

Apa artinya mencocokkan model pada data pelatihan dan mentransformasikannya untuk menguji data? Apakah itu berarti misalnya mengubah variabel kategori menjadi angka dalam kereta dan mengubah set fitur baru untuk menguji data?

Kaggle
sumber
@sds Jawaban di atas memberikan tautan ke pertanyaan ini.
Kaushal28
Kami menerapkan fitpada training datasetdan menggunakan transformmetode pada both- dataset pelatihan dan dataset tes
Prakash Kumar

Jawaban:

117

Untuk memusatkan data (membuatnya nol rata-rata dan kesalahan standar satuan), Anda kurangi rata-rata dan kemudian bagi hasilnya dengan deviasi standar.

x=xμσ

Anda melakukannya pada set data pelatihan. Tetapi kemudian Anda harus menerapkan transformasi yang sama untuk set pengujian Anda (misalnya dalam validasi silang), atau untuk contoh yang baru diperoleh sebelum perkiraan. Tapi Anda harus menggunakan dua parameter yang sama dan (nilai) yang Anda gunakan untuk memusatkan set pelatihan.σμσ

Oleh karena itu, setiap transformasi sklearn fit()hanya menghitung parameter (misalnya dan dalam kasus StandardScaler ) dan menyimpannya sebagai keadaan objek internal. Setelah itu, Anda dapat memanggil metodenya untuk menerapkan transformasi pada sekumpulan contoh tertentu.σμσtransform()

fit_transform()bergabung dengan dua langkah ini dan digunakan untuk pemasangan awal parameter pada set pelatihan , tetapi juga mengembalikan diubah . Secara internal, itu hanya panggilan pertama dan kemudian pada data yang sama.x xxfit()transform()

K3 --- rnc
sumber
1
Terima kasih banyak atas jawaban Anda. Hanya satu hal. Dengan parameter dalam model, itu tidak berarti untuk kemiringan yang berlebihan dan memotong untuk regresi? ketika Anda cocok katakanlah regresi linier misalnya parameter mana yang cocok dengan metode fit? Parameter normalisasi atau parameter model seperti kemiringan dan intersep?
Kaggle
1
Maksud saya parameter internal untuk transformasi ( dan dalam kasus StandardScaler). Apapun metode transformasi yang dikembalikan. Lihat bab ini tentang imputasi, misalnya: scikit-learn.org/stable/modules/…σμσget_params()
K3 --- rnc
2
Komentar saya sebelumnya sebenarnya salah. Dalam kasus regresi linier, parameter yang dipasang adalah coef_(yaitu kemiringan dan intersep), bukan yang dikembalikan oleh get_params()(yang, sebaliknya, mengembalikan set argumen konstruktor model dengan nilai terkait).
K3 --- rnc
Jawaban bagus! Saya menemukan posting Anda saat mencari tentang topik ini, tetapi saya perlu mengklarifikasi. Apakah itu berarti bahwa jika seandainya kita ingin mengubah setiap set contoh berikutnya, kita tidak boleh memanggil fit_transform()karena tidak akan memungkinkan kita untuk mengakses keadaan objek internal, untuk mengubah contoh berikutnya dengan parameter yang sama yang diperoleh menggunakan fit()pada dataset awal? Ini muncul misalnya ketika, Anda memiliki dataset uji dan ingin mengubah set tes untuk meneruskannya ke klasifikasi Anda yang terlatih.
AKKA
Setelah Anda menelepon t.fit_transform(train_data), t sudah terpasang, sehingga Anda dapat menggunakan dengan aman t.transform(test_data).
K3 --- rnc
10

Penjelasan berikut ini berdasarkan fit_transformdari Imputerkelas, tetapi gagasan adalah sama untuk fit_transformkelas scikit_learn lainnya seperti MinMaxScaler.


transformmengganti nilai yang hilang dengan angka. Secara default nomor ini adalah sarana kolom dari beberapa data yang Anda pilih. Perhatikan contoh berikut:

imp = Imputer()
# calculating the means
imp.fit([[1, 3], [np.nan, 2], [8, 5.5]])

Sekarang imputer telah belajar menggunakan rata-rata (1 + 8) / 2 = 4,5 untuk kolom pertama dan rata-rata (2 + 3 + 5.5) / 3 = 3,5 untuk kolom kedua ketika diterapkan pada data dua kolom:

X = [[np.nan, 11], 
     [4,      np.nan], 
     [8,      2],
     [np.nan, 1]]
print(imp.transform(X))

kita mendapatkan

[[4.5, 11], 
 [4, 3.5],
 [8, 2],
 [4.5, 1]]

Jadi dengan fitimputer menghitung sarana kolom dari beberapa data, dan dengan transformitu berlaku sarana tersebut untuk beberapa data (yang hanya mengganti nilai yang hilang dengan sarana). Jika kedua data ini sama (yaitu data untuk menghitung rata-rata dan data yang berarti diterapkan) Anda dapat menggunakan fit_transformyang pada dasarnya fitdiikuti oleh a transform.

Sekarang pertanyaan Anda:

Mengapa kita perlu mengubah data?

"Karena berbagai alasan, banyak dataset dunia nyata mengandung nilai yang hilang, sering dikodekan sebagai blanko, NaNs, atau placeholder lainnya. Namun, dataset tersebut tidak kompatibel dengan penaksir scikit-learning yang mengasumsikan bahwa semua nilai dalam array adalah numerik" ( sumber )

Apa artinya mencocokkan model pada data pelatihan dan mentransformasikannya untuk menguji data?

The fitimputer tidak ada hubungannya dengan fitdigunakan dalam pemasangan model. Jadi menggunakan imputer fitpada data pelatihan hanya menghitung rata-rata setiap kolom data pelatihan. Menggunakan transformdata uji kemudian menggantikan nilai data uji yang hilang dengan cara yang dihitung dari data pelatihan.

LoMaPh
sumber
3

Dalam istilah awam, fit_transform berarti melakukan beberapa perhitungan dan kemudian melakukan transformasi (misalnya, menghitung rata-rata kolom dari beberapa data dan kemudian mengganti nilai yang hilang). Jadi untuk set pelatihan, Anda perlu menghitung dan melakukan transformasi.

Tetapi untuk set pengujian, Pembelajaran mesin menerapkan prediksi berdasarkan apa yang telah dipelajari selama set pelatihan dan sehingga tidak perlu menghitung, itu hanya melakukan transformasi.

Ashish Anand
sumber
3

Metode-metode ini digunakan untuk transformasi dataset di scikit-learn:

Mari kita ambil contoh untuk nilai Penskalaan dalam dataset:

Di sini metode fit , ketika diterapkan pada dataset pelatihan, mempelajari parameter model (misalnya, mean dan standar deviasi). Kita kemudian perlu menerapkan metode transformasi pada dataset pelatihan untuk mendapatkan dataset pelatihan yang diubah (diskalakan). Kami juga bisa melakukan kedua langkah ini dalam satu langkah dengan menerapkan fit_transform pada set data pelatihan.

Lalu mengapa kita membutuhkan 2 metode terpisah - pas dan ubah ?

Dalam praktiknya kita perlu memiliki set data pelatihan dan pengujian yang terpisah dan di sanalah metode fit and transform yang terpisah membantu. Kami menerapkan kecocokan pada dataset pelatihan dan menggunakan metode transformasi pada keduanya - dataset pelatihan dan dataset pengujian. Dengan demikian pelatihan serta dataset uji kemudian ditransformasikan (diskalakan) menggunakan parameter model yang dipelajari tentang penerapan metode fit , dataset pelatihan.

Kode Contoh:

scaler = preprocessing.StandardScaler().fit(X_train)
scaler.transform(X_train) 
scaler.transform(X_test) 
Prasad Nageshkar
sumber
2

Ini bukan jawaban teknis tetapi, semoga bermanfaat untuk membangun intuisi kita:

Pertama, semua penaksir dilatih (atau "cocok") pada beberapa data pelatihan. Bagian itu cukup mudah.

Kedua, semua penaksir scikit-learn dapat digunakan dalam pipa dan ide dengan pipa adalah bahwa data mengalir melalui pipa. Setelah pas pada tingkat tertentu dalam pipa, data diteruskan ke tahap berikutnya dalam pipa, tetapi jelas data perlu diubah (diubah) dengan cara tertentu; jika tidak, Anda tidak akan memerlukan tahapan itu di dalam pipa sama sekali. Jadi, mentransformasikan adalah cara mengubah data untuk memenuhi kebutuhan tahap selanjutnya dalam pipa.

Jika Anda tidak menggunakan saluran pipa, saya masih berpikir sangat membantu untuk memikirkan alat pembelajaran mesin ini dengan cara ini karena, bahkan penggolong paling sederhana pun masih melakukan fungsi klasifikasi. Dibutuhkan sebagai input beberapa data dan menghasilkan output. Ini juga saluran pipa; hanya yang sangat sederhana.

Singkatnya, fit melakukan pelatihan, mengubah perubahan data dalam pipa untuk meneruskannya ke tahap berikutnya dalam pipa, dan fit_transform melakukan pemasangan dan transformasi dalam satu langkah yang mungkin dioptimalkan.

Eric McLachlan
sumber
"" Kami menerapkan kecocokan pada dataset pelatihan dan menggunakan metode transformasi pada keduanya - dataset pelatihan dan dataset tes "" :) Bagus
Prakash Kumar
2
Saya pikir Anda bermaksud berkomentar di bawah ini. Saya akan meneruskannya ke Prasad Nageshkar. (Ya ... saya akan melakukannya jika saya memiliki reputasi.)
Eric McLachlan
1

Dengan Menerapkan Transformasi Anda mencoba membuat data Anda berperilaku normal misalnya jika Anda memiliki dua variabel dan keduanya mengukur jarak tetapi memiliki satuan sebagai sentimeter dan memiliki satuan dalam Kilometer sehingga untuk membandingkan keduanya, Anda harus mengkonversikannya ke unit yang sama ... sama seperti Transforming membuat perilaku yang sama atau membuat berperilaku seperti distribusi normalV1V2V1V2

Datang ke pertanyaan lain Anda pertama kali membangun model dalam set pelatihan yaitu (model mempelajari pola atau Perilaku data Anda dari set pelatihan) dan ketika Anda menjalankan model yang sama dalam set tes, ia mencoba mengidentifikasi pola atau perilaku yang sama setelah itu mengidentifikasi itu membuat kesimpulannya dan memberikan hasil sesuai data pelatihan

user66487
sumber
0

Pertimbangkan tugas yang mengharuskan kita untuk menormalkan data. Sebagai contoh, kita dapat menggunakan normalisasi min-max atau normalisasi z-score. Ada beberapa parameter yang melekat dalam model. Nilai minimum dan maksimum dalam normalisasi min-max dan deviasi rata-rata dan standar dalam normalisasi z-score. Fungsi fit () menghitung nilai-nilai parameter ini.

Efek cocok ()

Fungsi transformasi menerapkan nilai-nilai parameter pada data aktual dan memberikan nilai normal.

Pengaruh transformasi ()

Fungsi fit_transform () melakukan keduanya dalam langkah yang sama.

Pengaruh fit_transform ()

Perhatikan bahwa nilai yang sama didapat apakah kita tampil dalam 2 langkah atau dalam satu langkah.

Lovelyn David
sumber
0

"fit" menghitung mean dan std yang akan digunakan untuk penskalaan nanti . (hanya perhitungan), tidak ada yang diberikan kepada Anda.

"transform" menggunakan mean dan std yang dikomputasi sebelumnya untuk mengotomatiskan data (kurangi rata-rata dari semua nilai dan kemudian bagi dengan std).

"fit_transform" melakukan keduanya sekaligus. Jadi Anda bisa melakukannya dengan 1 baris kode, bukan 2.

Sekarang mari kita lihat dalam praktiknya:

Untuk set pelatihan X , kita melakukan "fit_transform" karena kita perlu menghitung mean dan std, dan kemudian menggunakannya untuk mengotomatiskan data. Untuk set tes X , well, kita sudah memiliki mean dan std, jadi kita hanya melakukan bagian "transform".

Sangat sederhana. Kamu baik-baik saja. Pertahankan kerja bagusmu sobat :-)

Salman Tabatabai
sumber