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

相关文章
|
3月前
|
数据采集 机器学习/深度学习 数据可视化
R语言从数据到决策:R语言在商业分析中的实践
【9月更文挑战第1天】R语言在商业分析中的应用广泛而深入,从数据收集、预处理、分析到预测模型构建和决策支持,R语言都提供了强大的工具和功能。通过学习和掌握R语言在商业分析中的实践应用,我们可以更好地利用数据驱动企业决策,提升企业的竞争力和盈利能力。未来,随着大数据和人工智能技术的不断发展,R语言在商业分析领域的应用将更加广泛和深入,为企业带来更多的机遇和挑战。
|
2月前
|
存储 数据可视化 数据挖掘
R语言在生物信息学中的应用
【10月更文挑战第21天】生物信息学是生物学、计算机科学和信息技术相结合的交叉学科,主要研究生物大分子信息的存储、处理、分析和解释。R语言作为一种强大的统计分析工具,被广泛应用于生物信息学领域。本文将介绍R语言在生物信息学中的应用,包括基因组学、转录组学、蛋白质组学、代谢组学等方面,帮助读者了解R语言在生物信息学中的重要性和应用前景。
87 4
|
2月前
|
数据挖掘 C语言 C++
R语言是一种强大的统计分析工具,提供了丰富的函数和包用于时间序列分析。
【10月更文挑战第21天】时间序列分析是一种重要的数据分析方法,广泛应用于经济学、金融学、气象学、生态学等领域。R语言是一种强大的统计分析工具,提供了丰富的函数和包用于时间序列分析。本文将介绍使用R语言进行时间序列分析的基本概念、方法和实例,帮助读者掌握R语言在时间序列分析中的应用。
58 3
|
2月前
|
机器学习/深度学习 数据采集 人工智能
R语言是一种强大的编程语言,广泛应用于统计分析、数据可视化、机器学习等领域
R语言是一种广泛应用于统计分析、数据可视化及机器学习的强大编程语言。本文为初学者提供了一份使用R语言进行机器学习的入门指南,涵盖R语言简介、安装配置、基本操作、常用机器学习库介绍及实例演示,帮助读者快速掌握R语言在机器学习领域的应用。
114 3
|
2月前
|
机器学习/深度学习 并行计算 数据挖掘
R语言是一种强大的统计分析工具,广泛应用于数据分析和机器学习领域
【10月更文挑战第21天】R语言是一种强大的统计分析工具,广泛应用于数据分析和机器学习领域。本文将介绍R语言中的一些高级编程技巧,包括函数式编程、向量化运算、字符串处理、循环和条件语句、异常处理和性能优化等方面,以帮助读者更好地掌握R语言的编程技巧,提高数据分析的效率。
61 2
|
3月前
|
数据采集 数据可视化 数据挖掘
R语言在金融数据分析中的深度应用:探索数据背后的市场智慧
【9月更文挑战第1天】R语言在金融数据分析中展现出了强大的功能和广泛的应用前景。通过丰富的数据处理函数、强大的统计分析功能和优秀的可视化效果,R语言能够帮助金融机构深入挖掘数据价值,洞察市场动态。未来,随着金融数据的不断积累和技术的不断进步,R语言在金融数据分析中的应用将更加广泛和深入。
|
3月前
|
机器学习/深度学习 算法 数据挖掘
R语言中的支持向量机(SVM)与K最近邻(KNN)算法实现与应用
【9月更文挑战第2天】无论是支持向量机还是K最近邻算法,都是机器学习中非常重要的分类算法。它们在R语言中的实现相对简单,但各有其优缺点和适用场景。在实际应用中,应根据数据的特性、任务的需求以及计算资源的限制来选择合适的算法。通过不断地实践和探索,我们可以更好地掌握这些算法并应用到实际的数据分析和机器学习任务中。
|
4月前
|
机器学习/深度学习 数据采集 数据可视化
R语言在数据科学中的应用实例:探索与预测分析
【8月更文挑战第31天】通过上述实例,我们展示了R语言在数据科学中的强大应用。从数据准备、探索、预处理到建模与预测,R语言提供了完整的解决方案和丰富的工具集。当然,数据科学远不止于此,随着技术的不断发展和业务需求的不断变化,我们需要不断学习和探索新的方法和工具,以更好地应对挑战,挖掘数据的潜在价值。 未来,随着大数据和人工智能技术的普及,R语言在数据科学领域的应用将更加广泛和深入。我们期待看到更多创新的应用实例,为各行各业的发展注入新的动力。
|
4月前
|
数据采集 存储 数据可视化
R语言时间序列分析:处理与建模时间序列数据的深度探索
【8月更文挑战第31天】R语言作为一款功能强大的数据分析工具,为处理时间序列数据提供了丰富的函数和包。从数据读取、预处理、建模到可视化,R语言都提供了灵活且强大的解决方案。然而,时间序列数据的处理和分析是一个复杂的过程,需要结合具体的应用场景和需求来选择合适的方法和模型。希望本文能为读者在R语言中进行时间序列分析提供一些有益的参考和启示。
|
7月前
|
数据可视化 数据挖掘 API
【R语言实战】聚类分析及可视化
【R语言实战】聚类分析及可视化