机器学习过拟合解决方案 - 正则化

在机器学习中,线性回归是一种常见的预测模型,旨在找到一个线性函数来尽可能准确地预测目标值。然而,当模型过于复杂,尤其是参数过多时,就会发生过拟合现象,即模型在训练数据上表现很好,但在新的、未见过的数据上表现不佳。为了控制过拟合,常用的方法之一就是添加正则化项。正则化通过对模型的复杂性加以惩罚,来避免过拟合。主要有两种正则化技术:L1正则化(Lasso回归)和L2正则化(Ridge回归)。

L1正则化(Lasso回归)

L1正则化通过在成本函数中添加权重的绝对值之和来工作。L1正则化的目标函数可以表达为:

J ( θ ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 + λ ∑ j = 1 n ∣ θ j ∣ J(\theta) = \frac{1}{2m} \sum_{i=1}^m (h_\theta(x^{(i)}) - y^{(i)})^2 + \lambda \sum_{j=1}^n |\theta_j| J(θ)=2m1i=1m(hθ(x(i))y(i))2+λj=1nθj

其中, m 是样本数量, h θ ( x ( i ) ) h_\theta(x^{(i)}) hθ(x(i))是假设函数,θ是模型参数, y 是目标值,λ 是正则化参数。

L1正则化的关键在于它倾向于产生稀疏的参数矩阵,即许多参数值会变成零。这样可以实现特征选择,因为模型会丢弃不重要的特征。

L2正则化(Ridge回归)

L2正则化通过在成本函数中添加权重的平方和来工作。L2正则化的目标函数可以表达为:

J ( θ ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 + λ ∑ j = 1 n θ j 2 J(\theta) = \frac{1}{2m} \sum_{i=1}^m (h_\theta(x^{(i)}) - y^{(i)})^2 + \lambda \sum_{j=1}^n \theta_j^2 J(θ)=2m1i=1m(hθ(x(i))y(i))2+λj=1nθj2

与L1正则化类似,λ是控制正则化强度的参数。不同的是,L2正则化倾向于让参数值接近于零但不会完全为零,这有助于处理参数间的共线性问题,并且使模型的输出更加稳定。

推导步骤

对于线性回归的损失函数(均方误差),当我们添加正则化项时,其梯度下降的更新规则会发生变化。以L2正则化为例,求解梯度如下:

∇ θ J ( θ ) = 1 m ( X T ( X θ − y ) ) + λ θ \nabla_\theta J(\theta) = \frac{1}{m} \left(X^T(X\theta - y)\right) + \lambda \theta θJ(θ)=m1(XT(y))+λθ

这里, X 是设计矩阵,其中包含了所有的输入特征。

更新规则变为:

θ : = θ − α ( 1 m ( X T ( X θ − y ) ) + λ θ ) \theta := \theta - \alpha \left(\frac{1}{m} \left(X^T(X\theta - y)\right) + \lambda \theta\right) θ:=θα(m1(XT(y))+λθ)

其中,α 是学习率。

L1正则化的梯度包含了绝对值,因此不可导于零点,通常使用次梯度或专门的优化算法如坐标下降来求解。

通过这些步骤,可以看出正则化如何通过调整成本函数和更新规则来减少模型复杂性,从而帮助控制过拟合。

我们可以通过一个简单的Python代码示例,使用scikit-learn库来实现L1和L2正则化。这个示例将包括生成一些合成数据,并应用Lasso回归(L1正则化)和Ridge回归(L2正则化)来拟合这些数据。下面是具体的步骤和代码:

示例

首先,确保你已经安装了scikit-learnnumpy。如果还没有安装,可以通过以下命令安装:

pip install numpy scikit-learn
生成数据

我们将生成一些合成数据来模拟一个线性关系,并添加一些噪声。

import numpy as np
from sklearn.model_selection import train_test_split# 生成合成数据
np.random.seed(0)
X = 2.5 * np.random.randn(100, 1) + 1.5   # 生成100个数据点
res = 0.5 * np.random.randn(100, 1)       # 噪声
y = 2 + 0.3 * X + res                     # 真实数据# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
应用Lasso回归(L1正则化)
from sklearn.linear_model import Lasso# 实例化Lasso模型
lasso_reg = Lasso(alpha=0.1)  # alpha是正则化强度
lasso_reg.fit(X_train, y_train)# 在测试集上评估模型
lasso_train_score = lasso_reg.score(X_train, y_train)
lasso_test_score = lasso_reg.score(X_test, y_test)
lasso_coeff_used = np.sum(lasso_reg.coef_ != 0)print("Lasso回归训练集分数: ", lasso_train_score)
print("Lasso回归测试集分数: ", lasso_test_score)
print("使用的特征数: ", lasso_coeff_used)
应用Ridge回归(L2正则化)
from sklearn.linear_model import Ridge# 实例化Ridge模型
ridge_reg = Ridge(alpha=1)  # alpha是正则化强度
ridge_reg.fit(X_train, y_train)# 在测试集上评估模型
ridge_train_score = ridge_reg.score(X_train, y_train)
ridge_test_score = ridge_reg.score(X_test, y_test)print("Ridge回归训练集分数: ", ridge_train_score)
print("Ridge回归测试集分数: ", ridge_test_score)

这段代码展示了如何通过Lasso和Ridge回归来减少线性模型的过拟合。这些正则化技术有助于在增加模型的泛化能力的同时,减少模型对训练数据的过度拟合。在实际应用中,可以通过调整alpha参数来控制正则化的强度,以达到最佳的模型性能。

更多问题咨询

Cos机器人

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/9396.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ros 学习记录(二)URDF小车运动控制

URDF小车运动控制 准备工作创建 robot_xacro.launch 接上文,想用键盘控制小车在Gazebo中移动。 准备工作 名称版本ROSNoeticGazebo11.11.0 创建 robot_xacro.launch 通过运行这个launch文件,可以启动Gazebo仿真环境,并在仿真环境中加载和…

【ITK配准】第十四期 BSpline可变形配准样例

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 公众号:VTK忠粉 前言 本文分享ITK配准中的BSpline可变形配准,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步! 你的点赞就是我的动力(^U^)ノ~YO BSpline可变形…

【八十五】【算法分析与设计】单调栈的全新版本,两个循环维护左小于和右小于信息,84. 柱状图中最大的矩形,85. 最大矩形

84. 柱状图中最大的矩形 给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。 求在该柱状图中,能够勾勒出来的矩形的最大面积。 示例 1: 输入:heights [2,1,5,6,2,3] 输出:10 解释&am…

nginx开启局域网https访问

需求 调试webRTC 功能,需要在局域网搭建https发给我协议; 实现 环境 局域网已部署有nginx; 部署可参考专栏文章 已安装Openssl 未安装可以执行 sudo yum install openssl 这个命令进行安装 生成证书和私钥 生成私钥:打开命令提示符或终端窗口,执行以下命令以生成私钥文件…

20240510金融读报:金监局出台商业银行代理保险通知银行保险做好五大篇文章意见碳减排票据实例债券通知实行

1、金监局印发《关于商业银行代理保险业务有关事项的通知》,修改原部分内容。银行合作保险工作无上限、合作应双方法人机构或授权一级分支机构签约、银行代理佣金率不能超备案 2、广碳所粤华发电公司绿色(碳减排)票据实例:背景&am…

日本站群服务器的优点以及适合该服务器的业务类型?

日本站群服务器的优点以及适合该服务器的业务类型? 日本站群服务器是指位于日本地区的多个网站共享同一台服务器的架构。这种服务器架构有着诸多优点,使其成为许多企业和网站管理员的首选。以下是日本站群服务器的优点以及适合该服务器的业务类型的分析&#xff1…

企业怎样进行项目管理?

在当今快节奏的商业环境中,企业要想保持竞争力,有效的项目管理是关键。项目管理不仅涉及到规划、执行和监控,还包括团队协作、资源分配和风险管理等多个方面。zz-plan 作为一款集多种功能于一体的在线甘特图协作软件,为企业项目管…

【小笔记】问答系统可视化实现的三种方式

下面三种方式都是基于Python的哈,从简单到复杂。 方式一:命令行交互问答 优点:原始简单直接 方式二:使用Python可视化框架 优点:无需学习前端技术栈即可搭建一个web。 streamlit:⭐️⭐️⭐️⭐️gra…

android原生开发学习路线

基础知识: 学习Java语言基础,包括面向对象编程、数据结构、算法等。了解Android操作系统的基本概念,包括它的架构和组件。 Android开发环境搭建: 安装Android Studio,这是官方推荐的集成开发环境(IDE)。配置Android SD…

MySQL——变量的定义与使用

新建链接,自带world数据库,里面自带city表格。 DQL # MySQL变量的定义与使用 #1、不允许数字作为开头 #2、只能用_或$符号,不允许使用其他符号 #3、不允许使用关键字或保留字 set userName小可爱; select userName; #标识符只影响当前查询#…

Web地理空间引擎

Web地理空间引擎是指用于在Web上创建和显示地理空间信息的软件平台。它们通常提供一组API和工具,用于加载、可视化和分析地理空间数据。Web地理空间引擎被广泛应用于各种应用,例如地图、导航、位置服务、游戏和模拟等。北京木奇移动技术有限公司&#xf…

24数维杯ABC题思路已更新!!!!

24数维杯A题保姆级思路+配套代码+后续参考论文 简单麦麦https://www.jdmm.cc/file/2710639/ 24数维杯B题保姆级思路+可执行代码+后续参考论文 简单麦麦https://www.jdmm.cc/file/2710640/ 24数维杯C题保姆级思路+可执…

四选一多路选择器

描述 制作一个四选一的多路选择器,要求输出定义上为线网类型。状态转移: d0 11 d1 10 d2 01 d3 00 信号示意图如下所示: 波形示意图: 输入描述: 输入信号 d1,d2,d3,d4 sel 类型 wire 输出描述…

宝塔面板如何删除一个站点

我们一般的网站都是PHPMySQL开发的,所以删除站点,就要先删数据库,再删网站目录 注意:一点要确保无用的再删 删除站点目录

Splint的移植

1. 简介 Splint(Secure Programming Lint)是美国弗吉尼亚大学计算机系于2002年左右开发的一款C程序静态检查工具。2007年发布3.1.2版。2019年时在该软件的网站上的最后消息是2010年8月发布的。 Splint用以下三种方式进行检查的控制: 1. Fl…

01 JVM -- JVM 体系结构、HotSpot

1. JVM、HotSpot、 OpenJDK 的区别 JVM (Java Virtual Machine) 是一个虚拟机HotSpot 是 JVM 规范的一个实现。HotSpot 虚拟机通过即时编译 (JIT) 技术将 Java 字节码转换为本地机器码,以提高程序的执行效率。OpenJDK 是一个项目名,它在 HotSpot 的基础…

嵌入式学习——51单片机——(流水灯、数码管)day16

1. 位运算在单片机中的使用 & : 按位与 &#xff08;与0得0、与1不变&#xff09;&#xff08;全1为1&#xff0c;有0得0&#xff09;指定位置0 1. 让一个字节第n位&#xff08;从右往左第n位&#xff09;置0 P0 & ~(1 << n); 2. 让一个字节第n位&#xff08;…

DRF之视图集

【 一 】视图集 ​ 在 RESTful 架构中&#xff0c;对资源的常规操作无非就是查询、新增、修改、删除等这么几种。为此&#xff0c;django-rest-framework 分别提供了对应通用类视图函数。但是&#xff0c;如果对同一个资源的不同操作逻辑分散在各个视图函数中&#xff0c;从逻…

开发中遇到SQL IN传入参数的个数超过2100的bug

在SQL Server或者MySQL中&#xff0c;当你在IN子句中需要处理的结果集可能超过2100个元素时&#xff0c;由于SQL Server对IN子句中的参数数量存在大约2100个左右的限制&#xff0c;直接使用IN会导致错误。为了解决这个问题&#xff0c;可以采取以下策略&#xff1a; 1、将参数…

C++STL细节,底层实现,面试题04

文章目录 19. STL19.1. 序列容器19.1.1. vector19.1.1.1. 底层实现和特点19.1.1.2. 常用函数19.1.1.3. emplace_back() vs push_back() 19.1.2. array19.1.2.1. 底层实现和特点19.1.2.2. 常用函数 19.1.3. deque19.1.3.1. 底层实现和特点19.1.3.2. 常用函数 19.1.4 list19.1.4.…