Scikit-learn'da bir kodlu vs kukla kodlama


50

Kategorik değişkenleri kodlamanın iki farklı yolu vardır. Diyelim ki bir kategorik değişken n değerine sahiptir. Tek sıcak kodlama onu n değişkenine, kukla kodlama onu n-1 değişkenine dönüştürür . Eğer her birinin n değeri olan k kategorik değişkenleri varsa . Bir sıcak kodlama kn değişkenleriyle sona ererken , yapay kodlama kn-k değişkenleriyle sona erer .

Tek bir sıcak kodlama için, kesişmenin modelin ses çıkarmamasına neden olan eşliklilik sorununa yol açabileceğini duydum. Birisi " kukla değişken tuzağı " diyor.

Sorularım:

  1. Scikit-learn'ın doğrusal regresyon modeli, kullanıcıların müdahaleyi devre dışı bırakmalarını sağlar. Yani bir sıcak kodlama için her zaman fit_intercept = False ayarlamalı mıyım? Sahte kodlama için, fit_intercept her zaman True olarak ayarlanmalı mı? Web sitesinde herhangi bir "uyarı" görmüyorum.

  2. Tek sıcak kodlama daha fazla değişken ürettiğinden, sahte kodlamadan daha fazla serbestlik derecesine sahip midir?

Yanıtlar:


35

Scikit-learn'ın doğrusal regresyon modeli, kullanıcıların müdahaleyi devre dışı bırakmalarını sağlar. Yani bir sıcak kodlama için her zaman fit_intercept = False ayarlamalı mıyım? Sahte kodlama için, fit_intercept her zaman True olarak ayarlanmalı mı? Web sitesinde herhangi bir "uyarı" görmüyorum.

Tek sıcak kodlamaya sahip düzensiz bir doğrusal model için, evet, kesişimi yanlış olacak şekilde ayarlamanız veya mükemmel bir eşzamanlılığa neden olmanız gerekir. sklearnayrıca bir sırt büzülme cezasına da izin verir ve bu durumda gerekli değildir ve aslında hem kesişimi hem de tüm seviyeleri dahil etmelisiniz. Kukla kodlama için, bir kesenini içermelidir sürece sen yolunu kesmek sıfır olduğu durumda tüm değişkenleri standart hale getirdik.

Tek sıcak kodlama daha fazla değişken ürettiğinden, sahte kodlamadan daha fazla serbestlik derecesine sahip midir?

Kesişme, ek bir serbestlik derecesidir, bu yüzden iyi tanımlanmış bir modelde hepsi eşittir.

İkincisi için, eğer k kategorik değişkenler varsa? k değişkenleri yapay kodlamada kaldırılır. Özgürlük derecesi hala aynı mıdır?

x1,x2,,xn

x1+x2++xn=1

x

x1+x2++xk=1

ve böylece doğrusal bir bağımlılık yarattınız

x1+x2+xnx1x2xk=0

Yani gerekir ikinci değişkendeki bir seviyeye dışarıda bırakın ve her şey hatları yukarı düzgün.

Diyelim ki her biri 4 seviyeli 3 kategorik değişkenim var. Sahte kodlamada, 3 * 4-3 = 9 değişken bir kesişme ile oluşturulur. Tek kodlamalı kodlamada, 3 * 4 = 12 değişken bir engellemeden oluşturulmuştur. Doğrumuyum?

3×4=12


Teşekkürler. İkincisi için, eğer k kategorik değişkenler varsa? k değişkenleri kukla kodlamada kaldırılır. Özgürlük derecesi hala aynı mıdır?
Munichong

@ChongWang Yorumuma cevabımı yanıt yazdım.
Matthew Drury

Üzgünüm, burada biraz kayboluyorum. Diyelim ki her biri 4 seviyeli 3 kategorik değişkenim var. Sahte kodlamada, 3 * 4-3 = 9 değişken bir kesişme ile oluşturulur. Tek kodlamalı kodlamada, 3 * 4 = 12 değişken bir engellemeden oluşturulmuştur. Doğrumuyum? Yani burada kukla kodlamanın DF'si 9-1 iken, bir sıcak kodlamanın DF'si 12'dir. Doğru muyum?
Munichong

@ ChongWang Yine düzenlendi.
Matthew Drury

@MatthewDrury Sklearn'deki linear_model ile aynı problemim var. Sahte kodlamanın ardından Karar Ağacı ve KNN düzgün çalışır ancak Doğrusal Regresyon tekilliğe düşer. Cevabınızdan "ikinci değişkenden bir seviye kaldırmam" gerektiğini anlıyorum ama pratikte bunun ne anlama geldiğini bilmiyorum? Örneğin, 3 sayısal özelliğe ve 3 kategorik (üretici, model ve fuel_type) sahibim. Bir üretici n model alabildiğinden, model üreticiye doğal olarak bağlıdır. Öyleyse, Doğrusal Regresyon kullanmak istersem bu tür ortak senaryoda nasıl ilerleyebilirim?
Harvey,
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.