Saya membaca dokumentasi resmi scikit-belajar belajar setelah membaca buku tentang ML dan menemukan hal-hal berikut:
Dalam Dokumentasi itu diberikan tentang sklearn.preprocessing.OrdinalEncoder()
sedangkan dalam buku itu diberikan tentang sklearn.preprocessing.LabelEncoder()
, ketika saya memeriksa fungsionalitasnya itu tampak sama bagi saya. Bisakah Seseorang tolong beri tahu saya perbedaan antara keduanya?
sumber
OrdinalEncoder
?LabelEncoder
tidak dimaksudkan untuk digunakan pada fitur, hanya pada target pembelajaran yang diawasi."Adapun perbedaan
OrdinalEncoder
danLabelEncoder
implementasi , jawaban yang diterima menyebutkan bentuk data: (OrdinalEncoder
untuk data 2D; bentuk(n_samples, n_features)
,LabelEncoder
untuk data 1D: untuk bentuk(n_samples,)
)Karena itulah a
OrdinalEncoder
akan mendapatkan kesalahan:... jika mencoba menyesuaikan data 1D:
OrdinalEncoder().fit(['a','b'])
Namun, perbedaan lain antara pembuat enkode adalah nama parameter yang dipelajari ;
LabelEncoder
belajarclasses_
OrdinalEncoder
belajarcategories_
Perhatikan perbedaan dalam fitting
LabelEncoder
vsOrdinalEncoder
, dan perbedaan dalam nilai-nilai dari parameter yang dipelajari ini.LabelEncoder.classes_
adalah 1D, sedangkanOrdinalEncoder.categories_
2D.Penyandi lain yang bekerja dalam 2D, termasuk
OneHotEncoder
, juga menggunakan properticategories_
Info lebih lanjut di sini tentang dtype
<U1
(little-endian, Unicode, 1 byte; yaitu string dengan panjang 1)EDIT
Dalam komentar atas jawaban saya, Piotr tidak setuju ; Piotr menunjukkan perbedaan antara pengodean ordinal dan pengodean label secara lebih umum.
cold
,warm
,hot
);blonde
,brunette
)Ini adalah konsep yang hebat, tetapi pertanyaan ini menanyakan tentang
sklearn
kelas / implementasi. Sangat menarik untuk melihat bagaimana implementasi tidak sesuai dengan konsep; khususnyaOrdinalEncoder
; khusus bagaimana Anda harus melakukan penyandian ordinal sendiri .Adapun implementasi sepertinya
LabelEncoder
danOrdinalEncoder
memiliki perilaku yang konsisten sejauh bilangan bulat yang dipilih . Mereka berdua bilangan bulat menetapkan berdasarkan urutan abjad . Sebagai contoh:Perhatikan bagaimana kedua enkode menetapkan bilangan bulat dalam urutan abjad 'c' <'h' <'w'.
Tetapi bagian ini penting: Perhatikan bagaimana tidak ada pembuat kode yang mendapatkan urutan "nyata" yang benar (yaitu urutan nyata harus mencerminkan suhu, di mana urutannya 'dingin' <'hangat' <'panas'); berdasarkan urutan "nyata", nilainya
'warm'
akan diberi bilangan bulat 1.Dalam posting blog yang dirujuk oleh Piotr , penulis bahkan tidak menggunakan
OrdinalEncoder()
. Untuk mencapai penyandian ordinal , penulis melakukannya secara manual: memetakan setiap suhu ke integer orde "nyata", menggunakan kamus seperti{'cold':0, 'warm':1, 'hot':2}
:Dengan kata lain, jika Anda bertanya-tanya apakah akan digunakan
OrdinalEncoder
, harap dicatatOrdinalEncoder
mungkin sebenarnya tidak memberikan "penyandian ordinal" seperti yang Anda harapkan !sumber
Anda menggunakan pengodean ordinal untuk menjaga urutan data kategorikal yaitu dingin, hangat, panas; rendah sedang Tinggi. Anda menggunakan pengkodean label atau satu hot untuk data kategorikal, di mana tidak ada urutan dalam data yaitu anjing, kucing, paus. Periksa pos ini di media. Ini menjelaskan konsep-konsep ini dengan baik.
sumber