能否解釋一下dummy encoding和one-hot encoding的具體使用和對自由度的影響?

在做regression的時候,經常會有多個categorical變數。可以用dummy encoding和one-hot encoding來處理。簡單來說,dummy encoding就是把一個有h個level的變數變成h-1個變數,比如3個level的變數就表示成成10,01,或00。而one-hot encoding就是用h個變數來代表這h個level,比如3個level的變數就表示成100,010,001。

現在假設一共有3個categorical變數,每個變數都有4個level。現在需要建立regression。如果用dummy的話,就轉換成3*4-4=8個變數,外加一個intercept。如果用one-hot的話,就轉換成3*4=12個變數,不加intercept(防止dummy variable trap)。以上是我個人的理解,有錯誤的話請指正。

那這樣的話,兩種方法產生的最終輸入變數數量不同,這會影響最終的degree of freedom嗎?


如果你不使用regularization,那麼one-hot encoding的模型會有多餘的自由度。這個自由度體現在你可以把某一個分類型變數各個值對應的權重都增加某一數值,同時把另一個分類型變數各個值對應的權重都減小某一數值,而模型不變。在dummy encoding中,這些多餘的自由度都被統攝到intercept里去了。這麼看來,dummy encoding更好一些。

如果你使用regularization,那麼regularization就能夠處理這些多餘的自由度。此時,我覺得用one-hot encoding更好,因為每個分類型變數的各個值的地位就是對等的了。


&> library(CatEncoders)
&>
&> X1 &<- matrix(c(0, 1, 0, 1, 0, 1, 2, 0, 3, 0, 1, 2),c(4,3),byrow=FALSE) &> print(X1)
[,1] [,2] [,3]
[1,] 0 0 3
[2,] 1 1 0
[3,] 0 2 1
[4,] 1 0 2
&> oenc &<- OneHotEncoder.fit(X1) &> z &<- transform(oenc,X1,sparse=FALSE) &> # return a dense matrix
&> print(z)
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9]
[1,] 1 0 1 0 0 0 0 0 1
[2,] 0 1 0 1 0 1 0 0 0
[3,] 1 0 0 0 1 0 1 0 0
[4,] 0 1 1 0 0 0 0 1 0


考慮一個極端情況,最簡單的,單個連續變數的線性回歸,y = a x + b

這裡 x 雖然是連續變數,但也不能阻止我們故意用 one-hot encoding 來表示它。比如,假設輸入數據 x 一共包含 n 個數,那可以把這 n 個數表達為 n x n 的單位矩陣。這樣的話,顯然可以直接精確擬合輸入的 y,也就是過擬合了。本來只有 a 和 b 兩個參數,現在變成了 n 或 n+1 個參數。自由度的增多伴隨著的是參數的增多,所以更容易過擬合。

繼續這個假想的例子,為了減少過擬合,我們可以減少 one-hot encoding 的自由度個數,換言之,我們不用 n * n 矩陣,而用較小的矩陣;這樣就會導致不同的 x 的值對應相同的編碼。這樣做實際上是在用分段常數函數來擬合。

還是這個例子,我們也可以故意忘記 輸入數據 x 的真實值,而把它們排序後用 1 到 n 的序號來代替,然後試圖擬合這些序號與 y 之間的關係。這相當於對 x 做了一個奇怪的單調的非線性變換。但我們可以預期,雖然這麼做會讓本來的 x 與 y 的線性關係變成一種很彆扭的關係,但一般不至於導致過擬合。


推薦閱讀:

牛津大學的計算機系(Department of Computer Science)實力如何?
請問有沒有哪位大神使用機器學習方法進行量化策略的回測,結果怎麼樣?
理論、演算法、工具、實踐在機器學習/DM工程師的學習成長過程不同階段分別應占什麼比例?扮演什麼角色?
演算法研究屬於數學專業還是計算機專業?
當初的生物熱,和如今的全民CS全民AI,讓你想到了什麼?

TAG:機器學習 | 數據統計 | 統計 | 回歸分析 | 線性回歸 |