前面一篇得到19個(gè)局部最優(yōu)模型,接下來需要尋找到全局最優(yōu)的模型
summary (fit1)$cp
summary (fit1)$bic
制成圖表:
plot (summary (fot1)$cp, xlab = "Number of Predictors", ylab = 'Cp', col = 'red', type = 'p', pch = 16)
bic圖形將該代碼中的cp替換即可
一個(gè)自變量時(shí)cp值較高屁使,隨著自變量的增加精度逐漸上升故痊,增加到一定程度時(shí)精度再次下降
BIC呈現(xiàn)出同樣的情形蒋纬,但是最佳精度自變量數(shù)量不同源梭,這樣情況下可以自行選擇:
Elbow Rule:選取下降最明顯的部分附近的點(diǎn)(圖中第三個(gè)模型铺呵,使用walks吉挣,hits和years三個(gè)作為自變量)
篩選模型可以使用Lasso工具派撕,初級(jí)機(jī)器學(xué)習(xí)方法
LASSO:Least Absolute Shrinkage andSelection Operator,數(shù)據(jù)降維
在預(yù)測模型自變量太多睬魂,篩選出更有意義的自變量
線性回歸模型需要最小化殘差平方和终吼,如果要成功回歸,數(shù)據(jù)的個(gè)數(shù)要大于自變量個(gè)數(shù)
平衡參數(shù)大小和殘差平方和之間的關(guān)系氯哮,對(duì)任意的λ都可以找到一個(gè)最好的模型际跪,找到最好的λ得到全局最優(yōu)的模型
安裝并調(diào)用glmnet程序包
將數(shù)據(jù)整理成LASSO模型需要的格式
Y = newhitters [, 20] #因變量單獨(dú)列出
X = model.matrix(lnsalary~., data = newhitters)[, -1] #將數(shù)據(jù)變成matrix結(jié)構(gòu),保留所有行喉钢,刪除第一列姆打,因?yàn)樯傻淖宰兞烤仃嚢说谝涣械慕鼐囗?xiàng),LASSO不需要
lasso1.10 = glmnet(X, Y, alpha = 1, lambda = 10) #alpha = 1確定lasso模型
觀察lambda = 10時(shí)的系數(shù):
coef (lasso1.10)
lambda取值過大肠虽,所有系數(shù)被壓縮為0幔戏,調(diào)整lambda
lasso1.lambda = glmnet (X, Y, alpha = 1)#系統(tǒng)自動(dòng)生成并儲(chǔ)存99個(gè)lambda的值和對(duì)應(yīng)lasso模型
plot (1:99, lasso1.lambda$lambda) #生成圖表
查看自變量系數(shù)與lambda的變化關(guān)系:
plot (lasso1.lambda)
對(duì)LASSO進(jìn)行交叉檢驗(yàn),首先需要控制隨機(jī)數(shù)種子
set.seed(1)
lasso1.cv = cv.glmnet (X, Y, alpha = 1, nfolds = 10)#進(jìn)行交叉檢驗(yàn)
plot (lasso1.cv)#繪圖