【机器学习】线性回归

一、什么是回归

        分类任务很好理解,比如去银行贷款,银行会根据贷款人的年龄、工资(特征)去决定贷款(标签1)和不贷款(标签0)。而回归任务,是预测允许贷款的额度(标签是一个一定范围的数值)。如下图所示:

        每个特征对结果的影响程度不同,比如对于银行贷款问题,工资(x_{1})肯定要比年龄(x_{2})的影响大。因此给x_{1}x_{2}分别分配一个权重\theta _{1}\theta _{2}。现在就得到了一个模型y=\theta _{1}x_{1}+\theta _{2}x_{2}

现在我们需要做的事就是,什么样的\theta _{1}\theta _{2}对于这个模型来说是最合适的

二、什么是线性

        上面这个图中,红色的点就是数据,绿色的面就是模型。通俗地讲,线性就是这个模型是一个平面,并不能做到与每一个点完全拟合(不是曲面)。因此,对于线性回归任务,就是要找到一个平面,这个平面能尽可能地拟合更多的数据

三、数学表达

(1)拟合的平面

        现在,我们得到了一个拟合的平面:h_{\theta}\left ( x \right )=\theta _{0}+\theta _{1}x_{1}+\theta _{2}x_{2}。其中,\theta _{0}是偏置系数,它的作用是对平面的位置进行微调,而不改变平面的倾斜度,已找到最合适的平面。为了方便计算机的计算,会先将数据转换成矩阵的形式,即把拟合平面转换成矩阵的叉乘。如下面的一个数据:

        每一个样本就是矩阵的行,每一个特征就是矩阵的列。补充x_{0}全为1,是为了给拟合平面h_{\theta}\left ( x \right )中的\theta _{0}配一个权重,方便转换成矩阵叉乘的形式,补充值为1就不会对平面有任何影响。最后得到拟合的平面:h_{\theta}\left ( x \right )=\theta _{}^{T}X,其中\theta _{}^{T}大小为1x3,X大小为3xn,3是特征个数(包含x_{0}),n是样本个数。

        真实值与预测值之间存在差异,如图上粉色的点是预测值,同一个x_{1}x_{2}对应的红色点就是真实数据,它们之间的差异被称为误差,记作\varepsilon。因此对于每一个样本的真实标签y_{}^{\left ( i \right )}和模型预测的标签\theta _{}^{T}x_{}^{\left ( i \right )},都存在这样的关系:y_{}^{\left ( i \right )}=\theta _{}^{T}x_{}^{\left ( i \right )}+\varepsilon _{}^{\left ( i \right )}

(2)误差的含义

        先说明概念:误差\varepsilon _{}^{\left ( i \right )}是独立同分布的,并且服从均值为0、方差为\theta_{}^{2}的高斯分布

        为什么独立:样本之间是相互独立的,比如张三和李四一起到银行贷款,贷多少钱与别人没关系,不会因为张三叫银行给李四多贷点,银行就给多贷。因此,样本对应的误差,误差之间也是相互独立的。故在收集数据时,希望样本间是独立的,不希望他们之间有顺序或者有逻辑关系,在对样本进行学习前,通常会对它们进行shuffle(打乱)

        为什么同分布:比如张三去建行贷款,李四去农行贷款,这两个银行的贷款规则都不一样,用同一个模型去预测就不太准确了。因此尽可能要求误差同分布,类似于生物实验中的单一变量原则

        为什么是均值为0的高斯分布:均值为0的意思,打个比方,银行会少给有些人额度,也会多给有些人额度(多给少给的部分就相当于误差),但综合起来的平均值是趋向于0的。高斯分布又叫正态分布,它的形状是中间多,两边少,均值为0的正态分布是以\varepsilon =0为对称轴的,如上图所示。达到的效果就是,误差比较小的情况是比较正常的(银行多给或者少给几块钱),出现误差比较大的情况的概率要尽可能小(银行多给或者少给几万块钱)。所以,误差服从均值为0的高斯分布目的是让大多数误差接近于0。

        那我们所求的模型的误差,要完全符合均值为0、方差为\theta_{}^{2}的高斯分布吗?其实,数学推导只是对理论的支撑,实际的情况并不能做到百分百准确,我们做的只是找到最优解,能解决实际的问题即可,而不是要求完全与数学得到的数值一模一样。

        因为误差服从高斯分布,所以将均值0带入正态分布的概率密度函数得到(expA表示e^{A}):

p\left ( \varepsilon _{}^{\left ( i \right )} \right )=\frac{1}{\sqrt{2\pi }\sigma }exp\left ( -\frac{\left ( \varepsilon _{}^{\left ( i \right )}-0 \right )^{2}}{2\sigma ^{2}} \right )                                    式(1)

        这是一个关于误差\varepsilon ^{\left ( i \right )}的式子,但是我们并不需要求解\varepsilon ^{\left ( i \right )},而是需要求解权重\theta ^{T}。因此,把y_{}^{\left ( i \right )}=\theta _{}^{T}x_{}^{\left ( i \right )}+\varepsilon _{}^{\left ( i \right )}改成y_{}^{\left ( i \right )}-\theta _{}^{T}x_{}^{\left ( i \right )}=\varepsilon _{}^{\left ( i \right )},再代入式(1),得到:

p\left (y^{\left ( i \right )}|x^{\left ( i \right )};\theta \right )=\frac{1}{\sqrt{2\pi }\sigma }exp\left ( -\frac{\left (y^{\left ( i \right )}-\theta ^{T}x^{\left ( i \right )}\right )^{2}}{2\sigma ^{2}} \right )                                式(2)

        这样就转换成了关于\theta ^{T}的式子。接下来我们要求解的问题是,\theta是什么值,能让误差最小,即预测值\theta _{}^{T}x_{}^{\left ( i \right )}更接近真实值y_{}^{\left ( i \right )}

(3)最大似然估计

        让真实值出现概率最大的参数,用在接下来的预测中,能让预测值更接近于真实值。比如,在学校中抽取100个人全是男生,那就说明在这个学校中,抽取的一个同学是男生的概率很大,那么再抽取一个人,更可能是男生。

        最大似然估计的基本思想是:在已知数据样本的情况下(已知真实标签y^{\left ( i \right )}和对应的特征x^{\left ( i \right )}),寻找能够使得这些数据出现的概率最大的参数值(寻找让真实值出现概率最大的\theta),这个概率就用似然函数表示。换句话说,通过最大化似然函数来估计参数值(求得\theta)。

① 写出似然函数

        似然函数,即样本出现的概率关于模型参数的函数。因为需要用很多个样本(抽取很多个都是男生,再抽一个是男生的概率才大),并且每个样本都是独立同分布的,所以是将式(2)进行累乘(独立的随机变量,它们的联合概率可以表示为各自边缘概率的乘积),得到似然函数:

L\left ( \theta \right )=\prod_{i=1}^{m}p\left (y^{\left ( i \right )}|x^{\left ( i \right )};\theta \right )=\prod_{i=1}^{m}\frac{1}{\sqrt{2\pi }\sigma }exp\left ( -\frac{\left (y^{\left ( i \right )}-\theta ^{T}x^{\left ( i \right )}\right )^{2}}{2\sigma ^{2}} \right )         式(3)

② 对似然函数取对数

        为了方便后续求导,对似然函数取对数,改变的只是概率的最大值,而不会改变概率的最大值对应的参数值\theta。因此,取对数对我们求\theta没有影响。

logL\left ( \theta \right )=log\prod_{i=1}^{m}\frac{1}{\sqrt{2\pi }\sigma }exp\left ( -\frac{\left (y^{\left ( i \right )}-\theta ^{T}x^{\left ( i \right )}\right )^{2}}{2\sigma ^{2}} \right )=\sum_{i=1}^{m}log\frac{1}{\sqrt{2\pi }\sigma }exp\left ( -\frac{\left (y^{\left ( i \right )}-\theta ^{T}x^{\left ( i \right )}\right )^{2}}{2\sigma ^{2}} \right )                     式(4)

        将式(4)化简为:

logL\left ( \theta \right )=mlog\frac{1}{\sqrt{2\pi }\sigma}-\frac{1}{\sigma ^{2}}\frac{1}{2}\sum_{i=1}^{m}\left (y^{\left ( i \right )}-\theta ^{T}x^{\left ( i \right )}\right )^{2}                    式(5)

        对于\theta来说,mlog\frac{1}{\sqrt{2\pi }\sigma}是一个常数;\frac{1}{\sigma ^{2}}\frac{1}{2}\sum_{i=1}^{m}\left (y^{\left ( i \right )}-\theta ^{T}x^{\left ( i \right )}\right )^{2}是一个恒正的值。因此,想求logL\left ( \theta \right )的最大值,就是\frac{1}{\sigma ^{2}}\frac{1}{2}\sum_{i=1}^{m}\left (y^{\left ( i \right )}-\theta ^{T}x^{\left ( i \right )}\right )^{2}的最小值,然后把它常数项\frac{1}{\sigma ^{2}}去掉,保留\frac{1}{2}(后面求导正好可以抵消),得到目标函数(最小二乘法)

J\left ( \theta \right )=\frac{1}{2}\sum_{i=1}^{m}\left (y^{\left ( i \right )}-\theta ^{T}x^{\left ( i \right )}\right )^{2}                                      式(6)

        x^{\left ( i \right )}要看成nx1的矩阵,包含n个特征。如下图:

        把分开算r^{\left ( i \right )}转换成,直接算出一整个r向量:

        因为是算的各项平方,不用考虑正负号,所以y-X\theta还是X\theta -y计算的结果都是一样的。因此,把r^{(i)}这个中间结果去掉,J\left ( \theta \right )就可以转化为:

J\left ( \theta \right )=\frac{1}{2}\left (X\theta -y\right )^{T}\left (X\theta -y\right )                                       式(7)

        其中X大小为mxn,m是样本个数,n是特征个数。

③ 求偏导并令偏导为0

        求偏导:

        \frac{\partial J\left ( \theta \right )}{\partial \theta }=\frac{\partial (\frac{1}{2}\left (X\theta -y\right )^{T}\left (X\theta -y\right ))}{\partial \theta }=\frac{\partial (\frac{1}{2}\left (\theta^{T}X^{T} -y^{T}\right )\left (X\theta -y\right ))}{\partial \theta }=\frac{\partial \frac{1}{2}\left (\theta^{T}X^{T}X\theta-\theta^{T}X^{T}y- y^{T}X\theta + y^{T}y\right )}{\partial \theta }=\frac{1}{2}(2X^{T}X\theta -X^{T}y-(y^{T}X)^{T})=X^{T}X\theta-X^{T}y

        令偏导为0:

X^{T}X\theta-X^{T}y=0

        两边乘上\left ( X^{T}X \right )^{-1}得到:

\theta =\left ( X^{T}X \right )^{-1}X^{T}y

③ 存在的问题

        这样求解得到的\theta,仅仅是通过一次计算得到,并没有体现出机器学习逐步的学习过程;并且对X^{T}X求逆不一定成功,因为不是所有的矩阵都有逆矩阵,这种方法在线性回归问题上能求得结果(特例),但在其它问题上并不适用。因此,最小二乘法并不通用,我们需要另寻方法。

四、梯度下降

        交给机器一堆数据,再给一个学习的方向(目标函数达到最小值),然后机器朝着这个目标,一步步迭代优化完成,而不是直接一步求出结果,这体现了机器学习的过程(优化思想)梯度下降就是优化算法之一

(1)通俗地理解

        如上图所示,想要快速地到达最小值处,就需要每次沿着当前所在位置的梯度方向的反方向走梯度的方向是函数增长最快的方向),每走一步都需要更新梯度的方向。如果步长太大,可能会直接走到对面,反复在山谷之间胡乱震荡,而达到不了谷底(无法收敛或收敛效果不好);或者悬在空中。因此,步长应该小一点,稳步向下走,最终在谷底的很小的一个局部之间徘徊,就说明趋于了稳定,达到了最小值处。但是步长也不能过于小,因为会导致到达最小值处的速度非常慢

        梯度下降法需要分别计算不同参数的梯度,再将所有梯度对应的向量相加,就得到要走的方向和步长。如下图所示:

(2)参数的更新

① 目标函数

        为什么要将所有样本的误差求和:算法在更新参数时要考虑所有样本的影响,而不是仅仅依赖于部分样本。

        为什么是总误差的均值:均值可以减少异常值对总误差的影响,并且尤其在大规模数据集上,计算均值的梯度比计算总和的梯度更高效

        只是为了求目标函数最小点,为什么不把平方去掉,改为绝对值,让式子更简单呢:如果改为绝对值,x的绝对值会在x=0处不可导,同理也会让目标函数在某点处不可导,这样会多一些讨论情况,求最小点不方便。

        为什么不把1/2去掉:后面求偏导,会刚好把1/2抵消掉。

        目标函数:

J\left ( \theta \right )=\frac{1}{2m}\sum_{i=1}^{m}\left (y^{\left ( i \right )}-h_{\theta}\left ( x^{\left ( i \right )} \right )\right )^{2}

        将目标函数对\theta_{j}求偏导(跟\theta_{j}无关的项直接当成常数,求导消掉了):

\frac{\partial J\left ( \theta \right )}{\partial \theta _{j}}=-\frac{1}{m}\sum_{i=1}^{m}\left (y^{\left ( i \right )}-h_{\theta}\left ( x^{\left ( i \right )} \right )\right )x_{j}^{\left ( i \right )}

② 按梯度下降的分类更新参数

        \frac{\partial J\left ( \theta \right )}{\partial \theta _{j}}是梯度方向,更新参数的方向是梯度反方向,所以更新当前的\theta_{j},加的是 -\frac{\partial J\left ( \theta \right )}{\partial \theta _{j}},正好把式子里的负号抵消掉了。以下的\theta _{j}^{'}是更新后的参数;x_{j}^{\left ( i \right )}中的 i 和 j 表示第 i 个样本的第 j 个特征;\alpha是学习率,也就是步长。

        批量梯度下降\theta _{j}^{'}=\theta_{j}+\alpha \frac{1}{m}\sum_{i=1}^{m}\left (y^{\left ( i \right )}-h_{\theta}\left ( x^{\left ( i \right )} \right )\right )x_{j}^{\left ( i \right )}。它的优点是每次迭代比较平稳地往好的方向走,就算有浮动也比较少和细微;缺点是会计算所有样本的误差和,效率比较慢

        随机梯度下降:每次迭代随机抽取一个样本做处理,效率大大提升,但是抽取的样本可能并不好。因此,每次参数的更新,可能是往目标函数减小的方向走,也可能是往目标函数增大的方向走,下降不平稳且精准度较低\theta _{j}^{'}=\theta_{j}+\alpha \left (y^{\left ( i \right )}-h_{\theta}\left ( x^{\left ( i \right )} \right )\right )x_{j}^{\left ( i \right )}。下图中通过损失曲线图,表现了两种梯度下降算法的区别,损失相当于误差:

        小批量梯度下降:在实战中通常使用这个算法,它综合了批量梯度下降和随机梯度下降,每次迭代随机抽取batch个样本,既不会因为样本数量太少导致收敛过于混乱而精准度过低,也不会因为样本数量太大而计算效率过低\theta _{j}^{'}=\theta_{j}+\alpha \frac{1}{batch}\sum_{k=i}^{i+batch-1}\left (y^{\left ( k \right )}-h_{\theta}\left ( x^{\left ( k \right )} \right )\right )x_{j}^{\left ( k \right )}

        上面所说的batch,按照程序员的习惯,通常是取值2^{6}2^{7}2^{8},即64、128、256。在计算机性能允许的情况下,batch取较大值更好,很少低于64。

        学习率(LR):即步长,通常取较小的值,如0.01、0.001。实战时先试一下0.01,如果效果不好,再试0.001,小到计算机性能和时间能容忍的程度(计算机性能差跑不起来、学习时间要好几年肯定不行了)。如下图是不同学习率的损失曲线图:

        从上图可以看到,非常高的学习率会导致损失值无法收敛;高的学习率会导致损失值收敛效果不好;低的学习率导致损失值收敛速度缓慢;好的学习率让损失值既收敛效果较好,又收敛速度较快。通常以较高学习率开始训练,加速更新模型;然后根据学习进度逐渐降低学习率。

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

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

相关文章

【学习笔记】灰色预测 GM(1,1) 模型 —— Matlab

文章目录 前言一、灰色预测模型灰色预测适用情况GM (1,1)模型 二、示例指数规律检验(原始数据级比检验)级比检验的定义GM(1,1) 模型的级比检验 模型求解求解微分方程 模型评价(检验模型对原始数据的拟合程度)残差检验级比偏差检验 三、代码实现----Matlab级比检验代码模型求解代…

0成本学习Liunx系统【只需要一台笔记本电脑,无需购买云服务器】

【准备工作,需要软件】: 1:MobaXterm 【服务器连接工具(免费开源)】 2:CentOS-7-x86_64-DVD-2009.iso 【CentOS-7 镜像】 3:VirtualBox-7.0.20-163906-Win.exe 【虚拟机壳子】 4&…

20 动态内存管理

目录 一、为什么要有动态内存管理 二、malloc 和 free (一)malloc (二)free 三、calloc 和 realloc (一)calloc (二)realloc 四、常见的动态内存错误 (一&#…

前端本地代理配置方式

Whistle 介绍 Whistle 是一个基于 Node.js 的跨平台 Web 调试工具。允许捕获、查看和修改 HTTP/HTTPS 网络请求。通过使用 Whistle,可以轻松地进行接口代理、抓包、模拟数据、修改请求和响应等操作,以便在前端开发中调试网络请求。 Proxy SwitchyOmega…

133-横向移动域控提权NetLogonADCSPACKDC永恒之蓝

除了前面讲到的口令密码进行横向移动,还存在使用系统漏洞进行的横向移动的方式,本节课就是讲一些域内系统的漏洞,主要是域控提权的一些漏洞 1、横向移动-系统漏洞-CVE-2017-0146(ms17-010,永恒之蓝) 2、横…

Java之迭代器的使用

Java之迭代器的使用 摘要基础知识List迭代器Map迭代器 摘要 本博客主要讲解容器的迭代器的使用,包括List、Set和Map等容器 基础知识 这是类的继承关系图 迭代器的原理(一开始迭代器并不指向任何有效元素): List迭代器 public class TestIterator …

World of Warcraft [CLASSIC] the Eye of Eternity [EOE] P1-P2

World of Warcraft [CLASSIC] the Eye of Eternity [EOE] 永恒之眼(蓝龙) 第一阶段 第二阶段 第三阶段 载具1-6技能介绍 World of Warcraft [CLASSIC] the Eye of Eternity [EOE]_永恒之眼 eoe-CSDN博客 永恒之眼怎么出副本呢,战斗结束&am…

【Java】/* 链式队列 和 循环队列 - 底层实现 */

一、链式队列 1. 使用双向链表实现队列,可以采用尾入,头出 也可以采用 头入、尾出 (LinkedList采用尾入、头出) 2. 下面代码实现的是尾入、头出: package bageight;/*** Created with IntelliJ IDEA.* Description:* User: tangyuxiu* Date: …

windows安装android studio

下载 https://developer.android.google.cn/studio?hlzh-cn 安装 打开cmd输入如下命令 android-studio-2024.1.1.12-windows.exe /NCRC 注意 运行命令后可能还报错,但是会出现弹窗 如果还是报错可以选择zip 运行 不设置代理 等待下载即可,…

Linux云计算 |【第二阶段】SECURITY-DAY3

主要内容: Prometheus监控服务器、Prometheus被监控端、Grafana监控可视化 补充:Zabbix监控软件不自带LNMP和DB数据库,需要自行手动安装配置;Prometheus监控软件自带WEB页面和DB数据库;Prometheus数据库为时序数据库&…

Android 14适配

最近刚刚做了Android 14的适配(即targetSdkVersion 升级到 34 ),通过此博客整理下相关注意点。 前台服务类型 当targetSdkVersion > 34 ,应用内的前台服务(Foreground Service)需要指定至少一种前台服务…

k8s - Secret实践练习

参考文档:https://kubernetes.io/zh-cn/docs/concepts/configuration/secret/ 这个和ConfigMap很相似,这里选两个做下测试,就不过多赘述了 简介 Secret 类似于 ConfigMap 但专门用于保存机密数据。 Secret 是一种包含少量敏感信息例如密码…

qt creator自动运行单元测试

qt creator自动运行单元测试 工具-选项-Testing-General,找到Automatically run,选项卡选择All。

[C语言]-基础知识点梳理-编译、链接、预处理

前言 各位师傅大家好,我是qmx_07,今天来给大家讲解以下程序运行会经历哪些事情 翻译环境和运⾏环境 在ANSIC的任何⼀种实现中,存在两个不同的环境 第1种是翻译环境,在这个环境中源代码被转换为可执⾏的机器指令(⼆进制指令&a…

Linux下opencv报错 undefined reference to cv::imread cv::Mat

如果你是和libtorch一起使用,那么请你继续,否则该篇文章不适合你。 正文 在https://pytorch.org/下 下载的时候要选择Cxx11 ABI版 随后正常配置就可以了

Langchain-Chatchat

模型能力定制 微调 智能设备 微调 响应有要求 微调 动态数据 RAG 幻觉 RAG 可解释性 RAG 成本 RAG 依赖生成能力 微调 微调需要几万、几十万条好的数据,否者白调,所以是否需要微调,需要视情况而定。 RAG的落地,可以使用 https:/…

wangeditor编辑器自定义按钮和节点,上传word转换html,文本替换

vue3ts 需求:在编辑器插入图片和视频时下方会有一个输入框填写描述,上传word功能 wangeditor文档wangEditor开源 Web 富文本编辑器,开箱即用,配置简单https://www.wangeditor.com/ 安装:npm install wangeditor/edit…

Datawhale X 李宏毅苹果书 AI夏令营-深度学习入门班-task1

机器学习就是去拟合一种函数,它可能在高维上,十分抽象,但是却可以有丰富的语义含义,从而完成一系列任务 回归任务是预测一个准确的值,例如拟合一条直线的时候,我们希望每一个点的值都能对应上 分类任务则…

java多线程(六)关键字Volatile可见性、有序性以及单个变量的原子性

volatile关键字 作用 volatile 是 Java 虚拟机提供的轻量级的同步机制,主要用来确保变量被线程安全地读取和写入。 当一个变量定义为 volatile 后,它具备以下特性: 可见性:确保不同线程对这个变量操作的可见性,即一…

深入学习SQL优化的第三天

目录 聚合函数 排序和分组 聚合函数 1251. 平均售价 表:Prices------------------------ | Column Name | Type | ------------------------ | product_id | int | | start_date | date | | end_date | date | | price | int …