关于算法:r语言中对LASSO回归Ridge岭回归和弹性网络Elastic-Net模型实现

68次阅读

共计 15846 个字符,预计需要花费 40 分钟才能阅读完成。

原文链接:http://tecdat.cn/?p=3795

原文出处:拓端数据部落公众号

Glmnet 是一个通过惩办最大似然关系拟合狭义线性模型的软件包。正则化门路是针对正则化参数 λ 的值网格处的 lasso 或 Elastic Net(弹性网络)惩办值计算的。该算法十分快,并且能够利用输出矩阵中的稠密性 x。它适宜线性,逻辑和多项式,泊松和 Cox 回归模型。能够从拟合模型中做出各种预测。它也能够拟合多元线性回归。

glmnet 解决以下问题

在笼罩整个范畴的 λ 值网格上。这里 l(y,η)是察看 i 的负对数似然奉献;例如对于高斯分布是。_弹性网络_惩办由 α 管制,LASSO(α= 1,默认),Ridge(α= 0)。调整参数 λ 管制惩办的总强度。

家喻户晓,岭惩办使相干预测因子的系数彼此放大,而套索偏向于抉择其中一个而抛弃其余预测因子。_弹性网络_则将这两者混合在一起。

 glmnet 算法应用循环坐标降落法,该办法在每个参数固定不变的状况下间断优化指标函数,并重复循环直到收敛,咱们的算法能够十分疾速地计算求解门路。

代码能够解决稠密的输出矩阵格局,以及系数的范畴束缚,还包含用于预测和绘图的办法,以及执行 K 折穿插验证的性能。

疾速开始

首先,咱们加载 glmnet 包:

library(glmnet)

包中应用的默认模型是高斯线性模型或“最小二乘”。咱们加载一组事后创立的数据以进行阐明。用户能够加载本人的数据,也能够应用工作空间中保留的数据。

该命令 从此保留的 R 数据中加载输出矩阵 x 和因向量 y

咱们拟合模型 glmnet

fit = glmnet(x, y)

能够通过执行plot 函数来可视化系数:

plot(fit)

每条曲线对应一个变量。它显示了当 λ 变动时,其系数绝对于整个系数向量的ℓ1 范数的门路。上方的轴示意以后 λ 处非零系数的数量,这是套索的无效自由度(_df_)。用户可能还心愿对曲线进行正文。这能够通过label = TRUE 在 plot 命令中进行设置来实现。

glmnet 如果咱们只是输出对象名称或应用print 函数,则会显示每个步骤的门路 摘要:

print(fit)
## 
## Call:  glmnet(x = x, y = y) 
## 
##       Df   %Dev  Lambda
##  \[1,\]  0 0.0000 1.63000
##  \[2,\]  2 0.0553 1.49000
##  \[3,\]  2 0.1460 1.35000
##  \[4,\]  2 0.2210 1.23000
##  \[5,\]  2 0.2840 1.12000
##  \[6,\]  2 0.3350 1.02000
##  \[7,\]  4 0.3900 0.93300
##  \[8,\]  5 0.4560 0.85000
##  \[9,\]  5 0.5150 0.77500
## \[10,\]  6 0.5740 0.70600
## \[11,\]  6 0.6260 0.64300
## \[12,\]  6 0.6690 0.58600
## \[13,\]  6 0.7050 0.53400
## \[14,\]  6 0.7340 0.48700
## \[15,\]  7 0.7620 0.44300
## \[16,\]  7 0.7860 0.40400
## \[17,\]  7 0.8050 0.36800
## \[18,\]  7 0.8220 0.33500
## \[19,\]  7 0.8350 0.30600
## \[20,\]  7 0.8460 0.27800

它从左到右显示了非零系数的数量(Df),解释的(零)偏差百分比(%dev)和 λ(Lambda)的值。

咱们能够在序列范畴内取得一个或多个 λ 处的理论系数:

coef(fit,s=0.1)
## 21 x 1 sparse Matrix of class "dgCMatrix"
##                     1
## (Intercept)  0.150928
## V1           1.320597
## V2           .       
## V3           0.675110
## V4           .       
## V5          -0.817412
## V6           0.521437
## V7           0.004829
## V8           0.319416
## V9           .       
## V10          .       
## V11          0.142499
## V12          .       
## V13          .       
## V14         -1.059979
## V15          .       
## V16          .       
## V17          .       
## V18          .       
## V19          .       
## V20         -1.021874

还能够应用新的输出数据在特定的 λ 处进行预测:

predict(fit,newx=nx,s=c(0.1,0.05))
##             1       2
##  \[1,\]  4.4641  4.7001
##  \[2,\]  1.7509  1.8513
##  \[3,\]  4.5207  4.6512
##  \[4,\] -0.6184 -0.6764
##  \[5,\]  1.7302  1.8451
##  \[6,\]  0.3565  0.3512
##  \[7,\]  0.2881  0.2662
##  \[8,\]  2.7776  2.8209
##  \[9,\] -3.7016 -3.7773
## \[10,\]  1.1546  1.1067

该函数 glmnet 返回一系列模型供用户抉择。穿插验证可能是该工作最简略,应用最宽泛的办法。

cv.glmnet 是穿插验证的次要函数。

cv.glmnet 返回一个 cv.glmnet 对象,此处为“cvfit”,其中蕴含穿插验证拟合的所有成分的列表。

咱们能够绘制对象。

它包含穿插验证曲线(红色虚线)和沿 λ 序列的高低标准偏差曲线(误差线)。垂直虚线示意两个选定的 λ。

咱们能够查看所选的 λ 和相应的系数。例如,

cvfit$lambda.min
## \[1\] 0.08307

lambda.min 是给出最小均匀穿插验证误差的 λ 值。保留的另一个 λ 是 lambda.1se,它给出了的模型,使得误差在最小值的一个标准误差以内。咱们只须要更换 lambda.min 到lambda.1se 以上。

coef(cvfit, s = "lambda.min")
## 21 x 1 sparse Matrix of class "dgCMatrix"
##                    1
## (Intercept)  0.14936
## V1           1.32975
## V2           .      
## V3           0.69096
## V4           .      
## V5          -0.83123
## V6           0.53670
## V7           0.02005
## V8           0.33194
## V9           .      
## V10          .      
## V11          0.16239
## V12          .      
## V13          .      
## V14         -1.07081
## V15          .      
## V16          .      
## V17          .      
## V18          .      
## V19          .      
## V20         -1.04341

留神,系数以稠密矩阵格局示意。起因是沿着正则化门路的解通常是稠密的,因而应用稠密格局在工夫和空间上更为无效。

能够依据拟合的cv.glmnet 对象进行预测。让咱们看一个示例。

##            1
## \[1,\] -1.3647
## \[2,\]  2.5686
## \[3,\]  0.5706
## \[4,\]  1.9682
## \[5,\]  1.4964

newx 与新的输出矩阵 s雷同,如前所述,是预测的 λ 值。

线性回归

这里的线性回归是指两个模型系列。一个是 gaussian正态_散布_,另一个是 mgaussian多元正态_散布_。

正态_散布_

假如咱们有观测值 xi∈Rp 并且 yi∈R,i = 1,…,N。指标函数是

其中 λ≥0 是复杂度参数,0≤α≤1 在岭回归(α=0)和套索 LASSO(α=1)之间。

利用坐标降落法解决该问题。具体地说,通过计算 βj=β〜j 处的梯度和简略的演算,更新为

其中

x 变量标准化为具备单位方差(默认值)时,以上公式实用。

glmnet 提供各种选项供用户自定义。咱们在这里介绍一些罕用的选项,它们能够在glmnet 函数中指定。

  • alpha 示意弹性网混合参数 α,范畴 α∈[0,1]。α= 1 是套索(默认),α= 0 是 Ridge。
  • weights 用于察看权重。每个察看值的默认值为 1。
  • nlambda 是序列中 λ 值的数量。默认值为 100。
  • lambda 能够提供,但通常不提供,程序会构建一个序列。主动生成时,λ 序列由lambda.max 和 确定 lambda.min.ratio
  • standardize 是x 在拟合模型序列之前进行变量标准化的逻辑标记。

例如,咱们设置 α =0.2,并对后半局部的观测值赋予两倍的权重。为了防止在此处显示太长时间,咱们将其设置 nlambda 为 20。然而,实际上,倡议将 λ 的数量设置为 100(默认值)或更多。

而后咱们能够输入glmnet 对象。

print(fit)
## 
## Call:  glmnet(x = x, y = y, weights = c(rep(1, 50), rep(2, 50)), alpha = 0.2,      nlambda = 20) 
## 
##       Df  %Dev  Lambda
##  \[1,\]  0 0.000 7.94000
##  \[2,\]  4 0.179 4.89000
##  \[3,\]  7 0.444 3.01000
##  \[4,\]  7 0.657 1.85000
##  \[5,\]  8 0.785 1.14000
##  \[6,\]  9 0.854 0.70300
##  \[7,\] 10 0.887 0.43300
##  \[8,\] 11 0.902 0.26700
##  \[9,\] 14 0.910 0.16400
## \[10,\] 17 0.914 0.10100
## \[11,\] 17 0.915 0.06230
## \[12,\] 17 0.916 0.03840
## \[13,\] 19 0.916 0.02360
## \[14,\] 20 0.916 0.01460
## \[15,\] 20 0.916 0.00896
## \[16,\] 20 0.916 0.00552
## \[17,\] 20 0.916 0.00340

这将显示生成对象的调用 fit 以及带有列Df(非零系数的数量),%dev(解释的偏差百分比)和Lambda(对应的 λ 值)的三列矩阵。

咱们能够绘制拟合的对象。

让咱们针对 log-lambda 值标记每个曲线来绘制“拟合”。

这是训练数据中的偏差百分比。咱们在这里看到的是,在门路末端时,该值变动不大,然而系数有点“收缩”。这使咱们能够将注意力集中在重要的拟合局部上。

咱们能够提取系数并在某些特定值的状况下进行预测。两种罕用的选项是:

  • s 指定进行提取的 λ 值。
  • exact 批示是否须要系数的准确值。

一个简略的例子是:

## 21 x 2 sparse Matrix of class "dgCMatrix"
##                    1         1
## (Intercept)  0.19657  0.199099
## V1           1.17496  1.174650
## V2           .        .       
## V3           0.52934  0.531935
## V4           .        .       
## V5          -0.76126 -0.760959
## V6           0.46627  0.468209
## V7           0.06148  0.061927
## V8           0.38049  0.380301
## V9           .        .       
## V10          .        .       
## V11          0.14214  0.143261
## V12          .        .       
## V13          .        .       
## V14         -0.91090 -0.911207
## V15          .        .       
## V16          .        .       
## V17          .        .       
## V18          .        0.009197
## V19          .        .       
## V20         -0.86099 -0.863117

左列是,exact = TRUE 右列是 FALSE。从下面咱们能够看到,0.01 不在序列中,因而只管没有太大差别,但还是有一些差别。如果没有特殊要求,则线性插补就足够了。

用户能够依据拟合的对象进行预测。除中的选项外 coef,主要参数是 newx的新值矩阵 xtype 选项容许用户抉择预测类型:*“链接”给出拟合值

  • 因变量与正态分布的“链接”雷同。
  • “系数”计算值为的系数 s

例如,

##            1
## \[1,\] -0.9803
## \[2,\]  2.2992
## \[3,\]  0.6011
## \[4,\]  2.3573
## \[5,\]  1.7520

给出在 λ =0.05 时前 5 个观测值的拟合值。如果提供的多个值,s 则会生成预测矩阵。

用户能够自定义 K 折穿插验证。除所有 glmnet 参数外,cv.glmnet 还有非凡的参数,包含 nfolds(次数),foldid(用户提供的次数),type.measure(用于穿插验证的损失):*“deviance”或“mse”

  • “mae”应用均匀绝对误差

举个例子,

cvfit = cv.glmnet(x, y, type.measure = "mse", nfolds = 20)

依据均方误差规范进行 20 折穿插验证。

并行计算也受 cv.glmnet。为咱们在这里给出一个简略的比拟示例。

system.time(cv.glmnet(X, Y))
##    user  system elapsed 
##   3.591   0.103   3.724
system.time(cv.glmnet(X, Y, parallel = TRUE))
##    user  system elapsed 
##   4.318   0.391   2.700

从下面的倡议能够看出,并行计算能够大大放慢计算过程。

  • “lambda.min”:达到最小 MSE 的 λ。
cvfit$lambda.min
## \[1\] 0.08307
## 21 x 1 sparse Matrix of class "dgCMatrix"
##                    1
## (Intercept)  0.14936
## V1           1.32975
## V2           .      
## V3           0.69096
## V4           .      
## V5          -0.83123
## V6           0.53670
## V7           0.02005
## V8           0.33194
## V9           .      
## V10          .      
## V11          0.16239
## V12          .      
## V13          .      
## V14         -1.07081
## V15          .      
## V16          .      
## V17          .      
## V18          .      
## V19          .      
## V20         -1.04341

在这里,咱们应用雷同的 k 折,为 α 抉择一个值。

将它们全副搁置在同一绘图上:

咱们看到 lasso(alpha=1)在这里体现最好。

系数上上限

假如咱们要拟合咱们的模型,但将系数限度为大于 -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"

多项式模型

对于多项式模型,假如因变量变量的 K 级别为 G = {1,2,…,K}。在这里咱们建模

设 Y 为 N×K 指标因变量矩阵,元素 yiℓ= I(gi =ℓ)。而后弹性网惩办的负对数似然函数变为

β 是系数的 p×K 矩阵。βk 指第 k 列(对于后果类别 k),βj 指第 j 行(变量 j 的 K 个系数的向量)。最初一个惩办项是 ||βj|| q,咱们对 q 有两个抉择:q∈{1,2}。当 q = 1 时,这是每个参数的套索惩办。当 q = 2 时,这是对特定变量的所有 K 个系数的分组套索惩办,这使它们在一起全为零或非零。

对于多项式状况,用法相似于逻辑回归,咱们加载一组生成的数据。

glmnet 除少数状况外,多项式逻辑回归中的可选参数 与二项式回归根本类似。

多项式回归的一个非凡选项是 type.multinomial,如果容许,则容许应用分组的套索罚分 type.multinomial = "grouped"。这将确保变量的多项式系数全副一起输出或输入,就像多元因变量一样。

咱们绘制后果。

咱们还能够进行穿插验证并绘制返回的对象。

预测最佳抉择的 λ:

##       1  
##  \[1,\] "3"
##  \[2,\] "2"
##  \[3,\] "2"
##  \[4,\] "1"
##  \[5,\] "1"
##  \[6,\] "3"
##  \[7,\] "3"
##  \[8,\] "1"
##  \[9,\] "1"
## \[10,\] "2"

泊松模型

Poisson 回归用于在假如 Poisson 误差的状况下对计数数据进行建模,或者在均值和方差成比例的状况下应用非负数据进行建模。泊松也是指数分布族的成员。咱们通常以对数建模:
给定观测值 的对数似然

和以前一样,咱们优化了惩办对数:

Glmnet 应用内部牛顿循环和外部加权最小二乘循环(如逻辑回归)来优化此规范。

首先,咱们加载一组泊松数据。

再次,绘制系数。

像以前一样,咱们能够 别离应用coef 和 提取系数并在特定的 λ 处进行预测 predict

例如,咱们能够

## 21 x 1 sparse Matrix of class "dgCMatrix"
##                    1
## (Intercept)  0.61123
## V1           0.45820
## V2          -0.77061
## V3           1.34015
## V4           0.04350
## V5          -0.20326
## V6           .      
## V7           .      
## V8           .      
## V9           .      
## V10          .      
## V11          .      
## V12          0.01816
## V13          .      
## V14          .      
## V15          .      
## V16          .      
## V17          .      
## V18          .      
## V19          .      
## V20          .
##            1       2
## \[1,\]  2.4944  4.4263
## \[2,\] 10.3513 11.0586
## \[3,\]  0.1180  0.1782
## \[4,\]  0.9713  1.6829
## \[5,\]  1.1133  1.9935

咱们还能够应用穿插验证来找到最佳的 λ,从而进行推断。

选项简直与正态族雷同,不同之处在于 type.measure,“mse”代表均方误差,“mae”代表均值绝对误差。

咱们能够绘制 cv.glmnet 对象。

咱们还能够显示最佳的 λ 和相应的系数。

## 21 x 2 sparse Matrix of class "dgCMatrix"
##                     1        2
## (Intercept)  0.031263  0.18570
## V1           0.619053  0.57537
## V2          -0.984550 -0.93212
## V3           1.525234  1.47057
## V4           0.231591  0.19692
## V5          -0.336659 -0.30469
## V6           0.001026  .      
## V7          -0.012830  .      
## V8           .         .      
## V9           .         .      
## V10          0.015983  .      
## V11          .         .      
## V12          0.030867  0.02585
## V13         -0.027971  .      
## V14          0.032750  .      
## V15         -0.005933  .      
## V16          0.017506  .      
## V17          .         .      
## V18          0.004026  .      
## V19         -0.033579  .      
## V20          0.012049  0.00993

Cox 模型

Cox 比例危险模型通常用于钻研预测变量与生存工夫之间的关系。

Cox 比例危险回归模型,它不是间接考查 与 X 的关系,而是用 作为因变量,模型的根本模式为:

式中, 为自变量的偏回归系数,它是须从样本数据作出预计的参数; 是当 X 向量为 0 时, 的基准危险率,它是有待于从样本数据作出预计的量。简称为 Cox 回 归模型

因为 Cox 回归模型对  未作任何假设,因而 Cox 回归模型在解决问题时具备较大的灵活性;另一方面,在许多状况下,咱们只需预计出参数 (如因素剖析等),即便在 未知的状况下,仍可预计出参数。这就是说,Cox 回归模型因为含有,因而它不是齐全的参数模型,但仍可依据公式(1) 作出参数  的预计,故 Cox 回归模型属于 半参数模型

公式能够转化为:

咱们应用一组事后生成的样本数据。用户能够加载本人的数据并遵循相似的过程。在这种状况下,x 必须是协变量值的 n×p 矩阵 - 每行对应一个患者,每列对应一个协变量。y 是一个 n×2 矩阵。

##         time status
## \[1,\] 1.76878      1
## \[2,\] 0.54528      1
## \[3,\] 0.04486      0
## \[4,\] 0.85032      0
## \[5,\] 0.61488      1

Surv 包中的 函数 survival 能够创立这样的矩阵。

咱们计算默认设置下的求解门路。

绘制系数。

提取特定值 λ 处的系数。

## 30 x 1 sparse Matrix of class "dgCMatrix"
##            1
## V1   0.37694
## V2  -0.09548
## V3  -0.13596
## V4   0.09814
## V5  -0.11438
## V6  -0.38899
## V7   0.24291
## V8   0.03648
## V9   0.34740
## V10  0.03865
## V11  .      
## V12  .      
## V13  .      
## V14  .      
## V15  .      
## V16  .      
## V17  .      
## V18  .      
## V19  .      
## V20  .      
## V21  .      
## V22  .      
## V23  .      
## V24  .      
## V25  .      
## V26  .      
## V27  .      
## V28  .      
## V29  .      
## V30  .

函数 cv.glmnet 可用于计算 Cox 模型的 k 折穿插验证。

拟合后,咱们能够查看最佳 λ 值和穿插验证的误差图,帮忙评估咱们的模型。

如前所述,图中的左垂直线向咱们显示了 CV 误差曲线达到最小值的地位。左边的垂直线向咱们展现了正则化的模型,其 CV 误差在最小值的 1 个标准偏差之内。咱们还提取了最优 λ。

cvfit$lambda.min
## \[1\] 0.01594
cvfit$lambda.1se
## \[1\] 0.04869

咱们能够查看模型中的协变量并查看其系数。

index.min
##  \[1\]  0.491297 -0.174601 -0.218649  0.175112 -0.186673 -0.490250  0.335197
##  \[8\]  0.091587  0.450169  0.115922  0.017595 -0.018365 -0.002806 -0.001423
## \[15\] -0.023429  0.001688 -0.008236
coef.min
## 30 x 1 sparse Matrix of class "dgCMatrix"
##             1
## V1   0.491297
## V2  -0.174601
## V3  -0.218649
## V4   0.175112
## V5  -0.186673
## V6  -0.490250
## V7   0.335197
## V8   0.091587
## V9   0.450169
## V10  0.115922
## V11  .       
## V12  .       
## V13  0.017595
## V14  .       
## V15  .       
## V16  .       
## V17 -0.018365
## V18  .       
## V19  .       
## V20  .       
## V21 -0.002806
## V22 -0.001423
## V23  .       
## V24  .       
## V25 -0.023429
## V26  .       
## V27  0.001688
## V28  .       
## V29  .       
## V30 -0.008236

稠密矩阵

咱们的程序包反对稠密的输出矩阵,该矩阵能够高效地存储和操作大型矩阵,但只有少数几个非零条目。

咱们加载一组事后创立的样本数据。

加载 100 * 20 的稠密矩阵和 y因向量。

## \[1\] "dgCMatrix"
## attr(,"package")
## \[1\] "Matrix"

咱们能够像以前一样拟合模型。

fit = glmnet(x, y)

进行穿插验证并绘制后果对象。

预测新输出矩阵。例如,

##            1
## \[1,\]  0.3826
## \[2,\] -0.2172
## \[3,\] -1.6622
## \[4,\] -0.4175
## \[5,\] -1.3941

参考文献

Jerome Friedman, Trevor Hastie and Rob Tibshirani. (2008).
Regularization Paths for Generalized Linear Models via Coordinate Descent


参考文献

1.matlab 偏最小二乘回归 (PLSR) 和主成分回归 (PCR) 和主成分回归(PCR)”)

2.R 语言高维数据的主成分 pca、t-SNE 算法降维与可视化剖析

3. 主成分剖析 (PCA) 基本原理及剖析实例基本原理及剖析实例 ”)

4. 基于 R 语言实现 LASSO 回归剖析

5. 应用 LASSO 回归预测股票收益数据分析

6.r 语言中对 lasso 回归,ridge 岭回归和 elastic-net 模型

7.r 语言中的偏最小二乘回归 pls-da 数据分析

8.r 语言中的偏最小二乘 pls 回归算法

9. R 语言线性判别分析(LDA),二次判别分析(QDA)和正则判别分析(RDA)

正文完
 0