热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

套索回归岭回归_岭,套索和弹性净回归简介

套索回归岭回归回归分析是一种统计技术,可对因变量与一个或多个自变量之间的关系进行建模和近似。本文将快速介绍三个使用R和Boston住房数据集的常用回归模型࿱

套索回归 岭回归

回归分析是一种统计技术,可对因变量与一个或多个自变量之间的关系进行建模和近似。 本文将快速介绍三个使用R和Boston住房数据集的常用回归模型:Ridge,Lasso和Elastic Net。

首先,我们需要了解回归的基本知识以及使用特定模型时方程式的哪些参数会发生变化。 简单线性回归,也称为普通最小二乘(OLS),试图使误差平方和最小。 在这种情况下,误差是实际数据点与其预测值之间的差。

平方误差的可视化(来自Setosa.io)

该模型的方程式称为成本函数,是通过最小化和测量来找到最佳误差的一种方法。 梯度下降算法用于通过多次迭代来找到最佳成本函数。 但是,使用基本的OLS模型来表征和定义数据并非总是那么容易。

最小二乘平方方程

一种情况是数据显示多重共线性,这是当预测变量彼​​此相关且与响应变量相关时。 为了说明这一点,我们正在做一项研究,研究一个React变量-患者体重,而我们的预测变量是身高,性别和饮食习惯。 这里的问题是身高和性别也相关,并且会夸大其系数的标准误差,这可能会使它们在统计学上显得无关紧要。

为了生成更精确的复杂数据模型,我们可以在OLS方程中添加一个惩罚项。 惩罚增加了偏见 朝着某些价值。 这些称为L1正则化(Lasso回归)和L2正则化(岭回归)。

我们希望提供的最佳模型可以最大程度地减少偏差 方差 :

方差/偏差权衡(KDnuggets.com)

岭回归

Ridge回归使用L2正则化将以下惩罚项添加到OLS方程中。

L2正则化惩罚项

L2项等于系数幅度的平方。 在这种情况下,如果lambda( λ)为零,则该方程为基本OLS,但如果它大于零,则对系数添加约束。 该约束导致最小化的系数(又称收缩率),λ值越大,趋向于零。 缩小系数会导致较低的方差,进而导致较低的误差值。 因此,Ridge回归可降低模型的复杂性,但不会减少变量的数量,而只会缩小其影响。

套索回归

拉索回归使用L1惩罚项,代表最小绝对收缩和选择算符 。 对L2施加的惩罚等于系数幅度的绝对值:

L1正则化惩罚项

与脊回归相似,λ值为零会吐出基本OLS方程,但是如果给定合适的λ值lasso回归可以使某些系数变为零。 lambda的值越大,将更多功能缩小为零。 这样可以完全消除某些功能,并为我们提供预测子集,以帮助减轻多重共线性和模型复杂性。 预测变量没有缩小到零表示它们很重要,因此L1正则化允许进行特征选择(稀疏选择)。

弹性网

第三种常用的回归模型是Elastic Net,它结合了L1和L2正则化的惩罚:

弹性净正则化

除了设置和选择lambda值外,弹性网还允许我们调整alpha参数,其中𝞪 = 0对应于岭,𝞪 = 1对应套索。 简而言之,如果您为alpha插入0,则惩罚函数将减少为L1(岭)项,如果将alpha设置为1,我们将得到L2(套索)项。 因此,我们可以在0到1之间选择一个alpha值来优化弹性网。 有效地,这将缩小一些系数并将稀疏选择的系数设置为0。

准备数据

我们将使用以下软件包:

library(tidyverse)
library(caret)
library(glmnet)

我们还将使用R内置的波士顿住房市场数据集,因为它具有许多预测变量

data(“Boston”, package = “MASS”)

#set a seed so you can reproduce the results
set.seed(1212)

#split the data into training and test data
sample_size <- floor(0.75 * nrow(Boston))

training_index <- sample(seq_len(nrow(Boston)), size &#61; sample_size)

train <- Boston[training_index, ]

test <- Boston[-training_index, ]

我们还应该创建两个对象来存储预测变量&#xff08;x&#xff09;和响应变量&#xff08;y&#xff0c;中位数&#xff09;

# Predictor
x <- model.matrix(medv~., train)[,-1]

# Response
y <- train$medv

执行Ridge回归

如前几节所述&#xff0c;lambda值对系数有很大的影响&#xff0c;因此现在我们将计算并选择一个合适的值。

在这里&#xff0c;我们执行交叉验证&#xff0c;并在将数据拟合到模型并查看系数之前&#xff0c;先查看与最低预测误差对应的lambda值。

cv.r <- cv.glmnet(x, y, alpha &#61; 0)

cv.r$lambda.min

model.ridge <- glmnet(x, y, alpha &#61; 0, lambda &#61; cv.r$lambda.min)

coef(model.ridge)

我们在这里可以看到某些系数已被推向零并最小化&#xff0c;而RM&#xff08;房间数&#xff09;的权重明显高于其余系数

岭回归系数

现在&#xff0c;我们通过使用模型上的测试数据来查看模型的性能。

x.test.ridge <- model.matrix(medv ~., test)[,-1]

predictions.ridge <- model.ridge
%>% predict(x.test.ridge)
%>% as.vector()

data.frame(
RMSE.r &#61; RMSE(predictions.ridge, test$medv),
Rsquare.r &#61; R2(predictions.ridge, test$medv))

RMSE &#61; 4.8721和R²&#61; 0.7205

执行套索回归

步骤将与我们对岭回归所做的相同。 alpha值是唯一的更改&#xff08;请记住&#x1d7aa; &#61; 1表示套索&#xff09;

cv.l <- cv.glmnet(x, y, alpha &#61; 1)

cv.l$lambda.min

model.lasso <- glmnet(x, y, alpha &#61; 1, lambda &#61; cv.l$lambda.min)

coef(model.lasso)

x.test.lasso <- model.matrix(medv ~., test)[,-1]
predictions.lasso <- model.lasso %>%
predict(x.test.lasso) %>%
as.vector()

data.frame(
RMSE.l &#61; RMSE(predictions.lasso, test$medv),
Rsquare.l &#61; R2(predictions.lasso, test$medv))

RMSE &#61; 4.8494&#xff0c;R²&#61; 0.7223

执行弹性净回归

执行Elastic Net要求我们调整参数以识别最佳的alpha和lambda值&#xff0c;为此&#xff0c;我们需要使用caret包。 我们将通过迭代多个alpha和lambda对来调整模型&#xff0c;然后可以看到哪个对具有最小的相关误差。

model.net <- train(
medv ~., data &#61; train, method &#61; "glmnet",
trControl &#61; trainControl("cv", number &#61; 10),
tuneLength &#61; 10)

model.net$bestTune

coef(model.net$finalModel, model.net$bestTune$lambda)

x.test.net <- model.matrix(medv ~., test)[,-1]

predictions.net <- model.net %>% predict(x.test.net)

data.frame(
RMSE.net &#61; RMSE(predictions.net, test$medv),
Rsquare.net &#61; R2(predictions.net, test$medv))

RMSE &#61; 4.8523&#xff0c;R²&#61; 0.7219

结论

我们可以看到&#xff0c;使用所有三个模型的R均方值都非常接近&#xff0c;但是两者的性能都比脊回归好一些&#xff08;拉索表现最好&#xff09;。 Lasso回归也显示出最高的R²值。

翻译自: https://hackernoon.com/an-introduction-to-ridge-lasso-and-elastic-net-regression-cca60b4b934f

套索回归 岭回归



推荐阅读
  • Android系统源码分析Zygote和SystemServer启动过程详解
    本文详细解析了Android系统源码中Zygote和SystemServer的启动过程。首先介绍了系统framework层启动的内容,帮助理解四大组件的启动和管理过程。接着介绍了AMS、PMS等系统服务的作用和调用方式。然后详细分析了Zygote的启动过程,解释了Zygote在Android启动过程中的决定作用。最后通过时序图展示了整个过程。 ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 本文介绍了在处理不规则数据时如何使用Python自动提取文本中的时间日期,包括使用dateutil.parser模块统一日期字符串格式和使用datefinder模块提取日期。同时,还介绍了一段使用正则表达式的代码,可以支持中文日期和一些特殊的时间识别,例如'2012年12月12日'、'3小时前'、'在2012/12/13哈哈'等。 ... [详细]
  • 欢乐的票圈重构之旅——RecyclerView的头尾布局增加
    项目重构的Git地址:https:github.comrazerdpFriendCircletreemain-dev项目同步更新的文集:http:www.jianshu.comno ... [详细]
  • 基于Socket的多个客户端之间的聊天功能实现方法
    本文介绍了基于Socket的多个客户端之间实现聊天功能的方法,包括服务器端的实现和客户端的实现。服务器端通过每个用户的输出流向特定用户发送消息,而客户端通过输入流接收消息。同时,还介绍了相关的实体类和Socket的基本概念。 ... [详细]
  • java drools5_Java Drools5.1 规则流基础【示例】(中)
    五、规则文件及规则流EduInfoRule.drl:packagemyrules;importsample.Employ;ruleBachelorruleflow-group ... [详细]
  • 颜色迁移(reinhard VS welsh)
    不要谈什么天分,运气,你需要的是一个截稿日,以及一个不交稿就能打爆你狗头的人,然后你就会被自己的才华吓到。------ ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • 本文整理了315道Python基础题目及答案,帮助读者检验学习成果。文章介绍了学习Python的途径、Python与其他编程语言的对比、解释型和编译型编程语言的简述、Python解释器的种类和特点、位和字节的关系、以及至少5个PEP8规范。对于想要检验自己学习成果的读者,这些题目将是一个不错的选择。请注意,答案在视频中,本文不提供答案。 ... [详细]
  • Ihaveaworkfolderdirectory.我有一个工作文件夹目录。holderDir.glob(*)>holder[ProjectOne, ... [详细]
  • Question该提问来源于开源项目:react-native-device-info/react-native-device-info ... [详细]
  • 在本教程中,我们将看到如何使用FLASK制作第一个用于机器学习模型的RESTAPI。我们将从创建机器学习模型开始。然后,我们将看到使用Flask创建AP ... [详细]
author-avatar
长相守短相思洪
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有