机器学习,回归算法笔记(草履虫都能看懂),简单的一批

机器学习笔记系列

可以从上至下按顺序看喔

有监督学习

含义

  • 给算法一个数据集,其中包含了正确的答案,告诉算法啥是对的啥是错的

  • 我们想要在监督学习中,对于数据集中的每个样本,我们想要算法预测,并得出正确答案

回归

  • 目的是预测一个连续值输出
  • 如一件衣服卖多少钱,可以是100,可以是200或300等等

单元线性回归

含义
  • 给定的数据集为一一对应的数据集,一个x对应一个y,例:一元一次方程

  • 一个算法h(x)给定一个输入值x,能给出一个确定的输出值y,称之为单函数(元)线性回归。

代价函数
  • 代价函数被称为平方误差函数
  • 将预测值与真实值之间的误差取到最小的函数,且用另一个函数来封装他,这个里面的另一个函数就是代价函数
  • 过程如下:
    1. 假设函数: h θ ( x ) = θ 0 + θ 1 x h_\theta(x)=\theta_0+\theta_1x hθ(x)=θ0+θ1x
    2. 参数: θ 0 , θ 1 \theta_0,\theta_1 θ0,θ1
    3. 代价参数: J ( θ 0 , θ 1 ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 J(\theta_0,\theta_1)=\frac{1}{2m}\sum\limits_{i=1}^{m}(h_{\theta}(x^{(i)})-y^{(i)})^2 J(θ0,θ1)=2m1i=1m(hθ(x(i))y(i))2
    4. 目标: m i n i m i z e θ 0 , θ 1   J ( θ 0 , θ 1 ) \mathop{minimize}\limits_{\theta_0,\theta_1}\ J(\theta_0,\theta_1) θ0,θ1minimize J(θ0,θ1)
  • 如上步骤所示,先创建一个假设函数来构成一个线性函数,目的是通过调整参数来尽可能的减少假设函数所求的值和真实数据之间的差距,从而构成的一个代价函数
  • 此处的函数 J J J就是代价函数
  • 代价函数的作用就是其最小值点的参数就是假设函数与数据集所拟合的最好的一条线
梯度下降法
  • 公式: θ j : = θ j − α ∂ ∂ θ j J ( θ 0 , θ 1 ) \theta_j:=\theta_j-\alpha\frac{\partial}{\partial\theta_j}J(\theta_0,\theta_1) θj:=θjαθjJ(θ0,θ1),此处j等于0和1(其中的阿尔法为学习速率,阿尔法越大,步子迈的就越大,反之亦然)
  • 同步更新 θ 0 , θ 1 \theta_0,\theta_1 θ0,θ1的值
  • 更新步骤如下:
    1. t e m p 0 : = θ 0 − α ∂ ∂ θ 0 J ( θ 0 , θ 1 ) temp0:=\theta_0-\alpha\frac{\partial}{\partial\theta_0}J(\theta_0,\theta_1) temp0:=θ0αθ0J(θ0,θ1)
    2. t e m p 1 : = θ 1 − α ∂ ∂ θ 1 J ( θ 0 , θ 1 ) temp1:=\theta_1-\alpha\frac{\partial}{\partial\theta_1}J(\theta_0,\theta_1) temp1:=θ1αθ1J(θ0,θ1)
    3. θ 0 : = t e m p 0 \theta_0:=temp0 θ0:=temp0
    4. θ 1 : = t e m p 1 \theta_1:=temp1 θ1:=temp1
将梯度下降法与代数函数结合在一起
  • 先要知道导数项的值,如上述公式所示,利用求偏导求出 ∂ ∂ θ 0 J ( θ 0 , θ 1 ) \frac{\partial}{\partial\theta_0}J(\theta_0,\theta_1) θ0J(θ0,θ1) ∂ ∂ θ 1 J ( θ 0 , θ 1 ) \frac{\partial}{\partial\theta_1}J(\theta_0,\theta_1) θ1J(θ0,θ1) 的值
  • ∂ ∂ θ 0 J ( θ 0 , θ 1 ) = 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) \frac{\partial}{\partial\theta_0}J(\theta_0,\theta_1)=\frac{1}{m}\sum\limits_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)}) θ0J(θ0,θ1)=m1i=1m(hθ(x(i))y(i))
  • ∂ ∂ θ 1 J ( θ 0 , θ 1 ) = 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x ( i ) \frac{\partial}{\partial\theta_1}J(\theta_0,\theta_1)=\frac{1}{m}\sum\limits_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})x^{(i)} θ1J(θ0,θ1)=m1i=1m(hθ(x(i))y(i))x(i)
  • 再代入上述的梯度下降法的更新步骤中去,就会如下所示
    1. t e m p 0 : = θ 0 − α 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) temp0:=\theta_0-\alpha\frac{1}{m}\sum\limits_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)}) temp0:=θ0αm1i=1m(hθ(x(i))y(i))
    2. t e m p 1 : = θ 1 − α 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x ( i ) temp1:=\theta_1-\alpha\frac{1}{m}\sum\limits_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})x^{(i)} temp1:=θ1αm1i=1m(hθ(x(i))y(i))x(i)
    3. θ 0 : = t e m p 0 \theta_0:=temp0 θ0:=temp0
    4. θ 1 : = t e m p 1 \theta_1:=temp1 θ1:=temp1
  • 这样经过若干次算法迭代, θ 0 , θ 1 \theta_0,\theta_1 θ0,θ1 就会到达一个能使假设函数变成最小值的值
  • 这种算法叫 “Batch梯度下降算法

多元线性回归

含义
  • 多元多元,相较于单元自然是多了其他的未知数,比如用多个x来确定一个y,其中的x就是特征值,例:二元一次方程,三元一次方程
  • 一个算法h(x)给定n个输入值x,能确定一个输出值y,称之为多函数(元)线性回归
多元假设函数
  • 多元假设函数: h θ ( x ) = θ 0 x 0 + θ 1 x 1 + θ 2 x 2 + . . . + θ n x n h_\theta(x)=\theta_0x_0+\theta_1x_1+\theta_2x_2+...+\theta_nx_n hθ(x)=θ0x0+θ1x1+θ2x2+...+θnxn,其中令 x 0 x_0 x0 的值为1,其余的x都是特征值
  • 也可以写成这样
    • X = [ x 0 x 1 x 2 . . . x n ] ,     Θ = [ θ 0 θ 1 θ 2 . . . θ n ] X=\begin{bmatrix}x_0\\x_1\\x_2\\...\\x_n\end{bmatrix},\ \ \ \Theta=\begin{bmatrix}\theta_0\\\theta_1\\\theta_2\\...\\\theta_n\end{bmatrix} X= x0x1x2...xn ,   Θ= θ0θ1θ2...θn ,其中 X , Θ X,\Theta X,Θ 均为n+1维向量
    • 可以得到 h θ ( x ) = Θ T X h_\theta(x)=\Theta^TX hθ(x)=ΘTX
多元代价函数
  • 经过单元代价函数的形式,很容易得出多元代价函数如下所示,其中的 Θ \Theta Θ 是上述中的向量,其中拥有多个参数

  • J ( Θ ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 J(\Theta)=\frac{1}{2m}\sum\limits_{i=1}^{m}(h_{\theta}(x^{(i)})-y^{(i)})^2 J(Θ)=2m1i=1m(hθ(x(i))y(i))2

多元梯度下降法
  • 公式: θ j : = θ j − α ∂ ∂ θ j J ( Θ ) \theta_j:=\theta_j-\alpha\frac{\partial}{\partial\theta_j}J(\Theta) θj:=θjαθjJ(Θ) ,其中的 Θ \Theta Θ 是上述中的向量,j的范围在0到n+1(因为有n+1个参数 θ \theta θ
  • 同单元一样,同步更新 Θ \Theta Θ 中的值
  • 更新步骤如下:
    1. t e m p 0 : = θ 0 − α ∂ ∂ θ 0 J ( Θ ) temp0:=\theta_0-\alpha\frac{\partial}{\partial\theta_0}J(\Theta) temp0:=θ0αθ0J(Θ)
    2. t e m p 1 : = θ 1 − α ∂ ∂ θ 1 J ( Θ ) temp1:=\theta_1-\alpha\frac{\partial}{\partial\theta_1}J(\Theta) temp1:=θ1αθ1J(Θ)
    3. t e m p   n : = θ n − α ∂ ∂ θ n J ( Θ ) temp\ n:=\theta_n-\alpha\frac{\partial}{\partial\theta_n}J(\Theta) temp n:=θnαθnJ(Θ)
    4. θ 1 : = t e m p 1 \theta_1:=temp1 θ1:=temp1
    5. θ 2 : = t e m p 2 \theta_2:=temp2 θ2:=temp2
    6. θ n : = t e m p   n \theta_n:=temp\ n θn:=temp n
将多元梯度下降法与代数函数结合在一起
  • 如单元一样,先求各偏导数的值
    • ∂ ∂ θ 0 J ( Θ ) = 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x 0 ( i ) \frac{\partial}{\partial\theta_0}J(\Theta)=\frac{1}{m}\sum\limits_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})x_0^{(i)} θ0J(Θ)=m1i=1m(hθ(x(i))y(i))x0(i)
    • ∂ ∂ θ 1 J ( Θ ) = 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x 1 ( i ) \frac{\partial}{\partial\theta_1}J(\Theta)=\frac{1}{m}\sum\limits_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})x_1^{(i)} θ1J(Θ)=m1i=1m(hθ(x(i))y(i))x1(i)
    • ∂ ∂ θ n J ( Θ ) = 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x n ( i ) \frac{\partial}{\partial\theta_n}J(\Theta)=\frac{1}{m}\sum\limits_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})x_n^{(i)} θnJ(Θ)=m1i=1m(hθ(x(i))y(i))xn(i)
  • 会发现,多元梯度下降公式的偏导数与单元梯度下降的偏导数结果是类似的
  • 实际上,单元梯度下降法的偏导数就是由多元的偏导数所推衍而来的,像上述所说把多元的 x 0 x_0 x0 等价为1,且然后将后续的x的下标去除,则变成了单元的偏导数
  • 最后再代入多元梯度下降的更新步骤即可,如下所示
    1. t e m p 0 : = θ 0 − α 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x 0 ( i ) temp0:=\theta_0-\alpha\frac{1}{m}\sum\limits_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})x_0^{(i)} temp0:=θ0αm1i=1m(hθ(x(i))y(i))x0(i)
    2. t e m p 1 : = θ 1 − α 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x 1 ( i ) temp1:=\theta_1-\alpha\frac{1}{m}\sum\limits_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})x_1^{(i)} temp1:=θ1αm1i=1m(hθ(x(i))y(i))x1(i)
    3. t e m p   n : = θ n − α 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x n ( i ) temp\ n:=\theta_n-\alpha\frac{1}{m}\sum\limits_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})x_n^{(i)} temp n:=θnαm1i=1m(hθ(x(i))y(i))xn(i)
    4. θ 1 : = t e m p 1 \theta_1:=temp1 θ1:=temp1
    5. θ 2 : = t e m p 2 \theta_2:=temp2 θ2:=temp2
    6. θ n : = t e m p   n \theta_n:=temp\ n θn:=temp n
    • 这样经过若干次算法迭代, Θ \Theta Θ 的值即可达到令多元假设函数变成最小值的值

特征缩放

啥是特征缩放?
  • 简单来说,就是当你的不同特征值之间相差比较大的时候,其作出来的图像就会变得比较细长,像下图所示
  • img
  • 这样在进行梯度下降的时候,可能就会需要进行非常多的步骤才能找到一个最小值
  • 此时我们就可以利用特征缩放来将每个特征值缩放到一个差不多的范围,再进行梯度下降就会较为容易找到最小值
公式
  • 特征缩放公式为: x i = 特征值 特征值的最大值 x_i=\frac{特征值}{特征值的最大值} xi=特征值的最大值特征值
  • 例如,假如你想要计算房屋的售价,有两个特征值,一个是房屋面积(范围在0-2000),一个是房间个数(范围在1-5)
  • 这两个特征值之间的差距就比较大,就可以使用特征缩放公式来拉近两值之间的差距,如下所示
  • x 1 = 当前房屋面积 2000 , x 2 = 当前房间个数 5 x_1=\frac{当前房屋面积}{2000},x_2=\frac{当前房间个数}{5} x1=2000当前房屋面积,x2=5当前房间个数
  • 这样用代价函数所做出来的图像则会更接近一个正圆形,就比较好寻找最小值了,如下图所示
  • img
均值归一化
  • 一般在进行特征缩放的时候会做一个这个事–也就是标题
  • 啥叫均值归一化?
    • 均值归一化其实就是一种更好的特征缩放,当多个特征值相差特别大的时候,能够防止因为差距过大而导致其中较小一方的影响被忽略,而较大的一方起决定性作用
  • 公式: x i = x i − μ i s i x_i=\frac{x_i-\mu_i}{s_i} xi=sixiμi
  • 现在来解释一下上述公式意思
    • x i x_i xi 是第i个特征值, μ i \mu_i μi 是训练集中特征值 x i x_i xi 的平均值, s i s_i si 是该特征值的训练集最大值减最小值
    • 这样算出来的结果一定是一个处于-0.5到0.5之间或附近的值,这样不同特征值之间的差距就会变得非常小
  • 用特征缩放刚开始的例子来解释公式则如下所示
  • x 1 = 当前房屋面积 − 1000 2000 , x 2 = 当前房间个数 − 2 4 x_1=\frac{当前房屋面积-1000}{2000},x_2=\frac{当前房间个数-2}{4} x1=2000当前房屋面积1000,x2=4当前房间个数2

学习率的调整的建议

介绍
  • 学习率就是上文中梯度下降法里的 α \alpha α ,阿尔法是决定代价函数迈多大步子到最小值的一个参数
  • 若阿尔法太大,则每次迭代可能会跳过最小值,从而使得代价函数越来越大
  • 若阿尔法太小,则为了达到最小值,可能需要非常多次的迭代,这样时间效率就会变差
  • 所以选择一个合适的阿尔法值是提高梯度下降法效率的一个重要指标
建议
  • 先测试出一个阿尔法的最大值和最小值(也就是不会使得代价函数增高或迭代次数过多的一个值)
  • 然后每隔三倍左右进行一次测试,从而找到一个较好的学习率

正规方程

解释
  • 可以一步得出使得代价函数最小值的参数theta
公式
  • θ = ( X T X ) − 1 X T y \theta=(X^TX)^{-1}X^Ty θ=(XTX)1XTy
  • 解释一下上述公式,其中X是训练集当中的的一系列样本的特征值,y是训练集中的正确答案
  • 例如:
    • image-20211021174005058
    • 而且如果使用的是正规方程方法,那么则无需使用特征缩放来将所有特征值归一化为一个相似的值
    • 例如这有两个特征值:房间尺寸为1到2000,而房间个数为1到5个,如果使用梯度下降法,则需要将这两个特征值进行特征缩放后再进行迭代计算,而使用正规方程则不用这一步

如何选择梯度下降法或正规方程?

  • 先说一下两者的优点和缺点吧,这样更能分辨它们两者之间的适用范围
两者之间的优缺点
  • 梯度下降法正规方程
    缺点:需要选择一个合适的 α \alpha α优点:无需选择合适的 α \alpha α ,一步即可得出 θ \theta θ
    缺点:需要进行多次迭代优点:无需进行多次迭代
    优点:在特征向量特别大的时候,仍然可以很好的进行工作,例如特征向量维度大于10000的时候缺点:当特征向量维度特别大的时候,则运行起来会非常慢,当有n个特征值的时候,求 ( X T X ) − 1 (X^TX)^{-1} (XTX)1 的时候可能需要的运行时间为n的立方次数甚至更多
    时间复杂度: O ( k n 2 ) O(kn^2) O(kn2)时间复杂度: O ( n 3 ) O(n^3) O(n3)
总结
  • 从上表中可以得到,若特征向量的维数如果非常大,则正规方程会运行的非常慢,这样显然是划不来的,可能就会选择梯度下降法(一般当特征向量维度超过10000时会考虑)
  • 而若特征向量维度没有那么大的时候,当然选择正规方程会更好一点,因为你无需手动调试出一个合适的阿尔法,这样很费时间,只需要一步即可算出答案

参考链接

  • https://www.bilibili.com/video/BV1FT4y1E74V/?spm_id_from=333.337.search-card.all.click&vd_source=97163a4e6e2704667559fdbd58743862
  • 35
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值