R语言自适应LASSO 多项式回归、二元逻辑回归和岭回归应用分析(上)

简介: R语言自适应LASSO 多项式回归、二元逻辑回归和岭回归应用分析

全文链接:http://tecdat.cn/?p=21602 


正则化路径是在正则化参数lambda的值网格上计算套索LASSO或弹性网路惩罚的正则化路径。


正则化(regularization)


该算法速度快,可以利用输入矩阵x中的稀疏性,拟合线性、logistic和多项式、poisson和Cox回归模型。可以通过拟合模型进行各种预测。它还可以拟合多元线性回归。”


例子


加载数据

这里加载了一个高斯(连续Y)的例子。

as_data_frame(y)
## # A tibble: 100 x 1
##            V1
##         <dbl>
##  1 -1.2748860
##  2  1.8434251
##  3  0.4592363
##  4  0.5640407
##  5  1.8729633
##  6  0.5275317
##  7  2.4346589
##  8 -0.8945961
##  9 -0.2059384
## 10  3.1101188
## # ... with 90 more rows


初始岭回归

cv.glmnet执行k-折交叉验证 .

## 执行岭回归
glmnet(x , y 
                 ## “alpha=1”是套索惩罚, “alpha=0”是岭惩罚。
                 alpha = 0)


点击标题查阅往期内容


R使用LASSO回归预测股票收益


01

02

03

04


## 用10折CV进行岭回归
cv.glmnet(
                       ## 类型.测量:用于交叉验证的丢失。
                       type.measure = "mse",
                       ## K = 10 是默认值。
                       nfold = 10,
                       ##“alpha=1”是套索惩罚,“alpha=0”是岭惩罚。
                       alpha = 0)
## 惩罚vs CV MSE图


## 在误差最小λ处提取系数
cv$lambda.min


## [1] 0.1789759


## s:需要进行预测的惩罚参数“lambda”的值。默认值是用于创建模型的整个序列。
coef( s = lambda.min)


## 21 x 1 sparse Matrix of class "dgCMatrix"
##                        1
## (Intercept)  0.149041059
## V1           1.302684272
## V2           0.035835380
## V3           0.719936146
## V4           0.036473087
## V5          -0.863490158
## V6           0.605750873
## V7           0.123446432
## V8           0.376890626
## V9          -0.040012847
## V10          0.105999328
## V11          0.240967604
## V12         -0.066363634
## V13         -0.042048935
## V14         -1.092107794
## V15         -0.119566353
## V16         -0.035859663
## V17         -0.038827463
## V18          0.061785988
## V19         -0.001409608
## V20         -1.079879797


## 截距估计应该剔除。
(coef(cv, s = lambda.min))[-1]


这个初始过程给出了基于10折交叉验证选择的最佳岭回归模型的一组系数,使用平方误差度量 作为模型性能度量。
KNNL和Hadi中提到的另一种选择lambda的方法是选择最小的lambda,这样系数的轨迹是稳定的,VIF变得足够小。在这种情况下,VIF的定义必须包括惩罚因子lambda,这在Hadi的p295和knll的p436中有说明。

是标准化的协变量矩阵. 是原始非标准化协变量的相关矩阵 . 该计算可定义如下。

vif <- function(x, lambda) {
    ZtZ <- cor(x)
    diag(solve(ZtZ + lambdaI  %*% ZtZ %*% solve(ZtZ + lambdaI)
 
##
    ggplot(mapping = aes(x = lambda, y = value, group = key, color = key)) +
    geom_line() +


自适应LASSO

## 执行自适应LASSO
glmnet(x =  y =
                  ## 类型。度量:用于交叉验证的损失。
                  ##“alpha=1”是套索惩罚,“alpha=0”是岭惩罚。
                  alpha = 1,
                  ##
                  ## 惩罚系数:可以对每个系数应用单独的惩罚因子。这是一个乘以“lambda”以允许差异收缩的数字。对于某些变量可以是0, 这意味着没有收缩,而且这个变量总是包含在模型中。对于所有变量,默认值为1(对于“exclude”中列出的变量,默认值为无限大)。注意:惩罚因子在内部被重新调整为与nvars相加,lambda序列将反映这种变化。


## 使用10折CV执行自适应套索
                        ## 类型。度量:用于交叉验证的损失。
类型。测量= " mse ",
                        ## K = 10 是默认值。
                        nfold = 10,
                        ## ‘alpha = 1’ 是套索惩罚,'alpha=0'是岭惩罚。
                        ##
                        ## 惩罚系数:可以对每个系数应用单独的惩罚因子。这是一个乘以“lambda”以允许差异收缩的数字。对于某些变量可以为0,这意味着没有收缩,并且该变量始终包含在模型中。对于所有变量,默认值为1(对于“exclude”中列出的变量,默认值为无限大)。注意:惩罚因子在内部被重新调整为与nvars相加,lambda序列将反映这种变化。
## 惩罚vs CV MSE图


## 在误差最小λ处提取系数
lambda.min


## [1] 0.7193664


## s:需要进行预测的惩罚参数“lambda”的值。默认值是用于创建模型的整个序列。
best_alasso_coef1


## 21 x 1 sparse Matrix of class "dgCMatrix"
##                      1
## (Intercept)  0.1269539
## V1           1.3863728
## V2           .        
## V3           0.7573538
## V4           .        
## V5          -0.8937983
## V6           0.5718800
## V7           .        
## V8           0.3654255
## V9           .        
## V10          .        
## V11          0.1824140
## V12          .        
## V13          .        
## V14         -1.1150736
## V15          .        
## V16          .        
## V17          .        
## V18          .        
## V19          .        
## V20         -1.1268794


那个惩罚系数参数允许指定系数特定的惩罚级别。这里我们使用自适应LASSO惩罚,即最佳岭系数绝对值的逆。


最终模型Rsquare

##  R^2函数
## https://en.wikipedia.org/wiki/Coefficient_of_determination
    ##  总SS
    ss_tot <- sum((y - ybar)^2)
    ## 剩余 SS
    ss_res <- sum((y - yhat)^2)
    ## R^2 = 1 - ss_res/ ss_tot
## 调整R^2函数
## n个样本,p个参数
## 获取 R^2
 r_sq(as.vector(y_cont), as.vector(predict(alasso1, newx =


## [1] 0.906806


##获得调整R ^ 2
adj_r_sq(r_squared_alasso1, n = nrow(y_cont),


## [1] 0.9007934


## 交叉验证测试集R^2
## alasso1_cv$cvm[1] 是截距模型的交叉验证测试集均方误差。
1 - cvm[lambda == lambda.min] / cvm[1]


## [1] 0.8854662


交叉验证测试集Rsquare

lapply(unique(  foldid), function(id) {
    ## 拟合排除测试集 (foldid == id)
 glmnet(x = x_cont[alasso1_cv$foldid != id,],
                  y = y_cont[alasso1_cv$foldid != id], 
    ## 使用模型拟合最佳lambda测试集Yïhat
 predict(fit, newx = x_cont[alasso1_cv$foldid == id,],  
    ## 测试组 R^2
    1 - sum((y - y_pred)^2) / sum((y - mean(y))^2)
}) %>%


##  [1] 0.8197796 0.9090972 0.9499495 0.8019303 0.8637534 0.7184797 0.8579943 0.9250376 0.8300891
## [10] 0.9188004


## [1] 0.8594911


多项式例子

## # A tibble: 500 x 30
##            V1         V2          V3         V4         V5         V6          V7         V8
##         <dbl>      <dbl>       <dbl>      <dbl>      <dbl>      <dbl>       <dbl>      <dbl>
##  1  0.8212500  1.2155090 -0.64860899 -0.7001262 -1.9640742  1.1692107  0.28598652 -0.1664266
##  2  0.9264925 -1.1855031 -1.18297879  0.9828354  1.0693610 -0.2302219  0.57772625 -0.8738714
##  3 -1.5719712  0.8568961 -0.02208733  1.7445962 -0.4148403 -2.0289054 -1.31228181 -1.2441528
##  4  0.7419447 -0.9452052 -1.61821790  1.0015587 -0.4589488  0.5154490  0.29189973  0.1114092
##  5 -0.1333660  0.5085678  0.04739909 -0.4486953 -0.2616950 -0.1554108 -1.24834832 -1.0498054
##  6 -0.5672062  0.6020396 -2.10300909  0.3119233  0.3272173 -0.8671885  0.97512759 -0.7216256
##  7  1.9683411  2.5162198  1.61109738  1.0047913 -0.5194647  1.0738680 -0.16176095 -0.4267418
##  8  0.2857727 -1.7017703  1.41062569 -0.5823727 -1.3330908  1.7929250  0.06396841 -0.6818909
##  9 -0.5339434  0.1725089  0.93504676 -1.9956942 -0.9021089 -0.2624043  0.97406411  0.5166823
## 10  0.8081052 -0.9662501  0.54666915 -0.8388913  0.9665053  1.4039598  0.63502500  0.3429640
## # ... with 490 more rows, and 22 more variables: V9 <dbl>, V10 <dbl>, V11 <dbl>, V12 <dbl>,
## #   V13 <dbl>, V14 <dbl>, V15 <dbl>, V16 <dbl>, V17 <dbl>, V18 <dbl>, V19 <dbl>, V20 <dbl>,
## #   V21 <dbl>, V22 <dbl>, V23 <dbl>, V24 <dbl>, V25 <dbl>, V26 <dbl>, V27 <dbl>, V28 <dbl>,
## #   V29 <dbl>, V30 <dbl>


as_data_frame(y)


## # A tibble: 500 x 1
##    value
##    <dbl>
##  1     3
##  2     2
##  3     2
##  4     2
##  5     3
##  6     3
##  7     3
##  8     1
##  9     1
## 10     1
## # ... with 490 more rows


plot(ridge2, xvar = "lambda")


R语言自适应LASSO 多项式回归、二元逻辑回归和岭回归应用分析(下):https://developer.aliyun.com/article/1493415

相关文章
|
1月前
|
数据可视化 数据挖掘 API
【R语言实战】聚类分析及可视化
【R语言实战】聚类分析及可视化
|
1月前
【R语言实战】——fGARCH包在金融时序上的模拟应用
【R语言实战】——fGARCH包在金融时序上的模拟应用
|
1月前
|
数据采集 数据可视化
利用R语言进行因子分析实战(数据+代码+可视化+详细分析)
利用R语言进行因子分析实战(数据+代码+可视化+详细分析)
|
1月前
|
Web App开发 数据可视化 数据挖掘
利用R语言进行聚类分析实战(数据+代码+可视化+详细分析)
利用R语言进行聚类分析实战(数据+代码+可视化+详细分析)
|
1月前
|
机器学习/深度学习 数据可视化
R语言逻辑回归logistic模型ROC曲线可视化分析2例:麻醉剂用量影响、汽车购买行为2
R语言逻辑回归logistic模型ROC曲线可视化分析2例:麻醉剂用量影响、汽车购买行为
|
1月前
利用R语言进行典型相关分析实战
利用R语言进行典型相关分析实战
|
1月前
|
机器学习/深度学习 算法
R语言分类回归分析考研热现象分析与考研意愿价值变现
R语言分类回归分析考研热现象分析与考研意愿价值变现
|
1月前
|
数据可视化 定位技术
R语言贝叶斯INLA空间自相关、混合效应、季节空间模型、SPDE、时空分析野生动物数据可视化
R语言贝叶斯INLA空间自相关、混合效应、季节空间模型、SPDE、时空分析野生动物数据可视化
|
1月前
|
机器学习/深度学习 数据可视化 算法
R语言逻辑回归logistic模型ROC曲线可视化分析2例:麻醉剂用量影响、汽车购买行为1
R语言逻辑回归logistic模型ROC曲线可视化分析2例:麻醉剂用量影响、汽车购买行为
|
1月前
|
机器学习/深度学习 数据可视化 算法
R语言聚类分析、因子分析、主成分分析PCA农村农业相关经济指标数据可视化|数据分享
R语言聚类分析、因子分析、主成分分析PCA农村农业相关经济指标数据可视化|数据分享

热门文章

最新文章