使用 glmnet 和 lm 的普通最小二乘法

2024-05-02

这个问题是在stackoverflow.com/q/38378118 https://stackoverflow.com/q/38378118但没有得到满意的答复。

λ = 0 的 LASSO 相当于普通最小二乘法,但对于以下情况似乎并非如此glmnet() and lm()为什么?

library(glmnet)
options(scipen = 999)

X = model.matrix(mpg ~ 0 + ., data = mtcars)
y = as.matrix(mtcars["mpg"])
coef(glmnet(X, y, lambda = 0))
lm(y ~ X)

它们的回归系数最多一致 2 个有效数字,这可能是由于它们的优化算法的终止条件略有不同:

                  glmnet        lm
(Intercept)  12.19850081  12.30337
cyl          -0.09882217  -0.11144
disp          0.01307841   0.01334
hp           -0.02142912  -0.02148
drat          0.79812453   0.78711
wt           -3.68926778  -3.71530
qsec          0.81769993   0.82104
vs            0.32109677   0.31776
am            2.51824708   2.52023
gear          0.66755681   0.65541
carb         -0.21040602  -0.19942

当我们添加交互项时,差异会更严重。

X = model.matrix(mpg ~ 0 + . + . * disp, data = mtcars)
y = as.matrix(mtcars["mpg"])
coef(glmnet(X, y, lambda = 0))
lm(y ~ X)

回归系数:

                     glmnet           lm
(Intercept)   36.2518682237  139.9814651
cyl          -11.9551206007  -26.0246050
disp          -0.2871942149   -0.9463428
hp            -0.1974440651   -0.2620506
drat          -4.0209186383  -10.2504428
wt             1.3612184380    5.4853015
qsec           2.3549189212    1.7690334
vs           -25.7384282290  -47.5193122
am           -31.2845893123  -47.4801206
gear          21.1818220135   27.3869365
carb           4.3160891408    7.3669904
cyl:disp       0.0980253873    0.1907523
disp:hp        0.0006066105    0.0006556
disp:drat      0.0040336452    0.0321768
disp:wt       -0.0074546428   -0.0228644
disp:qsec     -0.0077317305   -0.0023756
disp:vs        0.2033046078    0.3636240
disp:am        0.2474491353    0.3762699
disp:gear     -0.1361486900   -0.1963693
disp:carb     -0.0156863933   -0.0188304

如果你检查这些two https://stats.stackexchange.com/questions/56730/cannot-reproduce-ols-result-using-lasso-with-lambda-0 posts https://stackoverflow.com/questions/38378118/lasso-with-lambda-0-and-ols-produce-different-results-in-r-glmnet,您就会明白为什么没有得到相同的结果。

在本质上,glmnet使用正则化路径来惩罚最大似然来估计模型。lm使用 QR 分解解决最小二乘问题。因此,估计值永远不会完全相同。

但是,请注意手册中的?glmnet在“拉姆达”下:

警告:小心使用。不要为 lambda 提供单个值(对于 CV 后的预测使用 Predict() 代替)。供应代替 lambda 值的递减序列。 glmnet 依靠它的温暖 开始是为了速度,并且通常比适应整个路径更快 计算单个拟合。

您可以(至少)做三件事来使系数更接近,这样差异就微不足道了 - (1) 有一个值范围lambda,(2)降低阈值thres,(3)增加最大迭代次数。

library(glmnet)
options(scipen = 999)

X = model.matrix(mpg ~ 0 + ., data = mtcars)
y = as.matrix(mtcars["mpg"])
lfit <- glmnet(X, y, lambda = rev(0:99), thres = 1E-10)
lmfit <- lm(y ~ X)
coef(lfit, s = 0) - coef(lmfit)
11 x 1 Matrix of class "dgeMatrix"
                          1
(Intercept)  0.004293053125
cyl         -0.000361655351
disp        -0.000002631747
hp           0.000006447138
drat        -0.000065394578
wt           0.000180943607
qsec        -0.000079480187
vs          -0.000462099248
am          -0.000248796353
gear        -0.000222035415
carb        -0.000071164178

X = model.matrix(mpg ~ 0 + . + . * disp, data = mtcars)
y = as.matrix(mtcars["mpg"])
lfit <- glmnet(X, y, lambda = rev(0:99), thres = 1E-12, maxit = 10^7)
lmfit <- glm(y ~ X)
coef(lfit, s = 0) - coef(lmfit)
 20 x 1 Matrix of class "dgeMatrix"
                           1
(Intercept) -0.3174019115228
cyl          0.0414909318817
disp         0.0020032493403
hp           0.0001834076765
drat         0.0188376047769
wt          -0.0120601219002
qsec         0.0019991131315
vs           0.0636756040430
am           0.0439343002375
gear        -0.0161102501755
carb        -0.0088921918062
cyl:disp    -0.0002714213271
disp:hp     -0.0000001211365
disp:drat   -0.0000859742667
disp:wt      0.0000462418947
disp:qsec   -0.0000175276420
disp:vs     -0.0004657059892
disp:am     -0.0003517289096
disp:gear    0.0001629963377
disp:carb    0.0000085312911

交互模型的一些差异可能很重要,但更接近。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 glmnet 和 lm 的普通最小二乘法 的相关文章

  • R中的一元加/减是什么?

    来自 R 的详细信息部分Syntax http stat ethz ch R manual R patched library base html Syntax html帮助页面 定义了以下一元和二元运算符 他们被列出 在优先级组中 从最高
  • 尝试读取 CSV 文件时出现“无法识别的字符串转义”

    我正在尝试导入一个 csv文件 以便我可以观看此视频 R ggplot2 图形直方图 http www youtube com watch v 47kWynt3b6M 我安装了所有正确的软件包 包括ggplot以及相关的包 视频中的第一个说
  • twitterR 和 ROAuth R 软件包安装

    我在安装 CRAN 上的 twitteR 和 RAOuth 软件包时遇到一些问题 我尝试了几种不同的方法 在 Windows 下使用源代码 在 Ubuntu 下使用 RStudio 我尝试了以下命令 sudo apt get install
  • API 请求和curl::curl_fetch_memory(url, handle = handle) 中的错误:SSL 证书问题:证书已过期

    几天前 我运行了代码几个月 没有任何问题 GET url myurl query 今天我遇到一个错误 Error in curl curl fetch memory url handle handle SSL certificate pro
  • 朴素贝叶斯分类器仅基于先验概率做出决策

    我试图根据推文的情绪将推文分为三类 买入 持有 卖出 我正在使用 R 和包 e1071 我有两个数据框 一个训练集和一组需要预测情绪的新推文 训练集数据框 text sentiment this stock is a good buy Bu
  • 使用 Shiny 发布平行坐标图表时出现“错误:路径[1]="”:没有这样的文件或目录”

    我有一个似乎很常见但我还没有找到解决方案的问题 当尝试使用 rCharts Parcoords 发布 Web 应用程序时 出现以下错误 错误 路径 1 没有这样的文件或目录 奇怪的是 该应用程序在我的笔记本电脑上运行得很好 下面是我正在使用
  • ddply 和aggregate 之间的区别

    有人可以通过以下示例帮助我了解聚合和 ddply 之间的区别 数据框 mydat lt data frame first rpois 10 10 second rpois 10 10 third rpois 10 10 group c re
  • 相当于 min() 的 rowMeans()

    我在 R 邮件列表上多次看到这个问题 但仍然找不到满意的答案 假设我有一个矩阵m m lt matrix rnorm 10000000 ncol 10 我可以通过以下方式获得每行的平均值 system time rowMeans m use
  • 文本挖掘 pdf 文件/词频问题

    我正在尝试挖掘一篇具有丰富 pdf 编码和图表的文章的 pdf 我注意到 当我挖掘一些 pdf 文档时 我得到的高频词是 phi taeoe toe sigma gamma 等 它与某些 pdf 文档配合良好 但与其他文档配合使用时却得到这
  • 如何在 R 中匹配多个 ggplot2 图中的调色板?

    自从被问到这个问题以来已经有一段时间了 但我知道一个事实 我很快就会提取新数据 我想弄清楚如何用这种技术来绘制它 看起来评论和答案中的人知道如何做到这一点 但我无法完全弄清楚所给我的内容 还有人想尝试一下吗 我正在尝试使用具有多个级别的因子
  • 如何从 R 中的 txt 文件读取矩阵?

    我有一个带有矩阵的txt文件 Matrix txt 重要 数字之间没有空格 0100 1001 1100 我想在 R 中将其作为矩阵读取 我该怎么做 我尝试使用 as matrix read table Matrix txt sep 但失败
  • 将不均匀的层次列表转换为数据框

    我认为还没有有人问过这个问题 但是有没有一种方法可以将具有多个级别和不均匀结构的列表的信息组合成 长 格式的数据帧 具体来说 library XML library plyr xml inning lt http gd2 mlb com c
  • 投资决策:R中的NPV、IRR、PB计算

    我正在尝试计算不同数量项目的净现值 NPV 内部收益率 IRR 和投资回收期 PB 时间 以评估哪个投资项目提供最佳回报 到目前为止 我可以为每个项目单独计算几行代码 但我想做的是 编写一个函数 它接受一个包含许多不同项目及其现金流的矩阵
  • 如何从 R 读取 PDF 元数据

    我们很好奇 有没有一种方法可以从 R 读取 PDF 元数据 例如下面显示的信息 通过搜索我对此无能为力 r pdf metadata在当前的问题库中 非常欢迎任何指点 我想不出纯 R 的方法来执行此操作 但您可能可以安装您最喜欢的 PDF
  • R“错误:“}”中出现意外的“}”[重复]

    这个问题在这里已经有答案了 我有一个字符串变量 对于缺少数据的情况 它具有 空值 我想将 空值 重新编码为缺失 而不是说 空值 我正在尝试编写一个循环来删除这些 空值 条目 但我不断收到错误 错误 中出现意外的 for row in dat
  • 如何在将两根柱子保持在一起的同时熔化柱子?

    我有这种宽格式的数据 我想将其转换为长格式 Cond Construct Line Plant Tube shoot weight shoot Tube root weight root 1 Standard NA NA 2 199 95
  • SPSS 中的标准化残差与 R rstandard(lm()) 不匹配

    在寻找 R 相关解决方案时 我发现 R 和 SPSS 版本 24 在计算简单线性模型中的标准化残差方面存在一些不一致 看来SPSS所谓的标准化残差匹配 R学生化残差 我完全不认为某处存在软件错误 但显然这两个程序之间存在差异 看看这个例子
  • R:使用 tidyverse 将 NA 替换为 df 中的其他变量

    我想使用 tidyverse 替换 df 中的 NA 值 我想要的值应该从其他列中计算出来 input ID X1 X2 X3 A 0 96 NA 0 97 B 1 00 NA 1 01 C 0 98 0 03 NA A 1 00 NA 1
  • 实三次多项式的最快数值解?

    R 问题 寻找最快的方法来数值求解一堆已知具有实系数和三个实根的任意三次方程 据报道 R 中的 polyroot 函数对复杂多项式使用 Jenkins Traub 算法 419 但对于实多项式 作者参考了他们早期的工作 对于实三次或更一般的
  • 如何使用 dplyr 独立过滤每列的行

    我有以下内容 library tidyverse df lt tibble tribble gene colB colC a 1 2 b 2 3 c 3 4 d 1 1 df gt A tibble 4 x 3 gt gene colB c

随机推荐

  • 从 Jinja 渲染模板中删除不必要的空白

    我在用着curl观看我的网络应用程序的输出 当 Flask 和 Jinja 渲染模板时 输出中存在大量不必要的空白 它似乎是通过渲染 Flask WTF 和 Flask Bootstrap 的各种组件来添加的 我可以使用剥离这个sed 但是
  • protoc 在哪里以及如何安装它?

    我想使用protoc生成java文件的命令 我一直按照 github README 中的说明进行操作https github com protocolbuffers protobuf https github com protocolbuf
  • 如何检查目录或其任何子目录中是否存在特定文件

    在 C 中 如何检查目录或其任何子目录中是否存在特定文件 系统 IO 文件 存在似乎只接受单个参数 没有搜索子目录的重载 我可以用 LINQ 来做到这一点系统 IO 目录 GetFiles使用搜索选项 AllDirectories超载 但这
  • 按键时从文本区域获取最后一行

    我有一个文本区域字段 在每次按键时 我想将文本区域中的最后一行推送到数组中 目前 我正在每次按键时构建数组以获取文本区域中的最后一行 有没有办法优化这个 意思是 无需构造数组即可获取文本区域中的最后一行 jQuery mytextarea
  • 为 python 游戏添加再次玩选项

    我正在使用 python 为我的编程课制作一个游戏 我不知道当玩家输了或退出游戏时如何再次给他们选择 我正在使用Python 2 7 这是我的游戏的代码 import pygame sys time random from pygame l
  • Eclipse 中的一个文件中可以有多个类吗?

    Eclipse 中的一个 java 文件中是否可以包含多个类 或者我真的必须将每个文件放在不同的文件中吗 这只是 Eclipse 强加的东西 还是 Java 编译器有一些反对将所有内容放在同一个文件中的东西 根据 Java 规范 每个文件只
  • 宏、Clojure 与 Common Lisp

    我和我的一些朋友正在开发一个新平台 我们想用 lisp 构建它 主要吸引力是宏 我们都使用 Common Lisp 但我想探索 Clojure 的选择 当我提出这一点时 其中一位说宏观体系 较弱 我想知道这是否属实 以及在哪些领域 就您可以
  • 使用可编码的值,有时是 Int,有时是 String

    我有一个 API 有时会返回特定的键值 在本例中id 在 JSON 中作为 Int 有时它会以 String 的形式返回相同的键值 如何使用 codable 来解析该 JSON struct GeneralProduct Codable v
  • 在 Quickbooks v3 api 中断开应用程序连接

    我正在研究 Quickbooks v3 api 集成 我已经完成了所有集成 但陷入了 Quickbooks 从应用程序断开连接的状态 我正在使用以下代码片段来断开与 Quickbooks 的连接 final IAPlatformClient
  • 如何确保用户只提交英文文本

    我正在构建一个涉及自然语言处理的项目 由于nlp模块目前只处理英文文本 所以我必须确保用户提交的内容 不长 只有几个单词 是英文的 是否有既定的方法来实现这一目标 首选 Python 或 Javascript 方式 如果内容足够长我会推荐一
  • 为什么我必须在 POD 类型中重载operator==?

    我有一个定义如下的结构 struct Vec3 float x y z 当我尝试使用时std unique on a std vector
  • 如何从日期中获取微秒?

    我正在尝试从 a 中获取微秒Date 但我不能 Date date new Date No Date仅存储毫秒精度的值 如果您想要微秒精度 您可能需要看看JSR 310 http sourceforge net apps mediawiki
  • 如何更改 JAR 文件中的常规 JAVA COFFEE CUP 图标

    我可以更改框架中的 JAVA COFFEE CUP 图标 上 左 但如何更改 RUNNABLE JAR 文件的常规 JAVA COFFEE CUP 图片 是否有可能仅更改一个 JAR 文件的文件图标 谢谢 JAR 文件没有图标 操作系统为其
  • 如何在 Entity Framework Core 中调用标量函数

    下列的本文 http anthonygiretti com 2018 01 11 entity framework core 2 scalar function mapping 我试图使用 Entity Framework Core 将内部
  • 在两个页面/选项卡之间进行通信

    我想要一个 JavaScript 文件来控制两个 HTML 文件同时地 div div 那是第一页 接下来是第二页 div div
  • FXML load() 期间出现 JavaFX IllegalAccessException

    我有一个由以下代码调用的对话框窗口 DialogController是使用模式对话框窗口的辅助类 它主要将控制器引用与其窗口捆绑在一起 void handleServicesEdit ActionEvent event throws IOE
  • Laravel 5.3 Blade 解码 HTML 特殊字符

    我在数据库中保存了一些 HTML 代码 当我将这些数据发送到刀片时 CSS 无法正常工作 在页面源代码中我发现 我该用什么方法将 lt 转换为 有人可以帮助我吗 更改您的语法 to 这应该够了吧
  • 将我的应用程序翻译成匈牙利语

    我用英语开发了一个应用程序 我必须为客户翻译一些匈牙利语文本 我在values 文件夹中有一个menu xml 文件 并在values hu 文件夹中创建一个新的menu xml 我启动手机并选择马扎尔语言 选择了好的语言 我看到了匈牙利语
  • Kotlin:使用地图变换时 {} 和 () 之间的区别?

    我是科特林新手 我总是使用带花括号的地图变换 然后 为什么这有效 gt val x someList map SomeConstructor 这不是吗 val x someList map SomeConstructor 我在在线教程的任何
  • 使用 glmnet 和 lm 的普通最小二乘法

    这个问题是在stackoverflow com q 38378118 https stackoverflow com q 38378118但没有得到满意的答复 0 的 LASSO 相当于普通最小二乘法 但对于以下情况似乎并非如此glmnet