嶺回歸應該使用一種熱編碼還是虛擬變量?
對於預測變量是單個分類變量的回歸問題 $ q $ 類別,嶺回歸可以被認為是混合模型的最佳線性無偏預測器(BLUP)
$$ \mathbf{y} = \mathbf{X} \beta +\mathbf{Zu}+ \boldsymbol{\epsilon} $$
在這種情況下, $ \mathbf{X} $ 只是一列 1 和 $ \beta $ 是截距。 $ \mathbf{Z} $ 是編碼的設計矩陣 $ q $ 隨機效應。在這種情況下,如果我們將嶺參數設置為 $ \lambda = \sigma_{\epsilon}^2 / \sigma^2 $ . 這裡, $ \sigma_{\epsilon} $ 是方差 $ \boldsymbol{\epsilon} $ , 和 $ \sigma $ 是方差 $ \mathbf{u} $ (這裡,假設隨機效應是各向同性的)。有人告訴我,這相當於擬合特徵矩陣是單熱編碼的 Ridge 模型(也就是說,所有 $ q $ 類別顯示為類別的列)。
提出了一些令人信服的論點,我將在此處用python代碼進行總結。它們本身就是一篇名為BLUP 是一件好事 隨機效應估計的論文的摘要。. 在這裡,模擬了 3 個組。4 個 Ridge 模型擬合:3 個每個組輪流作為參考組,一個所有組都出現在特徵矩陣中。下面顯示的是預測圖
import numpy as np import pandas as pd import sklearn as sk from sklearn.linear_model import LinearRegression, Ridge import seaborn as sb import matplotlib.pyplot as plt D=pd.DataFrame({'group':[1,1,1,1,1,2,2,2,2,2,3,3,3,3,3],'y':[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]}) # Now let's dummy code the group in four different ways X = pd.get_dummies(D['group'],drop_first=False).values # Full dummy code with a dummy variable for each group X1 = X[:,1:3] # Drop the first group X2 = X[:,[0,2]] # Drop the second group X3 = X[:,:2] # Drop the last group # Now let's use the different dummy coding schemes for Ridge regression, using a Ridge coefficient of 1 # First the first one: R1 = Ridge(alpha = 1) R1.fit(X1,D['y']) ypred_R1=R1.predict(Xpred1) ypred_R1 >>> array([ 4.875 , 7.47916667, 11.64583333]) # Then dropping the middle group R2 = Ridge(alpha = 1) R2.fit(X2,D['y']) ypred_R2=R2.predict(Xpred2) ypred_R2 >>> array([ 3.83333333, 8. , 12.16666667]) # And finally dropping the third group R3 = Ridge(alpha = 1) R3.fit(X3,D['y']) ypred_R3=R3.predict(Xpred3) ypred_R3 >>>array([ 4.35416667, 8.52083333, 11.125 ]) # Now we have 3 regressors, instead of two. To achieve a similar amount of shrinkage, we need to # therefor increase our Ridge coefficient a bit. R = Ridge(alpha = 3, fit_intercept = True) R.fit(X,D['y']) ypred_R=R.predict(Xpred) ypred_R >>>array([ 4.875, 8. , 11.125])
事實證明,使一個組成為參考組對 $ \mathbf{u} $ . 這是當我們刪除一個變量以用作參考時的協方差結構圖
將此與模型假設的真實協方差結構與特徵矩陣中的所有 3 個預測變量進行比較
問題
我以前從未見過將所有類別保留在 Ridge 回歸中的建議。事實上,如果我們對懲罰進行交叉驗證,那麼由此產生的協方差結構似乎不值得由共線性引起的不穩定性。
所有類別都顯示為二元指標的脊模型是否比將類別吸收到截距項中的脊模型表現更好(即損失更低)?如果是這樣,為什麼?一些(不是很嚴格的)實驗似乎暗示答案是否定的,但我很想听聽其他數據科學家和統計學家的觀點。
此外,如果目標是預測,那麼通過將一組作為參考類別對數據施加錯誤的協方差結構的一般後果是什麼?
在擬合嶺模型時我們是否應該包括所有類別?
這個問題已經被讚賞了一段時間。參見回歸建模策略第 2 版第 210 頁的 Harrell :
對於具有 $ c $ 水平,嶺回歸的用戶通常不會認識到收縮量和擬合模型的預測值取決於設計矩陣的編碼方式。例如,在構建虛擬變量時,根據選擇哪個單元格作為參考單元格,將得到不同的預測。
然後,他引用了Verweij 和 Van Houwelingen在 1994 年使用的方法,在 Cox 回歸中的懲罰可能性,醫學統計 13,2427-2436。他們的方法是使用適用於所有級別的無序分類預測器的懲罰函數。和 $ l(\beta) $ 係數值向量處的部分對數似然 $ \beta $ ,他們以權重因子定義了懲罰部分對數似然 $ \lambda $ 作為:
$$ l^{\lambda}(\beta) = l(\beta) - \frac{1}{2} \lambda p(\beta) $$
在哪裡 $ p(\beta) $ 是懲罰函數。在給定的值 $ \lambda $ , 係數估計 $ b^{\lambda} $ 被選擇來最大化這個懲罰的部分可能性。
他們定義了無序分類協變量的懲罰函數 $ c $ 級別為:
$$ p_0(\beta) = \sum_{j=1}^c \left( \beta_j - \bar \beta \right)^2 $$
在哪裡 $ \bar \beta $ 是類別的各個回歸係數的平均值。“這個函數懲罰 $ \beta_j $ 離均值更遠的。”它還刪除了對參考類別的特殊處理 $ 1 $ 認為有 $ \beta_1=0 $ . 在使用 49 級分類協變量的模型中說明他們的懲罰部分似然方法時,他們將係數限制為總和為零,然後優化以選擇 $ \lambda $ 並生成懲罰係數估計。
正如OP和另一個答案所表明的那樣,懲罰必須以某種方式涉及多級分類協變量的所有級別。One-hot 編碼是一種方法。這種替代方法顯示了一種使用虛擬編碼的方法,其方式似乎更加強調單個係數值與同一協變量內係數平均值的偏差,而不是它們與不相關協變量係數的差異。