回归问题原理

news2025/3/3 18:03:41

回归问题是一种常见的监督机器学习任务,在很多领域均有广泛应用。其典型应用包括销量预测、库存预测、股票价格预测、天气预测等。本问将讨论线性回归,包括线性回归模型的目标函数(损失函数和正则函数)、线性回归模型的优化求解、回归任务的性能指标、线性回归模型的超参数调优以及使用sklearn实现线性回归模型的应用案例。

线性回归简介

回归分析:回归分析法指利用数据统计原理,对大量统计数据进行数学处理,并确定因变量Y与某些自变量X的相关关系,建立一个相关性较好的回归方程(函数表达式),并加以外推,用于预测今后的因变量的变化分析方法。回归的目标是学习一个输入X到输出Y的映射f,并根据该模型预测新的测试数据x对应的响应y=f(x),公式:
f ( x , w ) = w T + b f(x,w) = w^T+b f(x,w)=wT+b
线性回归模型,包括一元线性回归模型、多元线性回归和多项式线性回归模型等。

  • 依据定义的因变量与单个自变量可以构建如下模型:Y = w0 + w1 x (简单线性回归)
  • 依据定义的因变量与多个自变量可以构建如下模型:Y = w0 + w1x1 + w2x2 +…+wnxn(多元线性回归)
  • 依据定义的因变量与多个自变量可以构建如下模型:Y = w0 + w1x + w2x2 + …+ wnxn(多项式线性回归)

核心思想:从连续型统计数据中得到数学模型,然后将该数学模型用于预测。

回归是用来估计数据元素之间的数值关系

用来处理回归问题的,主要对数值型数据进行预测

应用:如股票预测,网站点击量预测等等

一元线性回归

线性回归模型是利用线性拟合的方式探寻数据背后的规律。先通过搭建线性回归模型寻找这些散点(也称样本点)背后的趋势线(也称回归曲线),再利用回归曲线进行一些简单的预测分析或因果关系分析。

在线性回归中,我们根据特征变量(也称自变量)来预测反应变量(也称因变量)。根据特征变量的个数可将线性回归模型分为一元线性回归和多元线性回归。

一元线性回归模型又称为简单线性回归模型,其形式可以表示为:y=ax+b,其中,y为因变量,x为自变量,a为回归系数,b为截距。

示例:

输入(x)输出(y)
0.55.0
0.65.5
0.86.0
1.16.8
1.47.0
import matplotlib.pyplot as plt

x = [0.5, 0.6, 0.8, 1.1, 1.4]
y = [5.0, 5.5, 6.0, 6.8, 7.0]
plt.scatter(x,y)

在这里插入图片描述

预测(目标)函数:y = w0+w1x
x: 输入
y: 输出
w0和w1: 模型参数

所谓模型训练,就是根据已知的x和y,找到最佳的模型参数w0 和 w1,尽可能精确地描述出输入和输出的关系。

5.0 = w0 + w1 × 0.5
5.5 = w0 + w1 × 0.6

在这里插入图片描述

单样本误差:

根据预测函数求出输入为x时的预测值:y’ = w0 + w1x,单样本误差为(y - y’)2

总样本误差:

把所有单样本误差相加即是总样本误差:

在这里插入图片描述

损失函数

所以损失函数就是总样本误差关于模型参数的函数,该函数属于三维数学模型,即需要找到一组w0 ,w1使得loss取极小值。

**核心:**找到w0和w1的值,使得预测值和真实值之间的平均差异最小。

**损失:**机器学习模型关于单个样本的预测值与真实值的差,损失越小,模型越好;如果预测值与真实值相等,就是没有损失。

**损失函数:**用于计算损失的函数模型每一次预测的好坏用损失函数来度量。

常见的损失函数:

  • 平均平方误差(Mean Squared Error (MSE)):也称为 L2 Loss,是机器学习、深度学习回归任务中最常用的一种损失函数,对离群点敏感。
  • 平均绝对误差( Mean Absolute Error(MAE)):也称为L1 Loss,使用绝对值,L1损失对离群点不敏感。
  • 胡伯损失(Huber):综合了L2损失和L1损失的优点。

线性回归模型的优化求解

模型的目标函数确定后,我们就可以采用合适的优化方法寻找最佳的模型参数。在线性回归模型中,模型参数包括线性回归系数w1,和截距w0。 当训练数据集不大时,最小二乘线性回归可采用解析求解法求解,解析求解法涉及到大量公式推导,此处暂不做讲解。除此以外还可以使用梯度下降法求解。

梯度下降(Gradient Descent)

梯度下降法是求解无约束优化问题最常用的方法之一,亦被称为最速下降法。最小二乘回归和岭回归均可采用梯度下降法求解,Lasso回归由于目标函数中有L1正则函数而不可导,因此不能采用梯度下降法求解。梯度下降法是一种基于搜索的最优化方法,在机器学习中,熟练的使用梯度法(下降法或上升法)求取目标函数的最优解是非常重要的。线性回归算法模型的本质就是最小化一个损失函数,然后求出损失函数的参数的数学解; 梯度下降法是在机器学习领域中最小化损失函数的最为常用的方法。

在这里插入图片描述

假如你迷失在山上的浓雾之中,完全看不见下山的方向,你能感觉到的只有脚下的路面坡度。快速到达山脚的一个策略就是沿着最陡的方向下坡。这就是梯度下降的做法:通过测量参数向量θ相关的损失函数的局部梯度,并不断沿着降低梯度的方向调整,直到梯度将为0,达到最小值! 每下降一步都去选择最陡峭的方向,然后踏出一步。因此没迭代一次需要考虑两个变量,一个是方向(朝哪边走),一个是步长(走多少)。方向就是向量θ的斜率,步长是一个超参数叫做学习率(learning_rate)。

学习速率(learning_rate)

学习率是一个超参数,常用字母η表示,学习率的取值会影响获得最优解的速度;η 太小,算法需要经过大量迭代才能收敛,这将耗费很长时间;反过来学习率太大,可能会越过最小值直接到达另一边,甚至有可能比之前的起点还要高,这会导致算法发散,值越来越大,无法找到最优解。学习率是超参数需要手动调节,取值范围一般在[0, 1]之间。下图展示了不同学习率对梯度下降的影响。

在这里插入图片描述

梯度下降陷阱

并不是所有的损失函数都是二次曲线(看起来像碗),有的可能看着像洞、山脉、高原或者各种不规则的地形,导致很难收敛到最小值。如下图所示,梯度下降的两个主要挑战:如果随机初始化θ,算法从左侧起步,那么会收敛到一个布局最小值,而不是全局最小值。如果从右侧起步,那么需要很长时间才能越过正片“高原”,如果迭代次数太少,将永远无法到达全局最小值。

在这里插入图片描述

​ 幸好,线性回归模型的MSE损失函数恰好是一个凸函数,这意味着连接曲线上任意两点的线段永远不会根曲线相交。也就是说不存在局部最小值,只有一个全局最小值。同时它也是一个连续函数,所以斜率不会产生陡峭的变化。这两点保证即便是乱走,MSE损失函数的梯度下降都可以趋近到全局最小值,只需要等待足够的时间,学习率也不需要太高。MSE损失函数虽然是碗状的,但有些时候如果不同特征的尺寸差距巨大,那么它也有可能是一个非常平坦的碗,像盘子一样。这样的话虽然最终还是会抵达最小值,但是这需要花费大量的时间。因此应用梯度下降时,需要保证所欲特征值的大小比例都差不多(比如使用特征工程对数据进行预处理,标准化 StandarScaler),否则收敛的时间会很长。

​ 要实现梯度下降,你需要计算每个模型关于参数θj,损失函数会改变多少。这被称为偏导数。关于参数θj的损失函数的偏导数,计作:

在这里插入图片描述

公式推导太难写,此处省略…

​ 梯度下降有很多种类可以选择,不同种类有各自的特点,下面将介绍梯度下降的分类

梯度下降分类

批量梯度下降:

在计算梯度下降的每一步时,都是基于完整的训练集X的。这就是为什么该算法被称为批量梯度下降,每一步都使用整批训练数据。因此面对非常庞大的训练集时,算法会变得极慢。但是,梯度下降算法随特征数量扩展的表现比较好。如果要训练的线性模型拥有几十万个特征,使用梯度下降比标准方程或者SVD要快很多。并且能够达到最小值,在最小值处停止。一旦有了梯度向量,哪个点向上,就朝反方向下坡。也就是θ-ΔMSE(θ)。这时学习率η就发挥作用了:用梯度向量乘以η确定下坡步长的大小,梯度下降的公式:

θ(下一步)=θ-ηΔMSE(θ)

批量梯度下降的主要问题是它要用整个训练集来计算每一步的梯度,所以训练集很大时,算法会特别慢。与之相反的就是随机梯度下降。

在这里插入图片描述

随机梯度下降:

随机梯度下降每一步在训练集中随机选择一个实例,并且仅基于该单个实例来计算梯度。显然这让算法变得快很多,因为每次迭代都只需要操作少量的数据。它也可以被用来训练海量的数据集,因此每次迭代只需要在内存中运行一个实例即可。另一方面,由于算法的随即性质,它比批量梯度下降要不规则的多。损失函数将不再是缓缓降低直到最小值,而是不断上下波动,但从整体来看,还是在慢慢下降。随着时间的推移最终会非常接近最小值,但是即使它到达了最小值,依然还会持续反弹,永远不会停止。所以算法停下来的参数值肯定时足够好的,但不是最优的。

当损失函数非常不规则时,随机梯度下降其实可以帮助算法跳出局部最小值,所以相比批量梯度下降,它对找到全局最小值更有优势。随机性的好处在于可以逃离局部最优,但缺点是永远定位不出最小值。要解决这个困境,可以通过逐步降低学习率。开始的步长比较大,然后越来越小,让算法尽量靠近全局最小值。这个过程叫做模拟退火。

在这里插入图片描述

​ 由于实例是随机选取的,因此某些实例可能每个轮次中被选取几次,而其他实例则可能根本不被选取。如果要确保算法在每个轮次都遍历每个实例,则另一种方法是对训练集进行混洗(确保同时对输入特征和标签进行混洗),然后逐个实例进行遍历,然后对其进行再次混洗,以此类推。但是这种方法通常收敛缓慢。

小批量梯度下降

小批量梯度下降在每一步中,不是根据完整得训练集或仅基于一个实例来计算梯度,小批量梯度下降在称为小型批量的随机实例集上计算梯度。小批量梯度下降优于随机梯度下降的主要优点是,可以通过矩阵操作的硬件优化来提高性能,特别是在使用GPU时。小批量梯度下降最终将比随机梯度下降走得更接近最小值,但它可能很难摆脱局部最小值。

以下三种梯度下降类型得比较图:

在这里插入图片描述

线性回归算法的比较

m为训练实例的数量(行数,样本数量),n为特征数量(列数)

算法m很大核外支持n很大超参数要求缩放Scikit-Learn
标准方程0N/A
SVD0LinearRegression
批量GD2SGDRegressor
随机GD>=2SGDRegressor
小批量GD>=2SGDRegressor

多变量函数的梯度下降

左边是假设函数,右边是损失函数。因为有两个参数θ0和θ1,这使得我们的损失函数在三维图形上类似一个碗型。根据不同的训练集,会得到不同的碗型,底部平面的任何一个点表示了一个θ0和θ1,而这个三维图形在该点上的垂直高度即代表了相应的损失函数值。

在这里插入图片描述
以上内容为简单线性回归的原理以及一些概念,学习回归分析必须掌握的内容。

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

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

相关文章

【一包通刷】晶晨S905L3A/B_完美AI语音线刷包_打开ADB_ROOT权限

【9.0一包通刷】晶晨S905L3A/B_完美AI语音线刷包_默认打开ADB ROOT权限支持游戏启动_万物互联启动动画 适用型号:M401A、CM311-1a、CM311-1sa、B863AV3.1-M2、B863AV3.2-M、UNT403A、M411A等等; 系统版本:Android9 系统桌面:超…

【机器学习项目实战10例】(五):基于随机森林的假新闻检测项目

💥 项目专栏:【机器学习项目实战10例】 文章目录 一、基于随机森林的假新闻检测项目二、数据集介绍三、导包四、加载数据集五、划分训练集、测试集六、构建模型七、精度测试八、网格搜索一、基于随机森林的假新闻检测项目 在当今时代,传播错误信息已经成为一个真正的问题,…

初试hashlib加密模块

文章目录 一、加密解密基础二、使用hashlib模块实现数据加密(一)加密数据1、编写程序,实现功能2、运行程序,查看结果(二)登录加密校验1、编写程序,实现功能2、运行程序,查看结果一、加密解密基础 二、使用hashlib模块实现数据加密 (一)加密数据 1、编写程序,实现功…

【DeepLearning 8】Self-Attention自注意力神经网络

🍊本文主要介绍了Self-Attention产生的背景以及解析了具体的网络模型 一、Introduction 很多时候,我们需要输入的数据非常的复杂,难以用统一、固定长度的向量来表示。比如NLP中长短不一的句子。此外,我们需要输出的数据有时候也会…

Spring Security中文文档

Spring Security中文文档 来源:https://www.springcloud.cc/spring-security.html#overall-architecture 作者 Ben Alex,Luke Taylor,Rob Winch,Gunnar Hillert,Joe Grandja,Jay Bryant5.1.2.RELEASE…

使用Redis查询数据库数据增加访问速度小案例

黑马B栈网课案例 文章目录案例需求:SQL建表所需jar包项目结构代码展示index.html首页面domainProcince.javadaoProvinceDaoProvinceDaoImplserviceProvinceServiceProvinceServiceImplservletJDBC工具类配置文件jedis.propertiesdruid.properties案例需求&#xff1…

JSP学习日记

JSP简述 Java Sever Pages----->Java服务器界面 用于前后端结合 jsp为什么淘汰? 由于JSP的前后端耦合性极高,编写代码非常臃肿。前后端的代码放在一起,所以JSP可以看成是已经被淘汰的技术。 为什么还要学jsp? 由于一些公司…

大数据:HDFS的Shell常用命令操作

文章目录一 HDFS的Shell介绍二 HDFS常用命令操作01 创建目录(1)创建单层目录(3)创建多层目录02 查看目录03 上传本地文件到HDFS04 查看文件内容05 下载HDFS文件到本地06 删除HDFS文件07 删除HDFS目录08 移动目录或文件09 文件合并…

数据库大咖,带你深入高性能MySQL架构系统,值得一看

MySQL 作为互联网中非常热门的数据库,在高并发业务场景下,一条好的 MySQL 语句能为企业节省大量的运作时间和成本,这也是为何互联网大厂面试官最爱考察数据库底层和性能调优的原因。因此,了解其底层原理和架构的设计非常重要&…

Go-Excelize API源码阅读(三十五)——SetSheetCol

Go-Excelize API源码阅读(三十五)——SetSheetCol 开源摘星计划(WeOpen Star) 是由腾源会 2022 年推出的全新项目,旨在为开源人提供成长激励,为开源项目提供成长支持,助力开发者更好地了解开源…

【C++数据结构】程序性能分析

程序性能分析 2.1 什么是程序性能 程序性能:所谓程序性能(performance of a program)是指运行这个程序所需要的内存和时间的多少。 性能分析:在性能分析(performance analysis)时,采用分析方…

ceph命令应用

记录:337 场景:在CentOS 7.9操作系统上,在ceph集群中,使用ceph命令查看ceph集群信息,以及mon、mgr、mds、osd、rgw等组件信息。 版本: 操作系统:CentOS 7.9 ceph版本:ceph-13.2.…

JavaSE从基础到入门:抽象类和接口

1.抽象类 1.抽象类的概念 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。 比如&#x…

Android App开发实战项目之仿喜马拉雅的听说书App实现(超详细 附源码)

需要全部源码请点赞关注收藏后评论区留下QQ~~~ 一、需求分析 用户不仅能在平台上收听音频,还能成为内容创作者,总之长音频分享平台需要满足两种角色的使用:一种是作为内容创作者发布自己的音频,另一种是作为用户欣赏平台上的已有…

java项目-第162期ssm电影售票系统_ssm毕业设计_计算机毕业设计

java项目-第162期ssm电影售票系统_ssm毕业设计_计算机毕业设计 【源码请到资源专栏下载】 今天分享的项目是《ssm电影售票系统》 该项目分为2个角色,管理员、用户。 用户可以浏览前台电影信息、新片预告,并且可以进行影片预订、 座位选座。用户登录后台…

谈数据库查询涉及的存储效率

(Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu) 参考:https://blog.csdn.net/Sword52888/article/details/125352635 11月马上也进入尾声了;紧接着的12月,新年也就不远了… 今年对数据查询做了许多的分析、测试、修改、验证&#xf…

centOS 7 Install Harbor(私有镜像仓库)V2

一、安装docker环境 略. 二、下载离线安装包 下载地址https://github.com/goharbor/harbor/releases/download/v1.10.15/harbor-offline-installer-v1.10.15.tgz三、拷贝到服务器/application #解压 tar -xvf harbor-online-installer-v1.2.0.tgz #生成证书 cd /applicati…

【计算机毕业设计】45.医院挂号系统

一、系统截图(需要演示视频可以私聊) 摘 要 伴随着社会以及科学技术的发展,互联网已经渗透在人们的身边,网络慢慢的变成了人们的生活必不可少的一部分,紧接着网络飞速的发展,管理系统这一名词已不陌生&…

【计算机毕业设计】41.航空订票系统

摘 要 网络的广泛应用给生活带来了十分的便利。所以把航空订票与现在网络相结合,利用JSP技术建设航空订票系统,实现航空订票的信息化。则对于进一步提高航班公司的发展,丰富航空订票经验能起到不少的促进作用。 航空订票系统能够通过互联网…

数字信号处理-10-并行FIR滤波器MATLAB与FPGA实现

前言 本文介绍了设计滤波器的FPGA实现步骤,并结合杜勇老师的书籍中的并行FIR滤波器部分进行一步步实现硬件设计,对书中的架构做了复现以及解读,并进行了仿真验证。 并行FIR滤波器FPGA实现 FIR滤波器的结构形式时,介绍了直接型、…