R語言中的嶺回歸、套索回歸、主成分回歸:線性模型選擇和正則化
原文鏈接:http://tecdat.cn/?p=9913
?
概述和定義
在本文中,我們將考慮一些線性模型的替代擬合方法,除了通常的??普通最小二乘法。這些替代方法有時可以提供更好的預(yù)測準(zhǔn)確性和模型可解釋性。
預(yù)測精度:線性,普通最小二乘估計(jì)將具有低偏差。OLS也表現(xiàn)良好,??n??>>??p。但是,如果??n??不比p大很多? ,則擬合可能會有很多可變性,從而導(dǎo)致擬合過度和/或預(yù)測不佳。如果??p??>??n,則不再有唯一的最小二乘估計(jì),并且根本無法使用該方法。
這個問題是維數(shù)詛咒的另一個方面? 。當(dāng)??p??開始變大時,觀測值??x??開始變得比附近的觀測值更接近類別之間的邊界,這給預(yù)測帶來了主要問題。此外,對于許多??p,訓(xùn)練樣本經(jīng)常是稀疏的,從而難以識別趨勢和進(jìn)行預(yù)測。
通過??限制??和??縮小??估計(jì)的系數(shù),我們通常可以大大減少方差,因?yàn)槠畹脑黾涌珊雎圆挥?jì),這通常會導(dǎo)致準(zhǔn)確性的顯著提高。
模型的可解釋性:不相關(guān)的變量導(dǎo)致結(jié)果模型不必要的復(fù)雜性。通過刪除它們(設(shè)置系數(shù)= 0),我們得到了一個更容易解釋的模型。但是,使用OLS使得系數(shù)極不可能為零。
子集選擇:我們使用子集特征的最小二乘擬合模型。
盡管我們討論了這些技術(shù)在線性模型中的應(yīng)用,但它們也適用于其他方法,例如分類。
詳細(xì)方法
子集選擇
最佳子集選擇
在這里,我們?yōu)閜個??預(yù)測變量的每種可能組合擬合單獨(dú)的OLS回歸? ,然后查看結(jié)果模型擬合。這種方法的問題在于,??最佳模型??隱藏在2 ^?p種??可能性之內(nèi)。該算法分為兩個階段。(1)擬合所有包含k個預(yù)測變量的模型? ,其中??k??是模型的最大長度。(2)使用交叉驗(yàn)證的預(yù)測誤差選擇一個模型。下面將討論更具體的預(yù)測誤差方法,例如AIC和BIC。
這適用于其他類型的模型選擇,例如邏輯回歸,但我們根據(jù)選擇選擇的得分會有所變化。對于邏輯回歸,我們將使用??偏差??而不是RSS和R ^ 2。
?
選擇最佳模型
上面提到的三種算法中的每一種都需要我們手動確定哪種模型效果最好。如前所述,使用訓(xùn)練誤差時,具有最多預(yù)測值的模型通常具有最小的RSS和最大的R ^ 2。為了選擇測試??誤差最大的模型? ,我們需要估計(jì)測試誤差。有兩種計(jì)算測試誤差的方法。
?通過對訓(xùn)練誤差進(jìn)行和調(diào)整來間接估計(jì)測試誤差,以解決過度擬合的偏差。
?使用驗(yàn)證集或交叉驗(yàn)證方法直接估計(jì)測試錯誤。
?
驗(yàn)證和交叉驗(yàn)證
通常,交叉驗(yàn)證技術(shù)是對測試的更直接估計(jì),并且對基礎(chǔ)模型的假設(shè)更少。此外,它可以用于更廣泛的模型類型選擇中。
?
嶺回歸
嶺回歸與最小二乘相似,不同之處在于系數(shù)是通過最小化略有不同的數(shù)量來估算的。像OLS一樣,Ridge回歸尋求降低RSS的系數(shù)估計(jì),但是當(dāng)系數(shù)接近于零時,它們也會產(chǎn)生收縮損失。這種損失的作用是將系數(shù)估計(jì)值縮小到零。參數(shù)λ控制收縮的影響。λ= 0的行為與OLS回歸完全相同。當(dāng)然,選擇一個好的λ值至關(guān)重要,應(yīng)該使用交叉驗(yàn)證進(jìn)行選擇。嶺回歸的要求是預(yù)測變量??X的??中心定為?mean = 0
,因此必須事先對數(shù)據(jù)進(jìn)行標(biāo)準(zhǔn)化。
?
為什么嶺回歸比最小二乘更好?
優(yōu)勢在偏差方差中顯而易見? 。隨著λ的增加,嶺回歸擬合的靈活性降低。這導(dǎo)致方差減小,偏差增加較小。固定的OLS回歸具有較高的方差,但沒有偏差。但是,最低的測試MSE往往發(fā)生在方差和偏差之間的交點(diǎn)處。因此,通過適當(dāng)?shù)卣{(diào)整λ獲取較少的方差,我們可以找到較低的潛在MSE。
在最小二乘估計(jì)具有高方差的情況下,嶺回歸最有效。Ridge回歸比任何子集方法都具有更高的計(jì)算效率? ,因?yàn)榭梢酝瑫r求解所有λ值。
套索Lasso
嶺回歸具有至少一個缺點(diǎn)。它包括?最終模型中的所有??p個預(yù)測變量。懲罰項(xiàng)將使其中許多接近零,但永遠(yuǎn)不會??精確??為零。對于預(yù)測準(zhǔn)確性而言,這通常不是問題,但會使模型更難以解釋結(jié)果。Lasso克服了這個缺點(diǎn),并且能夠?qū)??足夠小地強(qiáng)制將某些系數(shù)設(shè)為零? 。由于??s??= 1導(dǎo)致常規(guī)的OLS回歸,因此當(dāng)??s??接近0時,系數(shù)將縮小為零。因此,套索回歸也執(zhí)行變量選擇。
?
降維方法
到目前為止,我們所討論的方法已經(jīng)通過使用原始變量的子集或?qū)⑵湎禂?shù)縮小到零來控制了方差?,F(xiàn)在,我們探索一類模型,?這些模型可以??轉(zhuǎn)換預(yù)測變量,然后使用轉(zhuǎn)換后的變量擬合最小二乘模型。降維將估計(jì)??p??+1個系數(shù)的問題簡化為M??+1個系數(shù)的簡單問題? ,其中??M??<??p。這項(xiàng)任務(wù)的兩種方法是??主成分回歸??和??偏最小二乘。
主成分回歸(PCA)
可以將PCA描述為一種從大量變量中導(dǎo)出低維特征集的方法。
在回歸中,我們構(gòu)造??M個??主成分,然后在使用最小二乘的線性回歸中將這些成分用作預(yù)測變量。通常,與普通最小二乘法相比,我們有可能擬合出更好的模型,因?yàn)槲覀兛梢詼p少過度擬合的影響。
?
偏最小二乘
我們上面描述的PCR方法涉及鑒定?最能代表預(yù)測變量的X的線性組合? 。
PLS通過對與因變量最密切相關(guān)的變量賦予更高的權(quán)重來實(shí)現(xiàn)此目的。
實(shí)際上,PLS的性能不比嶺回歸或PCR好。這是因?yàn)榧词筆LS可以減少偏差,它也有可能增加方差,因此總體收益并沒有真正的區(qū)別。
?
解釋高維結(jié)果
我們必須始終謹(jǐn)慎對待報告獲得的模型結(jié)果的方式,尤其是在高維設(shè)置中。在這種情況下,多重共線性問題非常嚴(yán)重,因?yàn)槟P椭械娜魏巫兞慷伎梢詫憺槟P椭兴衅渌兞康木€性組合。
?
例子
子集選擇方法
最佳子集選擇
我們希望根據(jù)上一年的各種統(tǒng)計(jì)數(shù)據(jù)來預(yù)測棒球運(yùn)動員Salary
?的情況? 。
library(ISLR)
attach(Hitters)
names(Hitters)
## ?[1] "AtBat" ? ? "Hits" ? ? ?"HmRun" ? ? "Runs" ? ? ?"RBI"
## ?[6] "Walks" ? ? "Years" ? ? "CAtBat" ? ?"CHits" ? ? "CHmRun"
## [11] "CRuns" ? ? "CRBI" ? ? ?"CWalks" ? ?"League" ? ?"Division"
## [16] "PutOuts" ? "Assists" ? "Errors" ? ?"Salary" ? ?"NewLeague"
dim(Hitters)
## [1] 322 ?20
str(Hitters)
## 'data.frame': ? ?322 obs. of ?20 variables:
## ?$ AtBat ? ?: int ?293 315 479 496 321 594 185 298 323 401 ...
## ?$ Hits ? ? : int ?66 81 130 141 87 169 37 73 81 92 ...
## ?$ HmRun ? ?: int ?1 7 18 20 10 4 1 0 6 17 ...
## ?$ Runs ? ? : int ?30 24 66 65 39 74 23 24 26 49 ...
## ?$ RBI ? ? ?: int ?29 38 72 78 42 51 8 24 32 66 ...
## ?$ Walks ? ?: int ?14 39 76 37 30 35 21 7 8 65 ...
## ?$ Years ? ?: int ?1 14 3 11 2 11 2 3 2 13 ...
## ?$ CAtBat ? : int ?293 3449 1624 5628 396 4408 214 509 341 5206 ...
## ?$ CHits ? ?: int ?66 835 457 1575 101 1133 42 108 86 1332 ...
## ?$ CHmRun ? : int ?1 69 63 225 12 19 1 0 6 253 ...
## ?$ CRuns ? ?: int ?30 321 224 828 48 501 30 41 32 784 ...
## ?$ CRBI ? ? : int ?29 414 266 838 46 336 9 37 34 890 ...
## ?$ CWalks ? : int ?14 375 263 354 33 194 24 12 8 866 ...
## ?$ League ? : Factor w/ 2 levels "A","N": 1 2 1 2 2 1 2 1 2 1 ...
## ?$ Division : Factor w/ 2 levels "E","W": 1 2 2 1 1 2 1 2 2 1 ...
## ?$ PutOuts ?: int ?446 632 880 200 805 282 76 121 143 0 ...
## ?$ Assists ?: int ?33 43 82 11 40 421 127 283 290 0 ...
## ?$ Errors ? : int ?20 10 14 3 4 25 7 9 19 0 ...
## ?$ Salary ? : num ?NA 475 480 500 91.5 750 70 100 75 1100 ...
## ?$ NewLeague: Factor w/ 2 levels "A","N": 1 2 1 2 2 1 1 1 2 1 ...
# 檢察缺失值
sum(is.na(Hitters$Salary))/length(Hitters[,1])*100
## [1] 18.32
事實(shí)證明,大約有18%的數(shù)據(jù)丟失。我們將省略丟失的數(shù)據(jù)。
Hitters <- na.omit(Hitters)
dim(Hitters)
## [1] 263 ?20
執(zhí)行最佳子集選擇,使用RSS進(jìn)行量化。
library(leaps)
regfit <- regsubsets(Salary ~ ., Hitters)
summary(regfit)
## Subset selection object
## Call: regsubsets.formula(Salary ~ ., Hitters)
## 19 Variables ?(and intercept)
## ? ? ? ? ? ?Forced in Forced out
## AtBat ? ? ? ? ?FALSE ? ? ?FALSE
## Hits ? ? ? ? ? FALSE ? ? ?FALSE
## HmRun ? ? ? ? ?FALSE ? ? ?FALSE
## Runs ? ? ? ? ? FALSE ? ? ?FALSE
## RBI ? ? ? ? ? ?FALSE ? ? ?FALSE
## Walks ? ? ? ? ?FALSE ? ? ?FALSE
## Years ? ? ? ? ?FALSE ? ? ?FALSE
## CAtBat ? ? ? ? FALSE ? ? ?FALSE
## CHits ? ? ? ? ?FALSE ? ? ?FALSE
## CHmRun ? ? ? ? FALSE ? ? ?FALSE
## CRuns ? ? ? ? ?FALSE ? ? ?FALSE
## CRBI ? ? ? ? ? FALSE ? ? ?FALSE
## CWalks ? ? ? ? FALSE ? ? ?FALSE
## LeagueN ? ? ? ?FALSE ? ? ?FALSE
## DivisionW ? ? ?FALSE ? ? ?FALSE
## PutOuts ? ? ? ?FALSE ? ? ?FALSE
## Assists ? ? ? ?FALSE ? ? ?FALSE
## Errors ? ? ? ? FALSE ? ? ?FALSE
## NewLeagueN ? ? FALSE ? ? ?FALSE
## 1 subsets of each size up to 8
## Selection Algorithm: exhaustive
## ? ? ? ? ?AtBat Hits HmRun Runs RBI Walks Years CAtBat CHits CHmRun CRuns
## 1 ?( 1 ) " " ? " " ?" " ? " " ?" " " " ? " " ? " " ? ?" " ? " " ? ?" "
## 2 ?( 1 ) " " ? "*" ?" " ? " " ?" " " " ? " " ? " " ? ?" " ? " " ? ?" "
## 3 ?( 1 ) " " ? "*" ?" " ? " " ?" " " " ? " " ? " " ? ?" " ? " " ? ?" "
## 4 ?( 1 ) " " ? "*" ?" " ? " " ?" " " " ? " " ? " " ? ?" " ? " " ? ?" "
## 5 ?( 1 ) "*" ? "*" ?" " ? " " ?" " " " ? " " ? " " ? ?" " ? " " ? ?" "
## 6 ?( 1 ) "*" ? "*" ?" " ? " " ?" " "*" ? " " ? " " ? ?" " ? " " ? ?" "
## 7 ?( 1 ) " " ? "*" ?" " ? " " ?" " "*" ? " " ? "*" ? ?"*" ? "*" ? ?" "
## 8 ?( 1 ) "*" ? "*" ?" " ? " " ?" " "*" ? " " ? " " ? ?" " ? "*" ? ?"*"
## ? ? ? ? ?CRBI CWalks LeagueN DivisionW PutOuts Assists Errors NewLeagueN
## 1 ?( 1 ) "*" ?" " ? ?" " ? ? " " ? ? ? " " ? ? " " ? ? " " ? ?" "
## 2 ?( 1 ) "*" ?" " ? ?" " ? ? " " ? ? ? " " ? ? " " ? ? " " ? ?" "
## 3 ?( 1 ) "*" ?" " ? ?" " ? ? " " ? ? ? "*" ? ? " " ? ? " " ? ?" "
## 4 ?( 1 ) "*" ?" " ? ?" " ? ? "*" ? ? ? "*" ? ? " " ? ? " " ? ?" "
## 5 ?( 1 ) "*" ?" " ? ?" " ? ? "*" ? ? ? "*" ? ? " " ? ? " " ? ?" "
## 6 ?( 1 ) "*" ?" " ? ?" " ? ? "*" ? ? ? "*" ? ? " " ? ? " " ? ?" "
## 7 ?( 1 ) " " ?" " ? ?" " ? ? "*" ? ? ? "*" ? ? " " ? ? " " ? ?" "
## 8 ?( 1 ) " " ?"*" ? ?" " ? ? "*" ? ? ? "*" ? ? " " ? ? " " ? ?" "
星號表示變量包含在相應(yīng)的模型中。
## ?[1] 0.3215 0.4252 0.4514 0.4754 0.4908 0.5087 0.5141 0.5286 0.5346 0.5405
## [11] 0.5426 0.5436 0.5445 0.5452 0.5455 0.5458 0.5460 0.5461 0.5461
在這個19變量模型中,??R?^ 2單調(diào)增加。
我們可以使用內(nèi)置的繪圖功能來繪制RSS,adj?R?^ 2,??C?p,AIC和BIC。

注意:上面顯示的擬合度是(除R ^ 2以外)所有測試誤差的估計(jì)。
向前和向后逐步選擇
?
## Subset selection object
## Call: regsubsets.formula(Salary ~ ., data = Hitters, nvmax = 19, method = "forward")
## 19 Variables ?(and intercept)
## ? ? ? ? ? ?Forced in Forced out
## AtBat ? ? ? ? ?FALSE ? ? ?FALSE
## Hits ? ? ? ? ? FALSE ? ? ?FALSE
## HmRun ? ? ? ? ?FALSE ? ? ?FALSE
## Runs ? ? ? ? ? FALSE ? ? ?FALSE
## RBI ? ? ? ? ? ?FALSE ? ? ?FALSE
## Walks ? ? ? ? ?FALSE ? ? ?FALSE
## Years ? ? ? ? ?FALSE ? ? ?FALSE
## CAtBat ? ? ? ? FALSE ? ? ?FALSE
## CHits ? ? ? ? ?FALSE ? ? ?FALSE
## CHmRun ? ? ? ? FALSE ? ? ?FALSE
## CRuns ? ? ? ? ?FALSE ? ? ?FALSE
## CRBI ? ? ? ? ? FALSE ? ? ?FALSE
## CWalks ? ? ? ? FALSE ? ? ?FALSE
## LeagueN ? ? ? ?FALSE ? ? ?FALSE
## DivisionW ? ? ?FALSE ? ? ?FALSE
## PutOuts ? ? ? ?FALSE ? ? ?FALSE
## Assists ? ? ? ?FALSE ? ? ?FALSE
## Errors ? ? ? ? FALSE ? ? ?FALSE
## NewLeagueN ? ? FALSE ? ? ?FALSE
## 1 subsets of each size up to 19
## Selection Algorithm: forward
## ? ? ? ? ? AtBat Hits HmRun Runs RBI Walks Years CAtBat CHits CHmRun CRuns
## 1 ?( 1 ) ?" " ? " " ?" " ? " " ?" " " " ? " " ? " " ? ?" " ? " " ? ?" "
## 2 ?( 1 ) ?" " ? "*" ?" " ? " " ?" " " " ? " " ? " " ? ?" " ? " " ? ?" "
## 3 ?( 1 ) ?" " ? "*" ?" " ? " " ?" " " " ? " " ? " " ? ?" " ? " " ? ?" "
## 4 ?( 1 ) ?" " ? "*" ?" " ? " " ?" " " " ? " " ? " " ? ?" " ? " " ? ?" "
## 5 ?( 1 ) ?"*" ? "*" ?" " ? " " ?" " " " ? " " ? " " ? ?" " ? " " ? ?" "
## 6 ?( 1 ) ?"*" ? "*" ?" " ? " " ?" " "*" ? " " ? " " ? ?" " ? " " ? ?" "
## 7 ?( 1 ) ?"*" ? "*" ?" " ? " " ?" " "*" ? " " ? " " ? ?" " ? " " ? ?" "
## 8 ?( 1 ) ?"*" ? "*" ?" " ? " " ?" " "*" ? " " ? " " ? ?" " ? " " ? ?"*"
## 9 ?( 1 ) ?"*" ? "*" ?" " ? " " ?" " "*" ? " " ? "*" ? ?" " ? " " ? ?"*"
## 10 ?( 1 ) "*" ? "*" ?" " ? " " ?" " "*" ? " " ? "*" ? ?" " ? " " ? ?"*"
## 11 ?( 1 ) "*" ? "*" ?" " ? " " ?" " "*" ? " " ? "*" ? ?" " ? " " ? ?"*"
## 12 ?( 1 ) "*" ? "*" ?" " ? "*" ?" " "*" ? " " ? "*" ? ?" " ? " " ? ?"*"
## 13 ?( 1 ) "*" ? "*" ?" " ? "*" ?" " "*" ? " " ? "*" ? ?" " ? " " ? ?"*"
## 14 ?( 1 ) "*" ? "*" ?"*" ? "*" ?" " "*" ? " " ? "*" ? ?" " ? " " ? ?"*"
## 15 ?( 1 ) "*" ? "*" ?"*" ? "*" ?" " "*" ? " " ? "*" ? ?"*" ? " " ? ?"*"
## 16 ?( 1 ) "*" ? "*" ?"*" ? "*" ?"*" "*" ? " " ? "*" ? ?"*" ? " " ? ?"*"
## 17 ?( 1 ) "*" ? "*" ?"*" ? "*" ?"*" "*" ? " " ? "*" ? ?"*" ? " " ? ?"*"
## 18 ?( 1 ) "*" ? "*" ?"*" ? "*" ?"*" "*" ? "*" ? "*" ? ?"*" ? " " ? ?"*"
## 19 ?( 1 ) "*" ? "*" ?"*" ? "*" ?"*" "*" ? "*" ? "*" ? ?"*" ? "*" ? ?"*"
## ? ? ? ? ? CRBI CWalks LeagueN DivisionW PutOuts Assists Errors NewLeagueN
## 1 ?( 1 ) ?"*" ?" " ? ?" " ? ? " " ? ? ? " " ? ? " " ? ? " " ? ?" "
## 2 ?( 1 ) ?"*" ?" " ? ?" " ? ? " " ? ? ? " " ? ? " " ? ? " " ? ?" "
## 3 ?( 1 ) ?"*" ?" " ? ?" " ? ? " " ? ? ? "*" ? ? " " ? ? " " ? ?" "
## 4 ?( 1 ) ?"*" ?" " ? ?" " ? ? "*" ? ? ? "*" ? ? " " ? ? " " ? ?" "
## 5 ?( 1 ) ?"*" ?" " ? ?" " ? ? "*" ? ? ? "*" ? ? " " ? ? " " ? ?" "
## 6 ?( 1 ) ?"*" ?" " ? ?" " ? ? "*" ? ? ? "*" ? ? " " ? ? " " ? ?" "
## 7 ?( 1 ) ?"*" ?"*" ? ?" " ? ? "*" ? ? ? "*" ? ? " " ? ? " " ? ?" "
## 8 ?( 1 ) ?"*" ?"*" ? ?" " ? ? "*" ? ? ? "*" ? ? " " ? ? " " ? ?" "
## 9 ?( 1 ) ?"*" ?"*" ? ?" " ? ? "*" ? ? ? "*" ? ? " " ? ? " " ? ?" "
## 10 ?( 1 ) "*" ?"*" ? ?" " ? ? "*" ? ? ? "*" ? ? "*" ? ? " " ? ?" "
## 11 ?( 1 ) "*" ?"*" ? ?"*" ? ? "*" ? ? ? "*" ? ? "*" ? ? " " ? ?" "
## 12 ?( 1 ) "*" ?"*" ? ?"*" ? ? "*" ? ? ? "*" ? ? "*" ? ? " " ? ?" "
## 13 ?( 1 ) "*" ?"*" ? ?"*" ? ? "*" ? ? ? "*" ? ? "*" ? ? "*" ? ?" "
## 14 ?( 1 ) "*" ?"*" ? ?"*" ? ? "*" ? ? ? "*" ? ? "*" ? ? "*" ? ?" "
## 15 ?( 1 ) "*" ?"*" ? ?"*" ? ? "*" ? ? ? "*" ? ? "*" ? ? "*" ? ?" "
## 16 ?( 1 ) "*" ?"*" ? ?"*" ? ? "*" ? ? ? "*" ? ? "*" ? ? "*" ? ?" "
## 17 ?( 1 ) "*" ?"*" ? ?"*" ? ? "*" ? ? ? "*" ? ? "*" ? ? "*" ? ?"*"
## 18 ?( 1 ) "*" ?"*" ? ?"*" ? ? "*" ? ? ? "*" ? ? "*" ? ? "*" ? ?"*"
## 19 ?( 1 ) "*" ?"*" ? ?"*" ? ? "*" ? ? ? "*" ? ? "*" ? ? "*" ? ?"*"
## Subset selection object
## 19 Variables ?(and intercept)
## ? ? ? ? ? ?Forced in Forced out
## AtBat ? ? ? ? ?FALSE ? ? ?FALSE
## Hits ? ? ? ? ? FALSE ? ? ?FALSE
## HmRun ? ? ? ? ?FALSE ? ? ?FALSE
## Runs ? ? ? ? ? FALSE ? ? ?FALSE
## RBI ? ? ? ? ? ?FALSE ? ? ?FALSE
## Walks ? ? ? ? ?FALSE ? ? ?FALSE
## Years ? ? ? ? ?FALSE ? ? ?FALSE
## CAtBat ? ? ? ? FALSE ? ? ?FALSE
## CHits ? ? ? ? ?FALSE ? ? ?FALSE
## CHmRun ? ? ? ? FALSE ? ? ?FALSE
## CRuns ? ? ? ? ?FALSE ? ? ?FALSE
## CRBI ? ? ? ? ? FALSE ? ? ?FALSE
## CWalks ? ? ? ? FALSE ? ? ?FALSE
## LeagueN ? ? ? ?FALSE ? ? ?FALSE
## DivisionW ? ? ?FALSE ? ? ?FALSE
## PutOuts ? ? ? ?FALSE ? ? ?FALSE
## Assists ? ? ? ?FALSE ? ? ?FALSE
## Errors ? ? ? ? FALSE ? ? ?FALSE
## NewLeagueN ? ? FALSE ? ? ?FALSE
## 1 subsets of each size up to 19
## Selection Algorithm: backward
## ? ? ? ? ? AtBat Hits HmRun Runs RBI Walks Years CAtBat CHits CHmRun CRuns
## 1 ?( 1 ) ?" " ? " " ?" " ? " " ?" " " " ? " " ? " " ? ?" " ? " " ? ?"*"
## 2 ?( 1 ) ?" " ? "*" ?" " ? " " ?" " " " ? " " ? " " ? ?" " ? " " ? ?"*"
## 3 ?( 1 ) ?" " ? "*" ?" " ? " " ?" " " " ? " " ? " " ? ?" " ? " " ? ?"*"
## 4 ?( 1 ) ?"*" ? "*" ?" " ? " " ?" " " " ? " " ? " " ? ?" " ? " " ? ?"*"
## 5 ?( 1 ) ?"*" ? "*" ?" " ? " " ?" " "*" ? " " ? " " ? ?" " ? " " ? ?"*"
## 6 ?( 1 ) ?"*" ? "*" ?" " ? " " ?" " "*" ? " " ? " " ? ?" " ? " " ? ?"*"
## 7 ?( 1 ) ?"*" ? "*" ?" " ? " " ?" " "*" ? " " ? " " ? ?" " ? " " ? ?"*"
## 8 ?( 1 ) ?"*" ? "*" ?" " ? " " ?" " "*" ? " " ? " " ? ?" " ? " " ? ?"*"
## 9 ?( 1 ) ?"*" ? "*" ?" " ? " " ?" " "*" ? " " ? "*" ? ?" " ? " " ? ?"*"
## 10 ?( 1 ) "*" ? "*" ?" " ? " " ?" " "*" ? " " ? "*" ? ?" " ? " " ? ?"*"
## 11 ?( 1 ) "*" ? "*" ?" " ? " " ?" " "*" ? " " ? "*" ? ?" " ? " " ? ?"*"
## 12 ?( 1 ) "*" ? "*" ?" " ? "*" ?" " "*" ? " " ? "*" ? ?" " ? " " ? ?"*"
## 13 ?( 1 ) "*" ? "*" ?" " ? "*" ?" " "*" ? " " ? "*" ? ?" " ? " " ? ?"*"
## 14 ?( 1 ) "*" ? "*" ?"*" ? "*" ?" " "*" ? " " ? "*" ? ?" " ? " " ? ?"*"
## 15 ?( 1 ) "*" ? "*" ?"*" ? "*" ?" " "*" ? " " ? "*" ? ?"*" ? " " ? ?"*"
## 16 ?( 1 ) "*" ? "*" ?"*" ? "*" ?"*" "*" ? " " ? "*" ? ?"*" ? " " ? ?"*"
## 17 ?( 1 ) "*" ? "*" ?"*" ? "*" ?"*" "*" ? " " ? "*" ? ?"*" ? " " ? ?"*"
## 18 ?( 1 ) "*" ? "*" ?"*" ? "*" ?"*" "*" ? "*" ? "*" ? ?"*" ? " " ? ?"*"
## 19 ?( 1 ) "*" ? "*" ?"*" ? "*" ?"*" "*" ? "*" ? "*" ? ?"*" ? "*" ? ?"*"
## ? ? ? ? ? CRBI CWalks LeagueN DivisionW PutOuts Assists Errors NewLeagueN
## 1 ?( 1 ) ?" " ?" " ? ?" " ? ? " " ? ? ? " " ? ? " " ? ? " " ? ?" "
## 2 ?( 1 ) ?" " ?" " ? ?" " ? ? " " ? ? ? " " ? ? " " ? ? " " ? ?" "
## 3 ?( 1 ) ?" " ?" " ? ?" " ? ? " " ? ? ? "*" ? ? " " ? ? " " ? ?" "
## 4 ?( 1 ) ?" " ?" " ? ?" " ? ? " " ? ? ? "*" ? ? " " ? ? " " ? ?" "
## 5 ?( 1 ) ?" " ?" " ? ?" " ? ? " " ? ? ? "*" ? ? " " ? ? " " ? ?" "
## 6 ?( 1 ) ?" " ?" " ? ?" " ? ? "*" ? ? ? "*" ? ? " " ? ? " " ? ?" "
## 7 ?( 1 ) ?" " ?"*" ? ?" " ? ? "*" ? ? ? "*" ? ? " " ? ? " " ? ?" "
## 8 ?( 1 ) ?"*" ?"*" ? ?" " ? ? "*" ? ? ? "*" ? ? " " ? ? " " ? ?" "
## 9 ?( 1 ) ?"*" ?"*" ? ?" " ? ? "*" ? ? ? "*" ? ? " " ? ? " " ? ?" "
## 10 ?( 1 ) "*" ?"*" ? ?" " ? ? "*" ? ? ? "*" ? ? "*" ? ? " " ? ?" "
## 11 ?( 1 ) "*" ?"*" ? ?"*" ? ? "*" ? ? ? "*" ? ? "*" ? ? " " ? ?" "
## 12 ?( 1 ) "*" ?"*" ? ?"*" ? ? "*" ? ? ? "*" ? ? "*" ? ? " " ? ?" "
## 13 ?( 1 ) "*" ?"*" ? ?"*" ? ? "*" ? ? ? "*" ? ? "*" ? ? "*" ? ?" "
## 14 ?( 1 ) "*" ?"*" ? ?"*" ? ? "*" ? ? ? "*" ? ? "*" ? ? "*" ? ?" "
## 15 ?( 1 ) "*" ?"*" ? ?"*" ? ? "*" ? ? ? "*" ? ? "*" ? ? "*" ? ?" "
## 16 ?( 1 ) "*" ?"*" ? ?"*" ? ? "*" ? ? ? "*" ? ? "*" ? ? "*" ? ?" "
## 17 ?( 1 ) "*" ?"*" ? ?"*" ? ? "*" ? ? ? "*" ? ? "*" ? ? "*" ? ?"*"
## 18 ?( 1 ) "*" ?"*" ? ?"*" ? ? "*" ? ? ? "*" ? ? "*" ? ? "*" ? ?"*"
## 19 ?( 1 ) "*" ?"*" ? ?"*" ? ? "*" ? ? ? "*" ? ? "*" ? ? "*" ? ?"*"
我們可以在這里看到1-6個變量模型對于最佳子集??和??選擇是相同的? 。
嶺回歸和套索
開始交叉驗(yàn)證方法
我們還將在正則化方法中應(yīng)用交叉驗(yàn)證方法。
驗(yàn)證集
R ^ 2??C?p和BIC估計(jì)測試錯誤率,我們可以使用交叉驗(yàn)證方法。我們必須僅使用訓(xùn)練觀察來執(zhí)行模型擬合和變量選擇的所有方面。然后通過將訓(xùn)練模型應(yīng)用于測試或驗(yàn)證??數(shù)據(jù)來計(jì)算測試錯誤? 。
## Ridge Regression
##
## 133 samples
## ?19 predictors
##
## Pre-processing: scaled, centered
## Resampling: Bootstrapped (25 reps)
##
## Summary of sample sizes: 133, 133, 133, 133, 133, 133, ...
##
## Resampling results across tuning parameters:
##
## ? lambda ?RMSE ?Rsquared ?RMSE SD ?Rsquared SD
## ? 0 ? ? ? 400 ? 0.4 ? ? ? 40 ? ? ? 0.09
## ? 1e-04 ? 400 ? 0.4 ? ? ? 40 ? ? ? 0.09
## ? 0.1 ? ? 300 ? 0.5 ? ? ? 40 ? ? ? 0.09
##
## RMSE用于使用最小值選擇最佳模型。
##用于模型的最終值為lambda = 0.1。
mean(ridge.pred - test$Salary)^2
## [1] 30.1
k交叉驗(yàn)證
使用??k交叉驗(yàn)證選擇最佳的lambda。
為了進(jìn)行交叉驗(yàn)證,我們將數(shù)據(jù)分為測試和訓(xùn)練數(shù)據(jù)。
## Ridge Regression
##
## 133 samples
## ?19 predictors
##
## Pre-processing: centered, scaled
## Resampling: Cross-Validated (10 fold)
##
## Summary of sample sizes: 120, 120, 119, 120, 120, 119, ...
##
## Resampling results across tuning parameters:
##
## ? lambda ?RMSE ?Rsquared ?RMSE SD ?Rsquared SD
## ? 0 ? ? ? 300 ? 0.6 ? ? ? 70 ? ? ? 0.1
## ? 1e-04 ? 300 ? 0.6 ? ? ? 70 ? ? ? 0.1
## ? 0.1 ? ? 300 ? 0.6 ? ? ? 70 ? ? ? 0.1
##
## RMSE用于使用最小值選擇最佳模型。
##用于模型的最終值為lambda = 1e-04。
# 計(jì)算相關(guān)系數(shù)
predict(ridge$finalModel, type='coef', mode='norm')$coefficients[19,]
## ? ? ?AtBat ? ? ? Hits ? ? ?HmRun ? ? ? Runs ? ? ? ?RBI ? ? ?Walks
## ? -157.221 ? ?313.860 ? ?-18.996 ? ? ?0.000 ? ?-70.392 ? ?171.242
## ? ? ?Years ? ? CAtBat ? ? ?CHits ? ? CHmRun ? ? ?CRuns ? ? ? CRBI
## ? ?-27.543 ? ? ?0.000 ? ? ?0.000 ? ? 51.811 ? ?202.537 ? ?187.933
## ? ? CWalks ? ?LeagueN ?DivisionW ? ?PutOuts ? ?Assists ? ? Errors
## ? -224.951 ? ? 12.839 ? ?-38.595 ? ? -9.128 ? ? 13.288 ? ?-18.620
## NewLeagueN
## ? ? 22.326
sqrt(mean(ridge.pred - test$Salary)^2)
## [1] 17.53
因此,薪水的平均誤差約為33000?;貧w系數(shù)似乎并沒有真正趨向于零,但這是因?yàn)槲覀兪紫葘?shù)據(jù)進(jìn)行了標(biāo)準(zhǔn)化。
現(xiàn)在,我們應(yīng)該檢查一下這是否比常規(guī)lm()
?模型更好? 。
## Linear Regression
##
## 133 samples
## ?19 predictors
##
## Pre-processing: scaled, centered
## Resampling: Cross-Validated (10 fold)
##
## Summary of sample sizes: 120, 120, 121, 119, 119, 119, ...
##
## Resampling results
##
## ? RMSE ?Rsquared ?RMSE SD ?Rsquared SD
## ? 300 ? 0.5 ? ? ? 70 ? ? ? 0.2
##
##
coef(lmfit$finalModel)
## (Intercept) ? ? ? AtBat ? ? ? ?Hits ? ? ? HmRun ? ? ? ?Runs ? ? ? ? RBI
## ? ? 535.958 ? ?-327.835 ? ? 591.667 ? ? ?73.964 ? ?-169.699 ? ?-162.024
## ? ? ? Walks ? ? ? Years ? ? ?CAtBat ? ? ? CHits ? ? ?CHmRun ? ? ? CRuns
## ? ? 234.093 ? ? -60.557 ? ? 125.017 ? ?-529.709 ? ? -45.888 ? ? 680.654
## ? ? ? ?CRBI ? ? ?CWalks ? ? LeagueN ? DivisionW ? ? PutOuts ? ? Assists
## ? ? 393.276 ? ?-399.506 ? ? ?19.118 ? ? -46.679 ? ? ?-4.898 ? ? ?41.271
## ? ? ?Errors ?NewLeagueN
## ? ? -22.672 ? ? ?22.469
sqrt(mean(lmfit.pred - test$Salary)^2)
## [1] 17.62
如我們所見,這種嶺回歸擬合當(dāng)然具有較低的RMSE和較高的??R?^ 2。
套索
## The lasso
##
## 133 samples
## ?19 predictors
##
## Pre-processing: scaled, centered
## Resampling: Cross-Validated (10 fold)
##
## Summary of sample sizes: 120, 121, 120, 120, 120, 119, ...
##
## Resampling results across tuning parameters:
##
## ? fraction ?RMSE ?Rsquared ?RMSE SD ?Rsquared SD
## ? 0.1 ? ? ? 300 ? 0.6 ? ? ? 70 ? ? ? 0.2
## ? 0.5 ? ? ? 300 ? 0.6 ? ? ? 60 ? ? ? 0.2
## ? 0.9 ? ? ? 300 ? 0.6 ? ? ? 70 ? ? ? 0.2
##
## RMSE用于使用最小值選擇最佳模型。
##用于模型的最終值是= 0.5。
## $s
## [1] 0.5
##
## $fraction
## ? 0
## 0.5
##
## $mode
## [1] "fraction"
##
## $coefficients
## ? ? ?AtBat ? ? ? Hits ? ? ?HmRun ? ? ? Runs ? ? ? ?RBI ? ? ?Walks
## ? -227.113 ? ?406.285 ? ? ?0.000 ? ?-48.612 ? ?-93.740 ? ?197.472
## ? ? ?Years ? ? CAtBat ? ? ?CHits ? ? CHmRun ? ? ?CRuns ? ? ? CRBI
## ? ?-47.952 ? ? ?0.000 ? ? ?0.000 ? ? 82.291 ? ?274.745 ? ?166.617
## ? ? CWalks ? ?LeagueN ?DivisionW ? ?PutOuts ? ?Assists ? ? Errors
## ? -287.549 ? ? 18.059 ? ?-41.697 ? ? -7.001 ? ? 30.768 ? ?-26.407
## NewLeagueN
## ? ? 19.190
sqrt(mean(lasso.pred - test$Salary)^2)
## [1] 14.35
在套索lasso中,我們看到許多系數(shù)已被強(qiáng)制為零。即使RMSE比ridge回歸高一點(diǎn),它也比線性回歸模型具有優(yōu)勢。
PCR和PLS
主成分回歸
?
## Data: ? ?X dimension: 133 19
## ?Y dimension: 133 1
## Fit method: svdpc
## Number of components considered: 19
##
## VALIDATION: RMSEP
## Cross-validated using 10 random segments.
## ? ? ? ?(Intercept) ?1 comps ?2 comps ?3 comps ?4 comps ?5 comps ?6 comps
## CV ? ? ? ? ? 451.5 ? ?336.9 ? ?323.9 ? ?328.5 ? ?328.4 ? ?329.9 ? ?337.1
## adjCV ? ? ? ?451.5 ? ?336.3 ? ?323.6 ? ?327.8 ? ?327.5 ? ?328.8 ? ?335.7
## ? ? ? ?7 comps ?8 comps ?9 comps ?10 comps ?11 comps ?12 comps ?13 comps
## CV ? ? ? 335.2 ? ?333.7 ? ?338.5 ? ? 334.3 ? ? 337.8 ? ? 340.4 ? ? 346.7
## adjCV ? ?332.5 ? ?331.7 ? ?336.4 ? ? 332.0 ? ? 335.5 ? ? 337.6 ? ? 343.4
## ? ? ? ?14 comps ?15 comps ?16 comps ?17 comps ?18 comps ?19 comps
## CV ? ? ? ?345.1 ? ? 345.7 ? ? 329.4 ? ? 337.3 ? ? 343.5 ? ? 338.7
## adjCV ? ? 341.2 ? ? 341.6 ? ? 325.7 ? ? 332.7 ? ? 338.4 ? ? 333.9
##
## TRAINING: % variance explained
## ? ? ? ? 1 comps ?2 comps ?3 comps ?4 comps ?5 comps ?6 comps ?7 comps
## X ? ? ? ? 36.55 ? ?60.81 ? ?71.75 ? ?80.59 ? ?85.72 ? ?89.76 ? ?92.74
## Salary ? ?45.62 ? ?50.01 ? ?51.19 ? ?51.98 ? ?53.23 ? ?53.36 ? ?55.63
## ? ? ? ? 8 comps ?9 comps ?10 comps ?11 comps ?12 comps ?13 comps ?14 comps
## X ? ? ? ? 95.37 ? ?96.49 ? ? 97.45 ? ? 98.09 ? ? 98.73 ? ? 99.21 ? ? 99.52
## Salary ? ?56.48 ? ?56.73 ? ? 58.57 ? ? 58.92 ? ? 59.34 ? ? 59.44 ? ? 62.01
## ? ? ? ? 15 comps ?16 comps ?17 comps ?18 comps ?19 comps
## X ? ? ? ? ?99.77 ? ? 99.90 ? ? 99.97 ? ? 99.99 ? ?100.00
## Salary ? ? 62.65 ? ? 65.29 ? ? 66.48 ? ? 66.77 ? ? 67.37

該算法將CV報告為RMSE,并將訓(xùn)練數(shù)據(jù)報告為R ^ 2。通過將MSE作圖可以看出,我們實(shí)現(xiàn)了最低的MSE。這表明與最小二乘法相比有了很大的改進(jìn),因?yàn)槲覀兡軌騼H使用3個分量而不是19個分量來解釋大部分方差。
測試數(shù)據(jù)集上執(zhí)行。
sqrt(mean((pcr.pred - test$Salary)^2))
## [1] 374.8
比套索/線性回歸的RMSE低。
?
## Principal Component Analysis
##
## 133 samples
## ?19 predictors
##
## Pre-processing: centered, scaled
## Resampling: Cross-Validated (10 fold)
##
## Summary of sample sizes: 121, 120, 118, 119, 120, 120, ...
##
## Resampling results across tuning parameters:
##
## ? ncomp ?RMSE ?Rsquared ?RMSE SD ?Rsquared SD
## ? 1 ? ? ?300 ? 0.5 ? ? ? 100 ? ? ?0.2
## ? 2 ? ? ?300 ? 0.5 ? ? ? 100 ? ? ?0.2
## ? 3 ? ? ?300 ? 0.6 ? ? ? 100 ? ? ?0.2
##
## RMSE用于使用最小值選擇最佳模型。
##用于模型的最終值為ncomp = 3。
選擇2個成分的最佳模型
sqrt(mean(pcr.pred - test$Salary)^2)
## [1] 21.86
但是,PCR結(jié)果不容易解釋。
偏最小二乘
## Data: ? ?X dimension: 133 19
## ?Y dimension: 133 1
## Fit method: kernelpls
## Number of components considered: 19
##
## VALIDATION: RMSEP
## Cross-validated using 10 random segments.
## ? ? ? ?(Intercept) ?1 comps ?2 comps ?3 comps ?4 comps ?5 comps ?6 comps
## CV ? ? ? ? ? 451.5 ? ?328.9 ? ?328.4 ? ?332.6 ? ?329.2 ? ?325.4 ? ?323.4
## adjCV ? ? ? ?451.5 ? ?328.2 ? ?327.4 ? ?330.6 ? ?326.9 ? ?323.0 ? ?320.9
## ? ? ? ?7 comps ?8 comps ?9 comps ?10 comps ?11 comps ?12 comps ?13 comps
## CV ? ? ? 318.7 ? ?318.7 ? ?316.3 ? ? 317.6 ? ? 316.5 ? ? 317.0 ? ? 319.2
## adjCV ? ?316.2 ? ?315.5 ? ?313.5 ? ? 314.9 ? ? 313.6 ? ? 313.9 ? ? 315.9
## ? ? ? ?14 comps ?15 comps ?16 comps ?17 comps ?18 comps ?19 comps
## CV ? ? ? ?323.0 ? ? 323.8 ? ? 325.4 ? ? 324.5 ? ? 323.6 ? ? 321.4
## adjCV ? ? 319.3 ? ? 320.1 ? ? 321.4 ? ? 320.5 ? ? 319.9 ? ? 317.8
##
## TRAINING: % variance explained
## ? ? ? ? 1 comps ?2 comps ?3 comps ?4 comps ?5 comps ?6 comps ?7 comps
## X ? ? ? ? 35.94 ? ?55.11 ? ?67.37 ? ?74.29 ? ?79.65 ? ?85.17 ? ?89.17
## Salary ? ?51.56 ? ?54.90 ? ?57.72 ? ?59.78 ? ?61.50 ? ?62.94 ? ?63.96
## ? ? ? ? 8 comps ?9 comps ?10 comps ?11 comps ?12 comps ?13 comps ?14 comps
## X ? ? ? ? 90.55 ? ?93.49 ? ? 95.82 ? ? 97.05 ? ? 97.67 ? ? 98.45 ? ? 98.67
## Salary ? ?65.34 ? ?65.75 ? ? 66.03 ? ? 66.44 ? ? 66.69 ? ? 66.77 ? ? 66.94
## ? ? ? ? 15 comps ?16 comps ?17 comps ?18 comps ?19 comps
## X ? ? ? ? ?99.02 ? ? 99.26 ? ? 99.42 ? ? 99.98 ? ?100.00
## Salary ? ? 67.02 ? ? 67.11 ? ? 67.24 ? ? 67.26 ? ? 67.37

最好的??M? 為2。評估相應(yīng)的測試誤差 。
sqrt(mean(pls.pred - test$Salary)^2)
## [1] 14.34
與PCR相比,在這里我們可以看到RMSE有所改善。

最受歡迎的見解
1.matlab偏最小二乘回歸(PLSR)和主成分回歸(PCR)
2.R語言高維數(shù)據(jù)的主成分pca、 t-SNE算法降維與可視化分析
3.主成分分析(PCA)基本原理及分析實(shí)例
4.基于R語言實(shí)現(xiàn)LASSO回歸分析
5.使用LASSO回歸預(yù)測股票收益數(shù)據(jù)分析
6.r語言中對lasso回歸,ridge嶺回歸和elastic-net模型
7.r語言中的偏最小二乘回歸pls-da數(shù)據(jù)分析
8.r語言中的偏最小二乘pls回歸算法
9.R語言線性判別分析(LDA),二次判別分析(QDA)和正則判別分析(RDA)