ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

线性回归算法

2022-07-04 14:36:51  阅读:198  来源: 互联网

标签:frac 梯度 回归 newline 算法 alpha 线性 theta partial


预测函数

单变量线性回归:\(h{_\theta(x)} = \theta{_0} + \theta{_1}x\);令\(x_0 = 1\);则\(h{_\theta(x)} = \theta{_0}x_0 + \theta{_1}x_1\) ;

多变量线性回归:\({{h}_{\theta }}\left( x \right)={{\theta }_{0}}{{x}_{0}}+{{\theta }_{1}}{{x}_{1}}+{{\theta }_{2}}{{x}_{2}}+...+{{\theta }_{n}}{{x}_{n}}\); \(x_0 = 1\);

\[\begin{align*}h_\theta(x) =\begin{bmatrix}\theta_0 \hspace{2em} \theta_1 \hspace{2em} ... \hspace{2em} \theta_n\end{bmatrix}\begin{bmatrix}x_0 \newline x_1 \newline \vdots \newline x_n\end{bmatrix}= \theta^T X\end{align*} \]

代价函数

  • 损失函数:对于单个样本而言,指的是一个样本的误差;
  • 代价函数:范围是整个训练集,此处简单理解为所有样本误差的平均;

平方差代价函数:$$J\left( \theta \right)=\frac{1}{2m}\sum\limits_{i=1}^{m}{{{\left( {{h}_{\theta }}\left( {{x}^{(i)}} \right)-{{y}^{(i)}} \right)}^{2}}}$$

  • 额外1/2是因为:用于消除梯度下降时求偏导数所出现的2;

代价函数还有其他种类,如:交叉熵代价函数。

目标:不断迭代\(\theta\),力争让代价函数最小,越小预测结果越准确。

梯度下降

方向导数与梯度

  • 导数:在二维平面中,曲线上某一点沿着x轴方向变化率,即函数在该点的斜率;
  • 偏导数:在三维空间中,曲面上某一点沿着x轴方向或y轴方向变化率;\(\frac{\partial f}{\partial x}\)、\(\frac{\partial f}{\partial y}\);
  • 方向导数:在三维空间中,曲面上某一点沿着任一方向的变化率;

方向导数(是一个数)

image-20220620102350582

二元函数 z = f ( x , y )的方向导数求法:

\(\frac {\partial f} {\partial \overrightarrow l} = \frac{\partial f}{\partial x}\cos\alpha + \frac{\partial f}{\partial y}\cos\beta = \{\frac{\partial f}{\partial x}, \frac{\partial f}{\partial y}\}\{\cos\alpha, \cos\beta\}\)

梯度(是一个向量):表示某一函数在该点处的方向导数沿着该方向取得最大值,即函数在该点处沿着该方向(此梯度的方向)变化最快,变化率最大(为该梯度的模)。

0b789788fc15889fe33fb44818c40852.png (400×253) (ai-start.com)

86c827fe0978ebdd608505cd45feb774.png (600×291) (ai-start.com)

  • 沿着等高线密集的方向,可以更快到达最低点。

梯度的求法,以 z = f ( x, y ) :$grad f(x, y) = \frac{\partial f}{\partial x}i + \frac{\partial f}{\partial y}j $

梯度的公式中的偏导,和梯度下降公式中的偏导联系起来。

梯度下降的直观理解

假定代价函数只有一个变量,对应多个参数,求偏导时是一样的效果;

image-20220621170150987

repeat until convergen { \(\theta_1:=\theta_1-\alpha \frac{d}{d\theta_1} J(\theta_1)\) }

  • \(\alpha\):学习率,可以理解为下降的步长;
  • \(\alpha\)大小可以不用变化,因为随着\(\theta\)的变化,(偏)导数会不断减小,因此他们之积也会不断减小,直到收敛;
  • \(\alpha\)取值不易太大或太小,会造成难以收敛的情况;

批量梯度下降

关于批量的解释:是在梯度下降的每一步中,我们都用到了所有的训练样本,从下面公式的求和符号可以明显看出。另外,也可以这样理解,每次下降我们要追求的是总损失也就是代价的最小,这是一个整体的最小,而不是单个样本最小,只拟合到一个点,毫无意义。

迭代核心:

\[{{\theta }_{j}}:={{\theta }_{j}}-\alpha \frac{\partial }{\partial {{\theta }_{j}}}J\left( \theta \right) \]

很简单的求一下偏导,就得到下面结果:

\[\begin{align*} & \text{repeat until convergence:} \; \lbrace \newline \; & \theta_0 := \theta_0 - \alpha \frac{1}{m} \sum\limits_{i=1}^{m} (h_\theta(x^{(i)}) - y^{(i)}) \cdot x_0^{(i)}\newline \; & \theta_1 := \theta_1 - \alpha \frac{1}{m} \sum\limits_{i=1}^{m} (h_\theta(x^{(i)}) - y^{(i)}) \cdot x_1^{(i)} \newline \; & \theta_2 := \theta_2 - \alpha \frac{1}{m} \sum\limits_{i=1}^{m} (h_\theta(x^{(i)}) - y^{(i)}) \cdot x_2^{(i)} \newline & \cdots \newline \rbrace \end{align*} \]

In other words:

\[\begin{align*}& \text{repeat until convergence:} \; \lbrace \newline \; & \theta_j := \theta_j - \alpha \frac{1}{m} \sum\limits_{i=1}^{m} (h_\theta(x^{(i)}) - y^{(i)}) \cdot x_j^{(i)} \; & \text{for j := 0...n}\newline \rbrace\end{align*} \]

特征放缩

样本集中的每个特征的范围尽可能的接近,更容易收敛。

标准化

\[x^{'} = \frac{x - \bar{x}}{\sigma} \]

均值归一化

\[x^{'} = \frac{x - mean(x)}{max(x) - min(x)} \]

最大-最小值归一化

\[x^{'} = \frac{x - min(x)}{max(x) - min(x)} \]

正规方程(Normal equation)

正规方程是通过求解下面的方程来找出使得代价函数最小的参数的:\(\frac{\partial }{\partial {{\theta }_{j}}}J\left( {{\theta }_{j}} \right)=0\)。

多元函数求极值,令所有偏导等于0;
正规方程的推导过程:【机器学习】正规方程的推导过程,看完我不信你不懂!_性感博主在线瞎搞的博客-CSDN博客_正规方程推导过程

正规方程求解:

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

梯度下降 正规方程
需要选择学习率 不需要
需要多次迭代 一次运算得出
当特征数量大时也能较好适用 需要计算 如果特征数量n较大则运算代价大,因为矩阵逆的计算时间复杂度为,通常来说当小于10000 时还是可以接受的
适用于各种类型的模型 只适用于线性模型,不适合逻辑回归模型等其他模型

代码实战

以上的所有内容都有代码演示,详情可以查看:AndrewNg-ML-Exs-by-Python/ML-Exercise1.ipynb at master · KpiHang/AndrewNg-ML-Exs-by-Python (github.com)

标签:frac,梯度,回归,newline,算法,alpha,线性,theta,partial
来源: https://www.cnblogs.com/kphang/p/16442802.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有