Perbedaan antara LabelEncoder dan OneHotEncoder di SciKit Learn

Jika Anda baru saja memulai perjalanan Anda dalam pembelajaran mesin, Anda mungkin bingung antara LabelEncoder dan OneHotEncoder . Kedua penyandi adalah bagian dari pustaka Belajar SciKit dengan Python dan keduanya digunakan untuk mengonversi data kategorikal atau tekstual menjadi angka yang paling dimengerti oleh model prediksi kami. Mari kita cari tahu perbedaan antara encoders pada contoh sederhana.




Pengkodean Karakter


Pertama-tama, dokumentasi Belajar SciKit untuk LabelEncoder dapat ditemukan di sini . Sekarang pertimbangkan data berikut:


Data dari SuperDataScience

Dalam contoh ini, kolom pertama (negara) adalah teks lengkap. Seperti yang mungkin sudah Anda ketahui, kami tidak dapat menggunakan teks dalam data untuk melatih model. Karena itu, sebelum kita dapat memulai proses, kita perlu menyiapkan data ini.


Dan untuk mengonversi kategori semacam itu menjadi model data numerik yang dapat dipahami, kami menggunakan kelas LabelEncoder . Jadi, yang perlu kita lakukan untuk mendapatkan atribut untuk kolom pertama adalah mengimpor kelas dari pustaka sklearn , memproses kolom dengan fungsi fit_transform, dan mengganti data teks yang ada dengan yang baru disandikan. Mari kita lihat kodenya.


from sklearn.preprocessing import LabelEncoder labelencoder = LabelEncoder() x[:, 0] = labelencoder.fit_transform(x[:, 0]) 

Diasumsikan bahwa data dalam variabel x . Setelah menjalankan kode di atas, jika Anda memeriksa nilai x , Anda akan melihat bahwa ketiga negara di kolom pertama telah diganti dengan angka 0, 1 dan 2.



Secara umum, ini adalah pengkodean tanda-tanda. Tetapi tergantung pada data, konversi ini menciptakan masalah baru. Kami telah mengonversi sekelompok negara menjadi sejumlah angka. Tapi ini hanya data kategorikal, dan nyatanya tidak ada koneksi antar angka.


Masalahnya di sini adalah, karena ada nomor yang berbeda di kolom yang sama, model akan salah berpikir bahwa data berada dalam urutan khusus - 0 <1 <2 Meskipun ini, tentu saja, tidak demikian. Untuk mengatasi masalah, kami menggunakan OneHotEncoder .




OneHotEncoder


Jika Anda tertarik membaca dokumentasi, Anda dapat menemukannya di sini . Sekarang, seperti yang telah kita bahas, tergantung pada data yang kita miliki, kita mungkin menghadapi situasi di mana, setelah pengkodean atribut, model kita menjadi bingung, dengan anggapan salah bahwa data terhubung oleh urutan atau hierarki yang tidak benar-benar ada. Untuk menghindari ini, kita akan menggunakan OneHotEncoder .


Encoder ini mengambil kolom dengan data kategorikal yang sebelumnya dikodekan ke dalam karakteristik dan membuat beberapa kolom baru untuk itu. Angka diganti dengan angka satu dan nol, tergantung kolom mana yang nilainya melekat. Dalam contoh kami, kami mendapatkan tiga kolom baru, satu untuk setiap negara - Perancis, Jerman, dan Spanyol.


Untuk baris yang kolom pertamanya adalah Prancis, kolom "Perancis" akan ditetapkan ke "1" dan dua kolom lainnya menjadi "0". Demikian pula, untuk baris yang kolom pertama adalah Jerman, kolom Jerman akan memiliki "1" dan dua kolom lainnya akan memiliki "0".


Ini dilakukan dengan sangat sederhana:


 from sklearn.preprocessing import OneHotEncoder onehotencoder = OneHotEncoder(categorical_features = [0]) x = onehotencoder.fit_transform(x).toarray() 

Dalam konstruktor, kami menunjukkan kolom mana yang harus diproses oleh OneHotEncoder , dalam kasus kami - [0] . Kemudian mentransformasikan array x menggunakan fungsi fit_transform dari objek encoder yang baru saja Anda buat. Itu saja, sekarang kami memiliki tiga kolom baru dalam dataset:



Seperti yang Anda lihat, alih-alih satu kolom dengan negara, kami punya tiga kolom baru yang menyandikan negara ini.


Ini adalah perbedaan dari LabelEncoder dan OneHotEncoder .

Source: https://habr.com/ru/post/id456294/


All Articles