前面一篇得到19个局部最优模型,接下来需要寻找到全局最优的模型
summary (fit1)$cp
summary (fit1)$bic
制成图表:
plot (summary (fot1)$cp, xlab = "Number of Predictors", ylab = 'Cp', col = 'red', type = 'p', pch = 16)
bic图形将该代码中的cp替换即可
一个自变量时cp值较高,随着自变量的增加精度逐渐上升,增加到一定程度时精度再次下降
BIC呈现出同样的情形,但是最佳精度自变量数量不同,这样情况下可以自行选择:
Elbow Rule:选取下降最明显的部分附近的点(图中第三个模型,使用walks,hits和years三个作为自变量)
筛选模型可以使用Lasso工具,初级机器学习方法
LASSO:Least Absolute Shrinkage andSelection Operator,数据降维
在预测模型自变量太多,筛选出更有意义的自变量
线性回归模型需要最小化残差平方和,如果要成功回归,数据的个数要大于自变量个数
平衡参数大小和残差平方和之间的关系,对任意的λ都可以找到一个最好的模型,找到最好的λ得到全局最优的模型
安装并调用glmnet程序包
将数据整理成LASSO模型需要的格式
Y = newhitters [, 20] #因变量单独列出
X = model.matrix(lnsalary~., data = newhitters)[, -1] #将数据变成matrix结构,保留所有行,删除第一列,因为生成的自变量矩阵包含了第一列的截距项,LASSO不需要
lasso1.10 = glmnet(X, Y, alpha = 1, lambda = 10) #alpha = 1确定lasso模型
观察lambda = 10时的系数:
coef (lasso1.10)
lambda取值过大,所有系数被压缩为0,调整lambda
lasso1.lambda = glmnet (X, Y, alpha = 1)#系统自动生成并储存99个lambda的值和对应lasso模型
plot (1:99, lasso1.lambda$lambda) #生成图表
查看自变量系数与lambda的变化关系:
plot (lasso1.lambda)
对LASSO进行交叉检验,首先需要控制随机数种子
set.seed(1)
lasso1.cv = cv.glmnet (X, Y, alpha = 1, nfolds = 10)#进行交叉检验
plot (lasso1.cv)#绘图