Glmnet是一个经过惩罚最大似然来拟合广义线性模型的包。正则化路径是针对正则化参数λ的值网格处的套索或弹性网络罚值计算的。该算法速度极快,能够利用输入矩阵中的稀疏性x。它符合线性,逻辑和多项式,泊松和Cox回归模型。能够从拟合模型中作出各类预测。它也能够适合多响应线性回归。算法
glmnet算法采用循环坐标降低法,它连续优化每一个参数上的目标函数并与其余参数固定,并反复循环直至收敛。该软件包还利用强大的规则来有效地限制活动集。因为高效的更新和技术,如热启动和主动集合收敛,咱们的算法能够很是快地计算解决方案路径。网络
该代码能够处理稀疏的输入矩阵格式,以及系数的范围约束。其核心glmnet是一组Fortran子程序,它们使执行速度很是快。函数
该软件包还包括用于预测和绘图的方法以及执行K倍交叉验证的功能。测试
首先,咱们加载glmnet包:优化
library(glmnet) ## Loading required package: Matrix## Loaded glmnet 1.9-9
包中使用的默认模型是高斯线性模型或“最小二乘”,咱们将在本节中演示。咱们加载一组预先建立的数据用于说明。用户能够加载本身的数据,也可使用保存在工做区中的数据。ui
load("QuickStartExample.RData")
该命令从该保存的R数据档案中加载输入矩阵x和响应向量y。spa
咱们使用最基本的呼叫来适应模型glmnet。code
fit=glmnet(x,y)
“适合”是类的一个对象,glmnet它包含拟合模型的全部相关信息以供进一步使用。咱们不鼓励用户直接提取组件。相反,提供对象,如各类方法plot,print,coef和predict,使咱们可以更优雅执行这些任务。对象
咱们能够经过执行plot函数来显示系数:ip
MSE在测试集上
r语言中对LASSO,Ridge和ElasticNet模型实现
咱们看到lasso(alpha=1)在这里作的最好。咱们也看到,使用的lambda的范围与alpha不一样。
这些是最近添加的加强模型范围的功能。假设咱们想要拟合咱们的模型,但将系数限制为大于-0.7且小于0.5。这是很容易经过实现upper.limits和lower.limits参数:
惩罚因素
该参数容许用户对每一个系数应用单独的惩罚因子。其每一个参数的默认值为1,但能够指定其余值。特别是,任何penalty.factor等于零的变量都不会受到惩罚!让[ 数学处理错误]v表示[ 数学处理错误]的惩罚因子变量。罚款期限变为[ 数学处理错误] 请注意,惩罚因子在内部从新调整为与nvars相加。
当人们对变量有先验知识或偏好时,这很是有用。在不少状况下,一些变量可能很是重要,以致于一直想要保持这些变量,这能够经过将相应的惩罚因子设置为0来实现:
r语言中对LASSO,Ridge和ElasticNet模型实现