机器学习------回归算法(理论)3

本文介绍了线性回归、梯度下降和逻辑回归等机器学习基础知识。线性回归用于预测连续变量,通过梯度下降算法优化参数。逻辑回归则是解决二分类问题,通过Sigmoid函数将线性回归结果转化为概率。在训练过程中,调整学习率和使用不同梯度下降策略影响模型性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.本文介绍

  • 线性回归算法
  • 梯度下降算法
  • 逻辑回归算法

2.线性回归算法

假设某个人去银行贷款,银行会了解个人的基本信息,如年龄,工资等等,然后输入银行评估系统,以此决定是否发放贷款以及确定贷款的额度。在这里银行评估系统就是基于历史数据建立一个合适的回归模型,只要有新数据传入模型,就会返回一个合适的预测结果值。记工资、年龄用x1和x2表示,是所需数据特征的指标,贷款额度就是最终想要的预测结果,也叫做标签,用y表示。找到x1、x2和y之间的关系,就可以解决问题。

实际贷款金额由数据特征x1和x2共同决定的,需要确定x1、x2对y产生多大的影响。用\theta来表示其影响( 用\theta表示权重项,对线性回归方程起到最核心的影响)。\theta _{1}表示年龄的参数,\theta _{2}表示工资的参数。可得其线性回归方程(预测结果所在平面):

h_{\theta }(x)=\theta _{0}+\theta _{1}x_{1}+\theta _{2}x_{2}=\sum_{i=0}^{n}\theta _{i}x_{i}=\theta ^{T}x

\theta _{0}为偏置项(对其做微调,使得方程的效果更好。),手动添加x_{0}这一项,使其值全部为1 即可。

误差分析:

i为样本编号,真实值y^{_{(i)}}与预测值\theta ^{_{T}}x^{^{(i)}}存在差异,有误差项\varepsilon,即:

y^{^{(i)}}=\theta ^{T}x^{(i)}+\varepsilon ^{(i)}

误差\varepsilon是服从独立同分布的,服从均值为0方差为\theta ^{2}的高斯(正态)分布。

(当拿到一份数据集,建模之前肯定要进行重新洗牌操作,让各自样本的相关性最低。)

似然函数的求解:

误差项服从高斯分布,其表达式为 :

 p(\varepsilon ^{^{(i)}})=\frac{1}{\sqrt{2\pi }\sigma }exp(-\frac{(\varepsilon ^{(i)})^{2}}{2\sigma ^{2}})

y^{(i)}=\theta ^{T}x^{(i)}+\varepsilon ^{(i)}代入上式,可得:

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

而似然函数就是通过观察样本数据的情况来选择最合适的参数,从而得到与样本数据相似的结果。对于上式, 基本思路就是找到最合适的参数来拟合数据点,可以把它当作是参数与数据的组合得到的跟标签值一样可能性大小。可能性越大,得到的预测值跟真实值越接近,意味着回归方程做的越好。就有了极大似然估计,找到最好的参数\theta,使其与X组合后能够成为Y的可能性越大越好。

则有似然函数:

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

其中,i为当前样本,m为整个数据集样本的个数。

对上面的似然函数取对数,可得:

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

我们的目标是要求其极大值点,则需使\frac{1}{2}\sum_{i=1}^{m}(y^{(i)}-\theta ^{T}x^{(i)})^{2}越小越好。

线性回归的求解:

其目标函数如下:

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

要求极值(使其得到最小值的参数),对上式求偏导数可得:

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

这里要求矩阵可逆,计算对其求解。但是机器学习是一个优化的过程,而不是直接求解的过程。

3.梯度下降算法

机器学习的核心思想就是不断优化寻找更加合适的参数,但给定目标函数,想办法使真实值与预测值之间的差异越小越好。可以采用梯度下降算法(下山问题)。 

只有最陡峭的道路,下山就会最快。也就是说当前位置梯度的反方向(目标函数J(θ)关于参数θ的梯度是函数上升最快的方向,是下山问题,故是反方向)。在梯度下降的过程中,每一步都走的非常小心,每一次更新的步长都要尽可能的小,这样可以保证整体的稳定性。步长过大,可能会偏离合适的方向。

对于优化目标函数:J(\theta )=\frac{1}{2m}\sum_{i=1}^{m}(h_{\theta }(x^{(i)})-y^{(i)})^{2},找到最合适的参数θ(可以多个参数),使其目标函数值最小。只有参数θ对最终结果产生影响。在优化中,对于多个参数,在实际计算中,需要分别对这些参数求偏导,再进行更新。

步骤如下:

  1. 找到当前最合适的方向,对于每个参数都有各自的方向。
  2. 走一小步(若走的快,方向偏离越多,可能走错路)
  3. 安照方向与步伐去更新参数
  4. 重复以上操作

梯度下降策略有三种常见策略:

  1. 批量梯度下降:考虑所有样本数据,每一迭代优化计算在公式中都需要把所有的样本计算一遍,易得最优解,因为每一次迭代都会选择整体最优的方向。但样本数量若大,导致迭代速度慢。其计算公式如下:                                     \frac{\partial J(\theta )}{\partial \theta_{j}}=-\frac{1}{m}\sum_{i=1}^{m}(h_{\theta }(x^{(i)})-y^{(i)})x_{(j)}^{i}=0        即                                                                 {\theta_{j}}'=\theta_{j}+\alpha \frac{1}{m}\sum_{i=1}^{m}(y^{i}-h_{\theta }(x^{(i)}))x_{j}^{(i)}                                                                                 在更新参数时取负号,取梯度相反的方向前进,其中\frac{1}{m}表示对所选择的样本求平均损失,i表示选择 的样本数据,j表示特征。比如\theta _{j}表示工资所对应的参数。
  2. 随机梯度下降:每次只使用一个样本,迭代速度加快,但是会导致结果更差。计算公式如下:{\theta_{j}}'=\theta_{j}+\alpha(y^{i}-h_{\theta }(x^{(i)}))x_{j}^{(i)}
  3. 小批量梯度下降:选择一部分样本数据。一般会选取16,32,64,128这些总数,把选择的样本个数叫作batch.10个样本数据的计算公式如下:{\theta_{j}}'=\theta_{j}+\alpha \frac{1}{10}\sum_{k=i}^{i+9}(y^{i}-h_{\theta }(x^{(i)}))x_{j}^{(i)}

除了对方向的选择,还有步长(学习率)\alpha的选择。通常会选取较小的学习率和较多的迭代次数。随着迭代的进行,目标函数会逐渐降低,直至达到饱和收敛状态。在迭代过程中出现不平稳的现象,目标函数始终没有达到收敛状态,很可能是学习率过大或者样本数据过小以及数据预处理问题所致。

4.逻辑回归算法

逻辑回归本质上是一个经典的二分类问题,即一般的0与1问题。在线性回归的基础上,只需稍作改变,就能完成分类任务。

回顾线性回归算法得到的结果:输入特征数据,输出一个具体的值,可以把输出值看做一个得分值。此时做分类问题,要判断输入数据是正例还是负例,比较各自的的分值,如果正例的得分值高,说明输入数据属于正例类别。这个得分值一般用概率值。

概率值的获取:利用Sigmoid函数定义如下:

g(Z)=\frac{1}{1+e^{-z}}

自变量z取任意实数,其结果值域为[0,1]。

在判断最终分类结果时,可以选择0.5为阈值(根据实际情况)来进行正负例类别的划分,例如最终的结果为0.7,而0.7大于0.5,就归为正例。

首先得到得分值,再利用Sigmoid函数转换成概率值,公式如下:

h_{\theta }(x)=g(\theta ^{T}x)=\frac{1}{1+e^{-\theta ^{T}x}}

\theta _{0}+\theta _{1}x_{1}+....+\theta _{n}x_{n}=\sum_{i=1}^{m}\theta _{i}x_{i}=\theta ^{T}x

x是特征数据,\theta是每个特征所对应的参数。对正负例情况进行分析:

 \left\{\begin{matrix} P(y=1|x;\theta )=h_{\theta }(x)\\ P(y=0|x;\theta )=1-h_{\theta }(x) \end{matrix}\right.

由于是二分类任务,当正例概率为h_{\theta }(x),负例概率必须为1-h_{\theta }(x),对于标签的选择:y=1为正。y=0为负。可以将上式合并为:

P(y|x;\theta )=(h_{\theta }(x))^{y}(1-h_{\theta }(x))^{1-y}

逻辑回归的求解:

仍然用到似然函数:

L(\theta )=\prod_{i=1}^{m}P(y_{i}|x_{i};\theta )=\prod_{i=1}^{m}(h_{\theta}(x_{i}))^{y_{i}}(1-h_{\theta}(x_{i}))^{1-y_{i}}

上式两边取对数,化简,可得:

l(\theta )=logL(\theta )= \sum_{i=1}^{m}(y_{i}logh_{\theta }(x_{i})+(1-y_{i})log(1-h_{\theta }(x_{i})).

在最小二乘法中求极小值,自然用梯度下降,现在要求极大值,只需取目标函数的相反数即可:

J(\theta )=-\frac{1}{m}l(\theta ),求其极小值即可,求其偏导:

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

下标i表示样本,在迭代过程中选择的样本编号;下标j表示特征(参数)编号,参数\theta和数据特征是一一对应的关系。对\theta _{j}求偏导,最后得到的结果乘以x_{j},这表明要对哪个参数进行更新需要用其对应的特征数据,而与其他特征无关。得到上面的偏导数,可对参数进行更新,公式如下:

\theta _{j}=\theta _{j}-\alpha \frac{1}{m}\sum_{i=1}^{m}(h_{\theta }(x_{i})-y_{i})x_{i}^{j}

参考文档:《跟着迪哥学Python数据分析与机器学习实战》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值