Pengkodean satu-panas vs dummy di Scikit-learn

50

Ada dua cara berbeda untuk menyandikan variabel kategori. Katakanlah, satu variabel kategori memiliki nilai n . Pengkodean satu-panas mengkonversinya menjadi n variabel, sedangkan pengkodean dummy mengubahnya menjadi variabel n-1 . Jika kita memiliki variabel k kategori, masing-masing memiliki nilai n . Satu pengkodean panas berakhir dengan variabel kn , sedangkan pengkodean dummy berakhir dengan variabel kn-k .

Saya mendengar bahwa untuk pengodean satu-panas, intersep dapat menyebabkan masalah collinearity, yang membuat model tidak terdengar. Seseorang menyebutnya " dummy variable trap ".

Pertanyaan saya:

  1. Model regresi linier Scikit-learn memungkinkan pengguna untuk menonaktifkan intersep. Jadi untuk pengkodean satu-panas, haruskah saya selalu mengatur fit_intercept = Salah? Untuk pengkodean dummy, fit_intercept harus selalu disetel ke True? Saya tidak melihat "peringatan" di situs web.

  2. Karena pengodean satu-panas menghasilkan lebih banyak variabel, apakah ia memiliki tingkat kebebasan lebih dari pengodean dummy?

Munichong
sumber

Jawaban:

35

Model regresi linier Scikit-learn memungkinkan pengguna untuk menonaktifkan intersep. Jadi untuk pengkodean satu-panas, haruskah saya selalu mengatur fit_intercept = Salah? Untuk pengkodean dummy, fit_intercept harus selalu disetel ke True? Saya tidak melihat "peringatan" di situs web.

Untuk model linier yang tidak diregulasi dengan pengkodean satu-panas, ya, Anda harus mengatur intersep menjadi salah atau menggunakan collinearity sempurna. sklearnjuga memungkinkan untuk hukuman penyusutan punggungan, dan dalam hal itu tidak perlu, dan pada kenyataannya Anda harus menyertakan intersep dan semua level. Untuk penyandian dummy, Anda harus menyertakan intersep, kecuali jika Anda telah menstandarkan semua variabel Anda, dalam hal ini intersepnya nol.

Karena pengodean satu-panas menghasilkan lebih banyak variabel, apakah ia memiliki tingkat kebebasan lebih dari pengodean dummy?

Pencegatan adalah tingkat kebebasan tambahan, jadi dalam model yang ditentukan dengan baik semuanya sama.

Untuk yang kedua, bagaimana jika ada variabel k kategori? variabel k dihapus dalam pengkodean dummy. Apakah derajat kebebasannya masih sama?

Anda tidak dapat memasukkan model di mana Anda menggunakan semua level dari kedua variabel kategori, intersep atau tidak. Karena, begitu Anda memiliki satu-hot-encoded semua level dalam satu variabel dalam model, katakan dengan variabel biner , maka Anda memiliki kombinasi linear dari prediktor yang sama dengan vektor konstanx1,x2,,xn

x1+x2++xn=1

Jika Anda kemudian mencoba memasukkan semua level kategori lain ke dalam model, Anda berakhir dengan kombinasi linier yang sama dengan vektor konstanx

x1+x2++xk=1

dan Anda telah membuat ketergantungan linear

x1+x2+xnx1x2xk=0

Jadi, Anda harus meninggalkan tingkat dalam variabel kedua, dan semuanya berbaris dengan benar.

Katakanlah, saya memiliki 3 variabel kategori, yang masing-masing memiliki 4 level. Dalam pengkodean dummy, 3 * 4-3 = 9 variabel dibangun dengan satu intersep. Dalam pengkodean satu-panas, 3 * 4 = 12 variabel dibangun tanpa intersep. Apakah saya benar?

Hal kedua sebenarnya tidak berhasil. The kolom desain matrix yang Anda buat akan tunggal. Anda perlu menghapus tiga kolom, satu dari masing-masing dari tiga pengkodean kategorikal yang berbeda, untuk memulihkan non-singularitas desain Anda.3×4=12

Matthew Drury
sumber
Terima kasih. Untuk yang kedua, bagaimana jika ada variabel k kategori? variabel k dihapus dalam pengkodean dummy. Apakah derajat kebebasannya masih sama?
Munichong
@ Wangwang Saya mengedit jawaban atas komentar Anda menjadi jawaban saya.
Matthew Drury
Maaf, saya agak tersesat di sini. Katakanlah, saya memiliki 3 variabel kategori, yang masing-masing memiliki 4 level. Dalam pengkodean dummy, 3 * 4-3 = 9 variabel dibangun dengan satu intersep. Dalam pengkodean satu-panas, 3 * 4 = 12 variabel dibangun tanpa intersep. Apakah saya benar? Jadi di sini DF pengodean dummy adalah 9-1 sedangkan DF pengodean satu-panas adalah 12. Apakah saya benar?
Munichong
@ChongWang Diedit lagi.
Matthew Drury
@ MatthewDrury Saya punya masalah yang sama dengan linear_model di sklearn. Setelah dummy encoding, Decision Tree dan KNN berfungsi dengan baik tetapi Regresi Linier jatuh dalam singularitas. Saya mengerti dari jawaban Anda bahwa saya harus menghapus "level dari variabel kedua" tetapi saya tidak tahu apa artinya secara praktis? Misalnya saya punya 3 fitur numerik dan 3 kategori (pabrikan, model, dan fuel_type). Model secara alami bergantung pada produsen karena satu produsen dapat memiliki model. Jadi bagaimana cara melanjutkan dalam skenario umum semacam ini jika saya ingin menggunakan Regresi Linier?
Harvey