岭回归(Ridge)和Lasso 回归(笔记)

2023-10-30

最近在自学图灵教材《Python机器学习基础教程》,在csdn以博客的形式做些笔记。

对于回归问题,线性模型预测的一般公式如下:

ŷ = w[0] * x[0] + w[1] * x[1] + … + w[p] * x[p] + b

这里 x[0] 到 x[p] 表示单个数据点的特征(本例中特征个数为 p+1),w 和 b 是学习模型的 参数,ŷ 是模型的预测结果。
 

岭回归

岭回归也是一种用于回归的线性模型,因此它的预测公式与普通最小二乘法相同。但在岭 回归中,对系数(w)的选择不仅要在训练数据上得到好的预测结果,而且还要拟合附加约束。我们还希望系数尽量小。换句话说,w 的所有元素都应接近于0。直观上来看,这意味着每个特征对输出的影响应尽可能小(即斜率很小),同时仍给出很好的预测结果。 这种约束是所谓正则化(regularization)的一个例子。正则化是指对模型做显式约束,以避免过拟合。岭回归用到的这种被称为 L2 正则化。(摘自书中)

接下来让我们看看岭回归在波士顿房价(书中给的数据集,506 个样本和 105 个导出特征)上的预测效果(如果要用该数据集,请先导入mglearn库)

from sklearn.linear_model import Ridge
X, y = mglearn.datasets.load_extended_boston()
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)
ridge = Ridge().fit(X_train, y_train)
print("Training set score: {:.2f}".format(ridge.score(X_train, y_train)))
print("Test set score: {:.2f}".format(ridge.score(X_test, y_test)))

对比我们的线性回归模型(见上篇文章)

 岭回归在训练集上的分数要低于线性回归,但在测试集上的分数更高。由于林回归的约束性更强,因此不容易出现过拟合;复杂度更小的模型意味着在训练集上的性能更差,但泛化性能更好。由于我们只对泛化性能感兴趣,所以应该选择岭回归模型而不是线性回归模型。

alpha 参数:岭回归具有参数alpha;作用是为了调节简单性(系数w都接近于 0)和训练 集性能二者对于模型的重要程度,如果不设置则默认alpha=1.0(如上述代码);alpha具体为多少取决于数据,在此不做讨论。增大 alpha 会使得系数更加趋向于 0,从而降低训练集性能, 但可能会提高泛化性能;减小 alpha 可以让系数受到的限制更小。

接下来我们来通过固定 alpha 值,但改变训练数据量来理解岭回归的正则化:

对波士顿房价数据集做二次抽样,并在数据量逐渐增加的子数据集上分 别对 LinearRegression 和 Ridge(alpha=1) 两个模型进行评估(将模型性能作为数据集大小 的函数进行绘图,这样的图像叫作学习曲线):

 由于岭回归是正则化的,因此它的训练集分数要整体低于线性回归的训练集分数。但岭回归的测试分数要更高,特别是对较小的子数据集。如果少于 400 个数据点,线性回归学不到任何内容。随着模型可用的数据越来越多,两个模型的性能都在提升,最终线性回归的性能追上了岭回归。这里要记住的是,如果有足够多的训练数据,正则化变得不那么重要,并且岭回归和线性回归将具有相同的性能。

lasso回归

与岭回归相同,使用 lasso 也是约束系数使其接近于 0,但用到的方法不同,叫作 L1 正则化。L1 正则化的结果是,使用 lasso 时 某些系数刚好为 0。这说明某些特征被模型完全忽略。这可以看作是一种自动化的特征选择。某些系数刚好为 0,这样模型更容易解释,也可以呈现模型最重要的特征。

我们继续将lasso回归呈现于波士顿房价的数据集上

from sklearn.linear_model import Lasso
lasso = Lasso().fit(X_train, y_train)
print("Training set score: {:.2f}".format(lasso.score(X_train, y_train)))
print("Test set score: {:.2f}".format(lasso.score(X_test, y_test)))
print("Number of features used: {}".format(np.sum(lasso.coef_ != 0)))

 可以发现,lasso回归的分数无论是在测试集还是训练集上都非常的差;这说明存在欠拟合,通过最后一行代码我们可以知道模型只用到了105个特征中的 4 个。与 岭回归类似,Lasso 也有一个正则化参数 alpha,可以控 制系数趋向于 0 的强度。在上一个例子中,我们用的是默认值 alpha=1.0。为了降低欠拟合,我们尝试减小 alpha。这么做的同时,我们还需要增加 max_iter 的值(运行迭代的最大次数)

lasso001 = Lasso(alpha=0.01, max_iter=100000).fit(X_train, y_train)
print("Training set score: {:.2f}".format(lasso001.score(X_train, y_train)))
print("Test set score: {:.2f}".format(lasso001.score(X_test, y_test)))
print("Number of features used: {}".format(np.sum(lasso001.coef_ != 0)))

 alpha 值变小,我们可以拟合一个更复杂的模型,在训练集和测试集上的表现也更好。模 型性能比使用 Ridge 时略好一点,而且我们只用到了 105 个特征中的 33 个。这样模型可能 更容易理解。 但如果把 alpha 设得太小,那么就会消除正则化的效果,并出现过拟合:

lasso002 = Lasso(alpha=0.0001, max_iter=100000).fit(X_train, y_train)
print("Training set score: {:.2f}".format(lasso002.score(X_train, y_train)))
print("Test set score: {:.2f}".format(lasso002.score(X_test, y_test)))
print("Number of features used: {}".format(np.sum(lasso002.coef_ != 0)))

 总结

在实践中,在两个模型中一般首选岭回归。但如果特征很多,你认为只有其中几个是重要 的,那么选择 Lasso 可能更好。同样,如果你想要一个容易解释的模型,Lasso 可以给出 更容易理解的模型,因为它只选择了一部分输入特征。

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

岭回归(Ridge)和Lasso 回归(笔记) 的相关文章

随机推荐

  • 蓝桥杯参赛须知

    又到了一年一届的蓝桥杯比赛报名的时间 很荣幸受老师邀请于昨天早上通过腾讯会议线上给大数据专业的学弟学妹们分享蓝桥杯参赛心得 想必也会有更多初次参加蓝桥杯的同学们在寻找相关的信息 记录生活的同时我想把这份文章分享给大家 如果有这方面的疑问 欢
  • SQLServer查看及设置最大连接数(转)

    转自 https blog csdn net duanbeibei article details 86573840 很多时候自己本地开发会遇到 打开几个连接正常访问 之后就报错误 这时候需要调整sqlserver 最大连接数 1 查询最大
  • targetSdkVersion 23升级到 27所遇到的问题记录

    由于XXX原因 把APP的 targetSdkVersion升级到了27 首先第一个问题 app下载文件 自动升级 使用okhttp下载文件就抛了异常 也不知道什么原因 咱也不敢问 因此 百度 Google 查到需要添加这一句代码 OkHt
  • mcq 队列_MCQ

    mcq 队列 1 Which possible Attacks in Quantum Cryptography can take place 1 量子密码术中可能发生哪些攻击 Possible Attacks in Quantum Cryp
  • org.springframework.beans.factory.BeanDefinitionStoreException: Failed to read candidate component c...

    解决这个报错的解决办法 org springframework beans factory BeanDefinitionStoreException Failed to read candidate component class file
  • 【Python】拯救你奇丑无比的代码的神器

    Python编程语言需要遵循PEP8规范 但是初学者往往记不住这个规范 代码写得比较丑 本文推荐几个神器来拯救奇丑无边的 python代码 一 Jupyter notebook 篇 Jupyter notebook的代码要想写得规范 推荐用
  • 【毕业设计】Stm32单片机的音乐播放器设计 - 物联网 嵌入式

    文章目录 0 前言 1 简介 2 主要器件 3 实现效果 4 设计原理 5 部分核心代码 6 最后 0 前言 这两年开始毕业设计和毕业答辩的要求和难度不断提升 传统的毕设题目缺少创新和亮点 往往达不到毕业答辩的要求 这两年不断有学弟学妹告诉
  • oracle 创建表性别字段取'男'或者'女',默认为'男'

    创建表时候就定义性别字段 DEFAULT 男 定义默认为 男 CHECK约束只能从 男 女 中选择 CREATE TABLE pp ID int NAME varchar 40 SEX varchar 2 DEFAULT 男 CHECK S
  • elementUI的el-select 默认值显示value不显示label问题

    el select 默认值显示value不显示label问题 在做编辑页面时 需要取到列表项数据回显默认值 在做select回显的时候遇到了这个问题 明明拿到的值和value中的值一样 但是就是不转换成label 这种情况一般出现在valu
  • 前端link标签引入css教程

    前端link标签引入css教程 首先我们在桌面新建一个文件 我们在这个文件里分别新建个存放HTML的文件夹以及css层叠样式表格的文件夹 然后我们打开dw 在文件选项找到新建 我们新建一个HTML的的文件 然后我们将它保存在桌面刚新建存放H
  • CenOS7 缺少 br_netfilter 模块解决办法

    环境 cat etc redhat release CentOS Linux release 7 4 1708 Core 在 etc sysctl conf中添加 net bridge bridge nf call ip6tables 1
  • C++练习

    include
  • 区块链平台介绍之Blockstream

    Blockstream是业内第一家旨在扩大比特币协议层功能的公司 也就是侧链 sidechain 的扩展机制 公司的重点是允许各种创新在一个开放 可互操作的平台上发生 Blockstream两轮融资共计拿到了7600万美元 迄今为止 该公司
  • labelImg的安装及其使用注意事项

    一 安装labelImg 在低版本python的安装方法 1 新建及激活进去虚拟环境 conda create name labelImg python 3 9 conda activate labelImg 注释 新建的虚拟环境的pyth
  • 夜神模拟器adb调试频繁断开解决办法

    下载了夜神发现adb调试老是自动断开 一看是跟Android sdk的adb版本不一致导致的 只需要将你sdk路径下的adb复制到夜神安装路径替换相应的adb即可 先看看之前adb在哪 adb version Android Debug B
  • MAX10调试NIOS笔记

    之前没怎么用ALTERA的器件 最近用MAX10做嵌入式NIOS MAX10是ALTERA推出的低价FPGA 且内置FLASH 比较适合成本敏感 且要求功能又复杂的应用 1 生成SOF文件和elf文件 我用的是Quartus Prime 1
  • macOS系统如何打开系统偏好设置中的【任何来源】这个选项

    刚买来的搭载macOS系统的电脑系统偏好设置中基本上都是没有 任何来源 这个选项的 而我们在下载非苹果商店中的APP时需要打开系统偏好设置中的 任何来源 这个选项才能下载成功 请按以下教程操作 1 打开终端 可以在菜单栏中查找或者在启动台中
  • python 导入cv2 报错:ImportError: libgthread-2.0.so.0: cannot open shared object file: No such file or di

    在linux中安装好opencv包之后 导入cv2报如下错误 ImportError libgthread 2 0 so 0 cannot open shared object file No such file or directory
  • Pytest:Allure的下载与安装

    通过Github的官网下载地址 速度感人 这里提供给另外一个地址下载 快速且方便 Allure 官网下载地址 下载速度快 1 点开链接后 找到版本最新的 Allure 2 点击进去文件目录 找到下载量最多的 zip 文件 3 下载好之后 直
  • 岭回归(Ridge)和Lasso 回归(笔记)

    最近在自学图灵教材 Python机器学习基础教程 在csdn以博客的形式做些笔记 对于回归问题 线性模型预测的一般公式如下 w 0 x 0 w 1 x 1 w p x p b 这里 x 0 到 x p 表示单个数据点的特征 本例中特征个数为