機(jī)器學(xué)習(xí)--有監(jiān)督--回歸正則化(嶺回歸與lasso)

當(dāng)進(jìn)行線性回歸擬合,有非常多特征變量(features)時(shí)腮介,不僅會(huì)極大增加模型復(fù)雜度续搀,造成對(duì)于訓(xùn)練集的過(guò)擬合,從而降低泛化能力坎炼;此外也增加了變量間共線性的可能(multicollinearity)愧膀,使模型的系數(shù)難以解釋。
regularization正則化是一種防止過(guò)擬合的方法谣光,經(jīng)常與線性回歸配合使用檩淋,嶺回歸lasso回歸便是其中兩種常見(jiàn)的形式。

1萄金、回歸正則化的簡(jiǎn)單理解

  • 當(dāng)有非常多的特征變量時(shí)蟀悦,回歸模型會(huì)變得很復(fù)雜,具體變現(xiàn)在很多特征變量都有顯著意義的系數(shù)氧敢。不僅造成模型的過(guò)擬合日戈,而且可解釋性也大打折扣。
  • 正則回歸化的假設(shè)前提是:只有其中部分特征變量是對(duì)建模有突出貢獻(xiàn)的孙乖。所以正則化回歸就是盡可能凸顯出部分有價(jià)值變量的地位涎拉,忽略其余的干擾變量。
  • 常見(jiàn)的正則化方法有:(1)Ridge的圆,(2)Lasso (or LASSO),(3)Elastic net (or ENET)

1.1 嶺回歸

  • 參數(shù)調(diào)整:λ 值越大半火,對(duì)系數(shù)的抑制越高(越接近0)
  • 特點(diǎn):會(huì)保留所有的特征變量越妈,即系數(shù)只會(huì)趨近于0,而不會(huì)變成0(0則意味著丟棄該變量)

1.2 lasso回歸

  • 參數(shù)調(diào)整:同樣λ 值越大钮糖,對(duì)系數(shù)的抑制越高(直至為0)
  • 特點(diǎn):隨著λ 的增大梅掠,會(huì)刪除“干擾”變量,保量有顯著意義的變量店归,達(dá)到特征選擇的目的阎抒。

1.3 Elastic nets

  • 本質(zhì)為嶺回歸與lasso回歸的結(jié)合。
  • 參數(shù)調(diào)整:α設(shè)置嶺回歸與lasso回歸的混合比例消痛,λ 值同樣設(shè)置參數(shù)抑制程度且叁。

2、R代碼實(shí)操

R包與相關(guān)函數(shù)
  • 如下所示:主要使用glmnet::glmnet()秩伞,其中alpha參數(shù)為1時(shí)(default)逞带,為lasso回歸欺矫;為0時(shí),為嶺回歸展氓;為0~1中間值時(shí)穆趴,為Elastic nets
  • 而關(guān)于λ參數(shù)調(diào)整,會(huì)自動(dòng)遍歷100個(gè)值遇汞,從中選出最合適的未妹。
library(glmnet)
glmnet(
  x = X,
  y = Y,
  alpha = 1
)
示例數(shù)據(jù)
ames <- AmesHousing::make_ames()
dim(ames)
set.seed(123)
library(rsample)
split <- initial_split(ames, prop = 0.7, 
                       strata = "Sale_Price")
ames_train  <- training(split)
# [1] 2049   81
ames_test   <- testing(split)
# [1] 881  81

# Create training feature matrices
# we use model.matrix(...)[, -1] to discard the intercept
X <- model.matrix(Sale_Price ~ ., ames_train)[, -1]
# transform y with log transformation
Y <- log(ames_train$Sale_Price)

parametric models such as regularized regression are sensitive to skewed response values so transforming can often improve predictive performance.

2.1 嶺回歸

Step1:初步建模,觀察不同λ 值對(duì)應(yīng)的參數(shù)值
ridge <- glmnet(x = X, y = Y,
                alpha = 0)

str(ridge$lambda)
# num [1:100] 286 260 237 216 197 ...

#lambda值越小空入,對(duì)參數(shù)的抑制越低
coef(ridge)[c("Latitude", "Overall_QualVery_Excellent"), 100]
# Latitude Overall_QualVery_Excellent 
# 0.60703722                 0.09344684

#lambda值越大络它,對(duì)參數(shù)的抑制越高
coef(ridge)[c("Latitude", "Overall_QualVery_Excellent"), 1]
# Latitude Overall_QualVery_Excellent 
# 6.115930e-36               9.233251e-37

plot(ridge, xvar = "lambda")
Step2:10折交叉驗(yàn)證確認(rèn)最佳的λ
ridge <- cv.glmnet(x = X, y = Y,
                   alpha = 0)
plot(ridge, main = "Ridge penalty\n\n")
  • 如上圖所示繪制出不同log(λ)對(duì)應(yīng)的MSE水平,其中繪制出兩條具有標(biāo)志意義的log(λ):左邊的為MSE最小值的log(λ)执庐,右邊的為據(jù)左邊一個(gè)標(biāo)準(zhǔn)誤距離的log(λ)酪耕。(the with an MSE within one standard error of the minimum MSE.)
# the value with the minimum MSE
ridge$lambda.min
# [1] 0.1525105
ridge$cvm[ridge$lambda == ridge$lambda.min]
min(ridge$cvm) 
# [1] 0.0219778

# the largest value within one standard error of it
ridge$lambda.1se
# [1] 0.6156877
ridge$cvm[ridge$lambda == ridge$lambda.1se]
# [1] 0.0245219
Step3:最后結(jié)合交叉驗(yàn)證得出的最佳λ值,可視化對(duì)應(yīng)的參數(shù)值
ridge <- cv.glmnet(x = X, y = Y,
                   alpha = 0)
ridge_min <- glmnet(x = X, y = Y,
                    alpha = 0)

plot(ridge_min, xvar = "lambda", main = "Ridge penalty\n\n")
abline(v = log(ridge$lambda.min), col = "red", lty = "dashed")
abline(v = log(ridge$lambda.1se), col = "blue", lty = "dashed")

2.2 lasso回歸

Step1:初步建模轨淌,觀察不同λ 值對(duì)應(yīng)的參數(shù)值
lasso <- glmnet(x = X, y = Y,
                alpha = 1)

str(lasso$lambda)
# num [1:96] 0.286 0.26 0.237 0.216 0.197 ...

#lambda值越小迂烁,對(duì)參數(shù)的抑制越低
coef(lasso)[c("Latitude", "Overall_QualVery_Excellent"), 96]
# Latitude Overall_QualVery_Excellent 
# 0.8126079                  0.2222406

#lambda值越大,對(duì)參數(shù)的抑制越高
coef(lasso)[c("Latitude", "Overall_QualVery_Excellent"), 1]
# Latitude Overall_QualVery_Excellent 
# 0                          0

plot(lasso, xvar = "lambda")
Step2:10折交叉驗(yàn)證確認(rèn)最佳的λ
lasso <- cv.glmnet(x = X, y = Y,
                   alpha = 1)
plot(lasso, main = "lasso penalty\n\n")
# the value with the minimum MSE
lasso$lambda.min
# [1] 0.003957686
lasso$cvm[lasso$lambda == lasso$lambda.min]
min(lasso$cvm) 
# [1] 0.0229088

# the largest value within one standard error of it
lasso$lambda.1se
# [1] 0.0110125
lasso$cvm[lasso$lambda == lasso$lambda.1se]
# [1] 0.02566636
Step3:最后結(jié)合交叉驗(yàn)證得出的最佳λ值递鹉,可視化對(duì)應(yīng)的參數(shù)值
lasso <- cv.glmnet(x = X, y = Y,
                   alpha = 1)
lasso_min <- glmnet(x = X, y = Y,
                    alpha = 1)

plot(lasso_min, xvar = "lambda", main = "lasso penalty\n\n")
abline(v = log(lasso$lambda.min), col = "red", lty = "dashed")
abline(v = log(lasso$lambda.1se), col = "blue", lty = "dashed")

Although this lasso model does not offer significant improvement over the ridge model, we get approximately the same accuracy by using only 64 features!

  • 一個(gè)小細(xì)節(jié):因?yàn)橹皩?duì)數(shù)據(jù)處理時(shí)盟步,對(duì)Y響應(yīng)變量進(jìn)行了log轉(zhuǎn)換。所以如果需要和其它類型的模型比較RMSE值時(shí)躏结,需要進(jìn)行轉(zhuǎn)換却盘。
# predict sales price on training data
pred <- predict(lasso, X)
# compute RMSE of transformed predicted
RMSE(exp(pred), exp(Y))
## [1] 34161.13

Elastic Net是通過(guò)調(diào)整α參數(shù),使用嶺回歸與lasso回歸的混合媳拴,進(jìn)行擬合黄橘;可以通過(guò)caret包尋找最合適的比例,就不演示了~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末屈溉,一起剝皮案震驚了整個(gè)濱河市塞关,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌子巾,老刑警劉巖帆赢,帶你破解...
    沈念sama閱讀 211,123評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異线梗,居然都是意外死亡椰于,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門仪搔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)瘾婿,“玉大人,你說(shuō)我怎么就攤上這事”锼” “怎么了孩饼?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,723評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)竹挡。 經(jīng)常有香客問(wèn)我镀娶,道長(zhǎng),這世上最難降的妖魔是什么揪罕? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,357評(píng)論 1 283
  • 正文 為了忘掉前任梯码,我火速辦了婚禮,結(jié)果婚禮上好啰,老公的妹妹穿的比我還像新娘轩娶。我一直安慰自己,他們只是感情好框往,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布鳄抒。 她就那樣靜靜地躺著,像睡著了一般椰弊。 火紅的嫁衣襯著肌膚如雪许溅。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,760評(píng)論 1 289
  • 那天秉版,我揣著相機(jī)與錄音贤重,去河邊找鬼。 笑死清焕,一個(gè)胖子當(dāng)著我的面吹牛并蝗,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播秸妥,決...
    沈念sama閱讀 38,904評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼滚停,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了粥惧?” 一聲冷哼從身側(cè)響起键畴,我...
    開(kāi)封第一講書(shū)人閱讀 37,672評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎影晓,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體檩禾,經(jīng)...
    沈念sama閱讀 44,118評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡挂签,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了盼产。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片饵婆。...
    茶點(diǎn)故事閱讀 38,599評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖戏售,靈堂內(nèi)的尸體忽然破棺而出侨核,到底是詐尸還是另有隱情草穆,我是刑警寧澤,帶...
    沈念sama閱讀 34,264評(píng)論 4 328
  • 正文 年R本政府宣布搓译,位于F島的核電站悲柱,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏些己。R本人自食惡果不足惜豌鸡,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望段标。 院中可真熱鬧涯冠,春花似錦、人聲如沸逼庞。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,731評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)赛糟。三九已至派任,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間虑灰,已是汗流浹背吨瞎。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,956評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留穆咐,地道東北人颤诀。 一個(gè)月前我還...
    沈念sama閱讀 46,286評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像对湃,于是被迫代替她去往敵國(guó)和親崖叫。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容