r语言中对LASSO回归,Ridge岭回归和弹性网络Elastic Net模型实现-2
https://developer.aliyun.com/article/1489395
系数上下限
假设我们要拟合我们的模型,但将系数限制为大于-0.7且小于0.5。这可以通过upper.limits
和 lower.limits
参数实现 :
通常,我们希望系数为正,因此我们只能lower.limit
将其设置 为0。
惩罚因素
此参数允许用户将单独的惩罚因子应用于每个系数。每个参数的默认值为1,但可以指定其他值。特别是,任何penalty.factor
等于零的变量 都不会受到惩罚
在许多情况下,某些变量可能是重要,我们希望一直保留它们,这可以通过将相应的惩罚因子设置为0来实现:
我们从标签中看到惩罚因子为0的三个变量始终保留在模型中,而其他变量遵循典型的正则化路径并最终缩小为0。
自定义图
有时,尤其是在变量数量很少的情况下,我们想在图上添加变量标签。
我们首先生成带有10个变量的一些数据,然后,我们拟合glmnet模型,并绘制标准图。
我们希望用变量名标记曲线。在路径的末尾放置系数的位置。
多元正态
使用family = "mgaussian"
option 获得多元正态分布glmnet
。
显然,顾名思义,y不是向量,而是矩阵。结果,每个λ值的系数也是一个矩阵。
在这里,我们解决以下问题:
这里,βj是p×K系数矩阵β的第j行,对于单个预测变量xj,我们用每个系数K向量βj的组套索罚分代替每个单一系数的绝对罚分。
我们使用预先生成的一组数据进行说明。
我们拟合数据,并返回对象“ mfit”。
mfit = glmnet(x, y, family = "mgaussian")
如果为 standardize.response = TRUE
,则将因变量标准化。
为了可视化系数,我们使用 plot
函数。
注意我们设置了 type.coef = "2norm"
。在此设置下,每个变量绘制一条曲线,其值等于ℓ2范数。默认设置为 type.coef = "coef"
,其中为每个因变量创建一个系数图。
通过使用该函数coef
,我们可以提取要求的λ值的系数, 并通过进行预测 。
## , , 1 ## ## y1 y2 y3 y4 ## \[1,\] -4.7106 -1.1635 0.6028 3.741 ## \[2,\] 4.1302 -3.0508 -1.2123 4.970 ## \[3,\] 3.1595 -0.5760 0.2608 2.054 ## \[4,\] 0.6459 2.1206 -0.2252 3.146 ## \[5,\] -1.1792 0.1056 -7.3353 3.248 ## ## , , 2 ## ## y1 y2 y3 y4 ## \[1,\] -4.6415 -1.2290 0.6118 3.780 ## \[2,\] 4.4713 -3.2530 -1.2573 5.266 ## \[3,\] 3.4735 -0.6929 0.4684 2.056 ## \[4,\] 0.7353 2.2965 -0.2190 2.989 ## \[5,\] -1.2760 0.2893 -7.8259 3.205
预测结果保存在三维数组中,其中前两个维是每个因变量的预测矩阵,第三个维表示因变量。
我们还可以进行k折交叉验证。
我们绘制结果 cv.glmnet
对象“ cvmfit”。
显示选定的λ最佳值
cvmfit$lambda.min
## \[1\] 0.04732
cvmfit$lambda.1se
## \[1\] 0.1317
逻辑回归
当因变量是分类的时,逻辑回归是另一个广泛使用的模型。如果有两个可能的结果,则使用二项式分布,否则使用多项式。
二项式模型
对于二项式模型,假设因变量的取值为G = {1,2} 。表示yi = I(gi = 1)。我们建模
可以用以下形式写
惩罚逻辑回归的目标函数使用负二项式对数似然
我们的算法使用对数似然的二次逼近,然后对所得的惩罚加权最小二乘问题进行下降。这些构成了内部和外部循环。
出于说明目的,我们 从数据文件加载预生成的输入矩阵 x
和因变量 y
。
对于二项式逻辑回归,因变量y可以是两个级别的因子,也可以是计数或比例的两列矩阵。
glmnet
二项式回归的其他可选参数与正态分布的参数 几乎相同。不要忘记将family
选项设置 为“ binomial”。
fit = glmnet(x, y, family = "binomial")
像以前一样,我们可以输出和绘制拟合的对象,提取特定λ处的系数,并进行预测。
逻辑回归略有不同,主要体现在选择上 type
。“链接”和“因变量”不等价,“类”仅可用于逻辑回归。总之,*“链接”给出了线性预测变量
- “因变量”给出合适的概率
- “类别”产生对应于最大概率的类别标签。
- “系数”计算值为的系数
s
在下面的示例中,我们在λ=0.05,0.01的情况下对类别标签进行了预测。
## 1 2 ## \[1,\] "0" "0" ## \[2,\] "1" "1" ## \[3,\] "1" "1" ## \[4,\] "0" "0" ## \[5,\] "1" "1"
对于逻辑回归,type.measure
:
- “偏差”使用实际偏差。
- “ mae”使用平均绝对误差。
- “class”给出错误分类错误。
- “ auc”(仅适用于两类逻辑回归)给出了ROC曲线下的面积。
例如,
它使用分类误差作为10倍交叉验证的标准。
我们绘制对象并显示λ的最佳值。
cvfit$lambda.min
## \[1\] 0.01476
cvfit$lambda.1se
## \[1\] 0.02579
coef
并且 predict
类似于正态分布案例,因此我们省略了细节。我们通过一些例子进行回顾。
## 31 x 1 sparse Matrix of class "dgCMatrix" ## 1 ## (Intercept) 0.24371 ## V1 0.06897 ## V2 0.66252 ## V3 -0.54275 ## V4 -1.13693 ## V5 -0.19143 ## V6 -0.95852 ## V7 . ## V8 -0.56529 ## V9 0.77454 ## V10 -1.45079 ## V11 -0.04363 ## V12 -0.06894 ## V13 . ## V14 . ## V15 . ## V16 0.36685 ## V17 . ## V18 -0.04014 ## V19 . ## V20 . ## V21 . ## V22 0.20882 ## V23 0.34014 ## V24 . ## V25 0.66310 ## V26 -0.33696 ## V27 -0.10570 ## V28 0.24318 ## V29 -0.22445 ## V30 0.11091
如前所述,此处返回的结果仅针对因子因变量的第二类。
## 1 ## \[1,\] "0" ## \[2,\] "1" ## \[3,\] "1" ## \[4,\] "0" ## \[5,\] "1" ## \[6,\] "0" ## \[7,\] "0" ## \[8,\] "0" ## \[9,\] "1" ## \[10,\] "1"
r语言中对LASSO回归,Ridge岭回归和弹性网络Elastic Net模型实现-4