R 语言中的惩罚性回归

在这篇文章中,您将了解 R 平台的 3 种惩罚回归方法。

您可以复制并粘贴本文中的代码,以快速开始您自己的项目,或学习和练习 R 中的线性回归。

使用我的新书 《R 机器学习精通》 快速启动您的项目,其中包含分步教程和所有示例的R 源代码文件。

让我们开始吧。

Penalized Regression

惩罚回归
照片作者:Bay Area Bias,保留部分权利

本文中的每个示例都使用了 R 自带的 datasets 包中的 longley 数据集。longley 数据集描述了从 1947 年到 1962 年观察到的 7 个经济变量,用于预测每年就业人数。

岭回归

岭回归 (Ridge Regression) 创建一个线性回归模型,该模型受到 L2 范数(即系数平方和)的惩罚。这会缩小系数的值(以及模型的复杂度),允许一些对响应变量贡献较小的系数趋近于零。

了解 glmnet 包中的 glmnet 函数。

需要更多关于R机器学习的帮助吗?

参加我为期14天的免费电子邮件课程,了解如何在您的项目中使用R(附带示例代码)。

点击注册,同时获得该课程的免费PDF电子书版本。

最小绝对收缩和选择算子

最小绝对收缩和选择算子 (LASSO) 创建一个回归模型,该模型受到 L1 范数(即系数绝对值之和)的惩罚。这会缩小系数的值(以及模型的复杂度),允许一些对响应变量有轻微影响的系数变为零。

了解 lars 包中的 lars 函数。

弹性网络

弹性网络 (Elastic Net) 创建一个同时受到 L1 范数和 L2 范数惩罚的回归模型。这会有效地缩小系数(如岭回归),并使某些系数变为零(如 LASSO)。

了解 glmnet 包中的 glmnet 函数。

总结

在这篇文章中,您学习了 R 中 3 种惩罚回归的方法。

惩罚是一种强大的特征选择方法,可以提高预测模型的准确性。有关更多信息,请参阅 Kuhn 和 Johnson 的《应用预测建模》的第 6 章,其中为 R 初学者提供了出色的线性回归入门。

在R中发现更快的机器学习!

Master Machine Learning With R

在几分钟内开发您自己的模型

...只需几行R代码

在我的新电子书中探索如何实现
精通 R 语言机器学习

涵盖自学教程端到端项目,例如
加载数据、可视化、构建模型、调优等等...

最终将机器学习应用到您自己的项目中

跳过学术理论。只看结果。

查看内容

29 条关于“R 中的惩罚回归”的回复

  1. Hrvoje 2014年7月25日晚上10:53 #

    好文章,但是第一个和第三个代码是一样的 🙂 有什么区别?

    • jasonb 2014年7月26日早上7:40 #

      差不多。注意 alpha 的值(弹性网络混合参数)。
      glmnet 函数的一个优点是它可以执行岭回归、Lasso 回归以及两者的混合。在第一个示例中,我们使用了 alpha=0 的 glmnet,结果是岭回归(仅 L2)。如果 alpha 设置为 1,则是 Lasso 回归(仅 L1)。请注意,在第三个示例中,alpha 设置为 0.5,这是 L1 和 L2 以 50% 的比例混合的弹性网络。
      希望这样更清楚。

      • Hrvoje 2014年7月26日晚上11:47 #

        现在清楚多了。非常感谢 🙂

  2. TropoSco 2014年8月2日晚上7:50 #

    感谢您的文章,

    我想知道使用 lars 包和 alpha=1 的 glmnet 包进行 LASSO 回归在计算和统计性能上的区别?

    感谢您的时间和继续保持好工作!

  3. JOY 2015年5月12日晚上10:04 #

    好文章。我想知道如何使用 R 进行回归分析。您正在按照分步方法进行,这是通过我的电子邮件发送的。我的笔记本电脑上已经安装了 R 包。

  4. Christine 2016年3月16日晚上9:08 #

    嗨 Jason,非常感谢您提供的清晰教程,
    这可能是一个愚蠢的问题,但我该如何解释弹性网络的拟合优度?在我运行
    # 总结拟合
    summary(fit)
    # 进行预测
    predictions <- predict(fit, x, type="link")
    # 总结准确度
    rmse <- mean((y – predictions)^2)
    print(rmse)

    之后得到了一个值,但不确定该如何解释。
    非常感谢!

    • keval 2017年3月24日下午2:02 #

      我也在想同样的问题,如何解释 mse?

  5. Hans 2017年6月2日凌晨12:25 #

    “longley[,1:6]”和“longley[,7]”分别是什么意思?

    如何用我自己的 CSV 数据准确地替换 data(longley)?

    • Jason Brownlee 2017年6月2日下午1:01 #

      它指定了数据中的列。

      • Hans 2017年6月2日晚上8:14 #

        例如,“longley[,1:6]”指定了哪些列?

        当我点击 R Studio 检查器中的“x”时,它会显示一个带有标题的表
        GNP.deflator
        GNP
        Unemployed
        Armed.Forces
        Population
        Year

        当我点击 y 时,它会显示一个带有“V1”标题的表

        能用文字描述为“longley[datastart,dataend:datarows]”吗?
        这是一种子集操作吗?

        • Hans 2017年6月2日晚上8:25 #

          或者,如果它的意思是

          longley[,1:6] = longley[,第1列到第6列]

          longley[,7] = longley[,第7列]

          那么“,”前面的部分是什么?有通配符吗?

          • Hans 2017年6月6日早上9:16 #

            明白了…
            dataset[10:12,1:3] = dataset[startRow:endRow,startColumn:endColumn]
            dataset[,1:3] = dataset[allRows,startColumn:endColumn]

  6. Hans 2017年6月2日晚上8:27 #

    在 R Studio 中,有没有一种简单的方法可以看到“data(longley)”的原始表格结构(所有标题)?

    • Jason Brownlee 2017年6月3日早上7:24 #

      我不用 RStudio,所以无法提供这方面的建议,抱歉。

    • srepho 2017年7月5日下午2:49 #

      在 RStudio 中,您可以使用 View(df) 在查看器中显示数据框/tibble。

      View(longley)

      或者,在 dplyr 包中,您可以使用 glimpse(df) 来获取列名和数据类型的列表。

      dplyr::glimpse(longley)

  7. Hans 2017年6月6日早上9:05 #

    如何在上面的代码中预测一个未见数据的步骤?

    • Hand 2017年6月6日早上11:11 #

      我们是否需要使用训练集和测试集来预测未见数据(使用 glmnet)?
      如果是,我们是否应该使用预测的最后观测值作为 newx 来预测新的未见数据?

      • Jason Brownlee 2017年6月7日早上7:08 #

        您可以使用任何您喜欢的测试框架来估计模型在未见数据上的性能。

  8. hiya 2017年7月11日下午5:31 #

    内部使用了什么方法 – 最小二乘法
    还是最大似然法

  9. Fakhra 2017年12月25日凌晨1:34 #

    如果我必须使用一个提出的惩罚而不是 LASSO 或弹性网络的内置惩罚,该怎么办?如何使用?

  10. Munira 2018年4月6日凌晨2:58 #

    嗨,Jason,
    我开始了您的机器学习课程——似乎非常有用。我有一个关于我计划进行的分析的问题。我简要描述了我的研究环境和关于 R 包的问题。如果您能帮助我,那就太好了。

    我一直在尝试分析高维数据(p 超过 n),观测值有限(n=50)。我想使用 Lasso 方法进行变量选择和参数估计,以开发预测模型。由于我的数据是计数观测,它必须是泊松或负二项分布。我研究了几个 R 包和研究,最后决定使用 Glmnet。现在我有一些问题

    我知道“Glmnet”和“Penalized”包使用不同的算法。正如我看到的“Mpath”使用像 Glmnet 这样的坐标下降法,那么“Mapth”和“Glmnet”的结果是否可比?我只对“Mpath”感兴趣是因为它们允许负二项回归,“Glmnet”则不行。

    一些包允许进行事后推断(p 值和置信区间),例如“selectiveInference”、“hdi”。然而,我找不到关于泊松或负二项模型的任何内容。有哪个包可以帮助我吗?

    提前感谢。

    • Jason Brownlee 2018年4月6日早上6:34 #

      可能有,我暂时不确定,抱歉。

      也许可以尝试在 R 用户列表上发帖?

  11. niebieska_biedronka 2018年4月20日晚上6:24 #

    根据我对 glmnet 包的描述(https://cran.r-project.cn/web/packages/glmnet/glmnet.pdf),它不拟合岭回归,只拟合 lasso 或弹性网络——我猜是因为惩罚定义(它从不减少到岭惩罚定义)。

    • Jason Brownlee 2018年4月21日早上6:44 #

      使用弹性网络,您可以执行岭回归、Lasso 回归以及两者(例如,弹性网络)。

  12. william 2018年7月28日晚上8:20 #

    对于回归问题 ML 算法,Lasso 是用于高维数据集进行特征选择的好方法吗?

    也就是说,我正在尝试确定用于确定我的输出变量(连续)的最佳特征的最佳算法,我一直在使用 Lasso,只是不确定它与其他算法相比有多有效……对于侧重于回归的 ML 问题,是否有推荐的特征选择方法?

    谢谢,

留下回复

Machine Learning Mastery 是 Guiding Tech Media 的一部分,Guiding Tech Media 是一家领先的数字媒体出版商,专注于帮助人们了解技术。访问我们的公司网站以了解更多关于我们的使命和团队的信息。