当前位置: 首页 > news >正文

岭回归有看点:正则化参数解密,显著性不再成问题!

一、概述

「L2正则化(也称为岭回归)」 是一种用于线性回归模型的正则化方法,它通过在模型的损失函数中添加一个惩罚项来防止过拟合。L2正则化的惩罚项是模型参数的平方和,乘以一个正则化参数λ,即:

L2正则化参数 = λ * (模型参数的平方和)

其中,λ是一个超参数,用于控制正则化的强度。

「L2正则化」的作用是通过惩罚较大的模型参数,使得模型更加平滑,减少模型的复杂性,从而提高模型的泛化能力。L2正则化可以防止过拟合,特别是当训练数据集较小或者存在多重共线性时,L2正则化可以提高模型的性能。

二、数据集

首先,我们加载数据集:

data(mtcars)
head(mtcars)

# 输出结果
#                   mpg cyl disp  hp drat    wt  qsec vs am gear carb
# Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
# Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
# Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
# Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
# Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
# Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1

三、岭回归

在R语言中,可以使用linearRidge函数进行岭回归分析,并使用summary函数查看结果。当使用岭回归时,正则化参数λ对于问题的解来说是至关重要的。在岭回归中,随着λ的增加,模型的复杂度减小,使得参数变得更加稳定和显著。因此,当λ的值越大时,岭回归系数也越大,并且具有更高的显著性,这可能是与您观察到的结果相关的原因。



# 使用linearRidge函数进行岭回归分析
install.packages("ridge")
library(ridge)
library(MASS)
library(ggplot2)

# 使用mtcars数据集
data(mtcars)

# 生成自变量和因变量
X <- as.matrix(mtcars[, -1])
y <- mtcars[, 1]

# 岭回归
fit <- linearRidge(mpg ~ ., data = mtcars, lambda = 0.1)

# 计算系数的标准误
fit.se <- sqrt(diag(solve(t(X) %*% X + fit$lambda * diag(ncol(X)))))
fit$se <- fit.se

# 将标准误为0的值替换为1e-10
fit.se[fit.se==0] <- 1e-10

# 计算系数的P值
t_value <- fit$coef / fit$se
df <- nrow(X) - ncol(X)
p_value <- 2 * pt(abs(t_value), df = df, lower.tail = FALSE)

# 将系数、标准误和P值合并到一个数据框中
result <- data.frame(lambda = fit$lambda, coef = fit$coef, se = fit$se, p_value = p_value)

result

# 绘制岭回归系数的棒图
ggplot(result, aes(x = 1:length(fit$coef), y = coef, fill = p_value < 0.05)) +
  geom_bar(stat = "identity", width = 0.5, color = "black") +
  geom_errorbar(aes(ymin = coef - se, ymax = coef + se), width = 0.2) +
  theme_bw() +
  labs(title = "Ridge Regression Coefficients and Standard Errors",
       x = "Variable Index", y = "Coefficient")

执行结果展示:

     lambda      coef          se      p_value
cyl     0.1 -2.656036 0.287385523 4.964885e-09
disp    0.1 -1.656252 0.006615594 1.669437e-39
hp      0.1 -4.906065 0.008149868 6.939783e-48
drat    0.1  2.926048 0.547854611 2.316967e-05
wt      0.1 -9.921048 0.690973553 1.180421e-12
qsec    0.1  2.894217 0.170656138 4.054759e-14
vs      0.1  1.409633 0.764781699 7.881732e-02
am      0.1  5.773137 0.730119979 7.162408e-08
gear    0.1  2.561253 0.503370358 4.256271e-05
carb    0.1 -5.980529 0.304172379 1.902781e-15

  • lambda:lambda 是在岭回归中用于正则化的超参数,控制模型的复杂度,同时也影响模型选择哪些自变量。在岭回归过程中,我们用一系列 lambda 值来建立一系列模型,并通过交叉验证等方法来确定最佳的 lambda 值,以保证模型的泛化能力和预测能力。

  • coef:coef 表示岭回归模型中各个参数的系数估计值。它们表示模型对于每个自变量的预测权重,即每个自变量对因变量的影响程度。

  • se:se 是系数估计值的标准错误,用于表示对于某一自变量的系数估计,其真实值与样本估计值之间的偏离程度。标准误差越小,说明该系数估计值越可靠。

  • p_value:p-value 表示在假设检验中对应的概率值,通常用于衡量某一自变量的系数估计值在统计意义下是否显著不为 0。一般情况下,p-value < 0.05 表示该自变量的系数估计值能够显著区别于 0,即该变量对因变量有着显著影响。

该图显示了岭回归模型的系数估计值,每个自变量的估计值用一个棒图表示。棒图中心的水平线表示该自变量的估计值,棒图的长度表示该估计值的标准误。估计值的颜色表示相应的 p-value 显著性检验结果,绿色表示 p-value >= 0.05,红色表示 p-value < 0.05。从图中可以看出,am、hp、wt 和 gear 这四个自变量在岭回归中对 mpg 有显著的影响,其余的自变量的系数估计值非常接近于零,说明它们对 mpg 的影响可以忽略不计。由于使用了岭回归,这表明偏差-方差折衷的技术可以对模型偏差进行约束并选择出最相关的特征。

「预测结果和实际值的比较:」

# 预测新数据
newdata <- data.frame(mtcars[, -1])
newdata$ridge_pred <- predict(fit, newdata)

# 将预测结果添加到原始数据集上
mtcars$ridge_pred <- predict(fit, mtcars[, -1])

# 绘制实际值和预测值的散点图
ggplot(mtcars, aes(x = mpg, y = ridge_pred)) +
  geom_point() +
  geom_line(aes(x = mpg, y = mpg), color = "red") +
  theme_bw() +
  labs(title = "Ridge Regression Prediction Results",
       x = "Actual mpg", y = "Predicted mpg")

可以看到,这个预测结果和实际结果相差还是不大的,几乎在线的左右,有一定的预测价值。

四、总结

岭回归在实际应用中,常用于以下场景:

  1. 「数据预处理」:在数据预处理阶段,可以使用岭回归来解决多重共线性问题,提高模型的稳定性和效果。

  2. 「特征选择」:岭回归可以用于特征选择,通过调整正则化参数,可以控制模型系数的大小,对无关自变量的系数进行惩罚,进而筛选出对模型解释力度高的重要特征。

  3. 「预测建模」:岭回归也可以用于预测建模,通过适当地调整正则化参数可以控制模型的复杂度,同时避免过拟合问题,提高模型的泛化能力。

总之,岭回归是一个广泛应用于回归问题的经典模型,具有良好的解释性和稳定性,是数据科学和机器学习领域中必不可少的工具之一。

末尾,我们提一个问题哈,lambda这个值怎么选比较合理?采用什么算法来选择?如果有想了解的,欢迎关注和私信我。

http://www.lryc.cn/news/90614.html

相关文章:

  • Android 12.0修改recovery 菜单项字体大小
  • 【计算机网络】 7、websocket 概念、sdk、实现
  • python中的常见运算符
  • TypeScript类型
  • Integer源码
  • 【四】设计模式~~~创建型模式~~~建造者模式(Java)
  • MarkDown的基本使用方法
  • IDEA 安装配置步骤详解
  • 【网络】· 路由器中配置单臂路由和DHCP,VTP原理
  • Python 子域名扫描工具:使用多线程优化
  • 宝塔面板一键部署Z-Blog博客 - 内网穿透实现公网访问
  • 深入理解设计原则之单一职责原则(SRP)
  • 钉钉群通过短信转发器接收手机短信消息
  • 【C++模版】模版进阶 {非类型模版参数; 模版的特化; 模版的分离编译; 模版总结}
  • Azure Active Directory 的功能和优势
  • mysql查询语句执行过程及运行原理命令
  • 可视化探索开源项目的 contributor 关系
  • SpringBoot 实现启动项目后立即执行方法的几种方式
  • 2021第十二届蓝桥杯Python组国赛【真题+解析+代码】
  • 3D引擎渲染管理系统概览
  • 蔚来Java实习面经
  • nginx 搭建http-flv(rtmp)流媒体的一次尝试
  • Unity 工具 之 Azure 微软语音合成普通方式和流式获取音频数据的简单整理
  • 【A卡,Windows】stable diffusion webui下载安装避坑指南
  • 并发编程-系统学习篇
  • 在浏览器网页上使用JavaScript如何将mp4视频转换成gif动态图片
  • Nginx网络服务——主配置文件-nginx.conf
  • Java Map集合
  • 数据库中的中英文术语大全
  • 调用华为API实现身份证识别