Saya pemula dalam ilmu data dan saya tidak mengerti perbedaan antara fit
dan fit_transform
metode 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?
python
scikit-learn
Kaggle
sumber
sumber
fit
padatraining dataset
dan menggunakantransform
metode padaboth
- dataset pelatihan dan dataset tesJawaban:
Untuk memusatkan data (membuatnya nol rata-rata dan kesalahan standar satuan), Anda kurangi rata-rata dan kemudian bagi hasilnya dengan deviasi standar.
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 ′fit()
transform()
sumber
get_params()
coef_
(yaitu kemiringan dan intersep), bukan yang dikembalikan olehget_params()
(yang, sebaliknya, mengembalikan set argumen konstruktor model dengan nilai terkait).fit_transform()
karena tidak akan memungkinkan kita untuk mengakses keadaan objek internal, untuk mengubah contoh berikutnya dengan parameter yang sama yang diperoleh menggunakanfit()
pada dataset awal? Ini muncul misalnya ketika, Anda memiliki dataset uji dan ingin mengubah set tes untuk meneruskannya ke klasifikasi Anda yang terlatih.t.fit_transform(train_data)
,t
sudah terpasang, sehingga Anda dapat menggunakan dengan amant.transform(test_data)
.Penjelasan berikut ini berdasarkan
fit_transform
dariImputer
kelas, tetapi gagasan adalah sama untukfit_transform
kelas scikit_learn lainnya sepertiMinMaxScaler
.transform
mengganti nilai yang hilang dengan angka. Secara default nomor ini adalah sarana kolom dari beberapa data yang Anda pilih. Perhatikan contoh berikut: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:
kita mendapatkan
Jadi dengan
fit
imputer menghitung sarana kolom dari beberapa data, dan dengantransform
itu 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 menggunakanfit_transform
yang pada dasarnyafit
diikuti oleh atransform
.Sekarang pertanyaan Anda:
"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 )
The
fit
imputer tidak ada hubungannya denganfit
digunakan dalam pemasangan model. Jadi menggunakan imputerfit
pada data pelatihan hanya menghitung rata-rata setiap kolom data pelatihan. Menggunakantransform
data uji kemudian menggantikan nilai data uji yang hilang dengan cara yang dihitung dari data pelatihan.sumber
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.
sumber
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:
sumber
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.
sumber
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 normalV1 V2 V1 V2
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
sumber
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.
Fungsi transformasi menerapkan nilai-nilai parameter pada data aktual dan memberikan nilai normal.
Fungsi fit_transform () melakukan keduanya dalam langkah yang sama.
Perhatikan bahwa nilai yang sama didapat apakah kita tampil dalam 2 langkah atau dalam satu langkah.
sumber
"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 :-)
sumber