R语言学习笔记:模型选择(二)

前面一篇得到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)#绘图


你可能感兴趣的:(R语言学习笔记:模型选择(二))