梯度下降与一元及多元线性回归

目录

目录

梯度下降原理:

梯度下降的求解步骤:

代码:

 一元线性回归:

   构造损失函数:

梯度下降求解a和b:

线性回归的例题:

多元线性回归:



梯度下降原理:

     梯度下降法简单来说是寻找目标函数最小化的方法,从最快的路径是函数值减少最快,显然梯度的反方向是函数下降最快的方向。 一元函数梯度下降 例如:函数y=x^{2},起初在x_{0}处,然后沿着梯度的反方向走,才最快达到最低点。公式为:x_{new}=x_{old}-\alpha *\frac{\mathrm{dy} }{\mathrm{d} x},不断的迭代。

梯度下降的求解步骤:

1.设置初始位置

2.参数步长或者叫作学习率\alpha,最大迭代次数和阈值\varepsilon

3..求损失函数的偏导数或是导数。

4.根据公式求变量的新值。

5.比较新值与老值的差的绝对值与阈值的大小,小于阈值或者达到最大迭代次数就停止迭代。

如果是多与函数的梯度下降,与一元函数一样,就是函数对多个变量分别求解偏导,然后分别迭代。

例题:函数为y=(x-2.5)^{2}+3

代码:

二元函数梯度下降:、例题函数为;Z=(x-10)**2+(y-20)**2

代码:

 

 原函数图像:                                                          梯度下降的轨迹:

 一元线性回归:

      一元线性回归就是利用数理统计中的回归分析,来确定两种变量间,相互依赖的定量关系的一种统计分析方法,但是这两个变量不是绝对的线性关系,一元线性回归就是要找到一条线去拟合真实的点集,使真实值与预测值的差达到最小 ,一元线性回归方程为y=a*x+b, 目标就是求解这个方程。

   构造损失函数:

Loss=\frac{1}{2m}\sum_{i=1}^{m}(y\hat{}\,-y )^{2}( 其中y\hat{}=a*x+b )

我们寻找的直线的预测值和真实值的差越小越好,y_{i}是真实值,y\hat{}_{i}是预测值,除以m是有m个数据,除以2是求导方便。

梯度下降求解a和b:

\frac{\partial Loss}{\partial a}=\frac{1}{m}\sum_{i=1}^{m}(y\hat{}\,-y )*x_{i}

\frac{\partial Loss}{\partial b}=\frac{1}{m}\sum_{i=1}^{m}(y\hat{}\,-y )

a_{i}=a_{i}-\alpha *\frac{1}{m}*(y\hat{}-y)*x_{i}

b_{i}=b_{i}-\alpha *\frac{1}{m}*(y\hat{}-y)

不断迭代,知道达到最大迭代次数或者损失函数的值小于阈值,停止迭代。

线性回归的例题:

   

                        

         通过分析披萨的直径与价格的线性关系,来预测任一直径的披萨的价格。

import matplotlib.pyplot as plt 
import  numpy as np
def facta(x,y,a,b,m):
    return ((a*x+b)-y)*x/m#损失函数对a求偏导
def factb(x,y,a,b,m):
    return ((a*x+b)-y)/m#损失函数对b求偏导
def fact ():
    a=0.1 
    b=0.1
    alpha=0.1 #步长赋予初值
    stop=1  #阈值
    size=[6,8,10,14,18]#样本数据
    price=[7,9,13,17.5,18]
    m=len(size)
    a1=[]#存放a
    b1=[]#存放b
    for i in range(m):#对a和b进行迭代
        a=a-alpha*facta(size[i],price[i],a,b,m)
        b=b-alpha*factb(size[i],price[i],a,b,m)
        a1.append(a)
        b1.append(b)
        loss=0
        for j in range (m):#求解预测值和真实值的差值
            loss+=1/(2*m)*(a*size[j]+b-price[j])**2
        if loss < 2 :#差值小于阈值跳出循环
            break
    print("得到的回归函数是:y={}+{}*x".format(a,b))
    #画出预测关系的图像
    X=np.arange(0,20,0.5)
    Y=a*X+b
    plt.figure()
    plt.xlabel("size")
    plt.ylabel("price")
    plt.plot(X,Y,'r')
    plt.scatter(size,price,color='b')
    plt.show()
fact()
    

结果为:得到的回归函数是:y=1.1786752+0.12398636800000001*x

            红线是预测的函数图像,蓝点是样本点

多元线性回归:

     多元线性回归与一元线性回归类似,只是最后的结果由多个变量来决定的,因此多元线性回归的方程可设为:h(x_{1},x_{2},...x_{m})=\theta _{1}+\theta _{2}*x_{2}+\theta _{3}*x_{3}+...+\theta _{n}*x_{n}  可以采用矩阵求和的方式表示该式子(写代码的时也常用这种方法)h(x_{1},x_{2},...x_{m})=\theta \, \,T \, \, x(其中\theta是为参数\theta _{i}的一维列表,也是一行矩阵,同理x也是x_{1}为1),损失函数为:Loss=\frac{1}{2*m}\sum_{1}^{m}(h(x_{i}...x_{m})-y)^{2}

求参数的偏导:\frac{\partial Loss }{\partial \theta _{i}}=\frac{1}{m}(h(x_{i}...x_{m})-y)*x_{i}(i=1,2,3,4......m  其中x_{1}等于1)

利用梯度下降原理求各个参数:

  \theta _{i}new=\theta _{i}old-\alpha *\frac{1}{m}(h(x_{1}..x_{m})-y)*x_{i}

不断迭代,当损失函数的值小于阈值或者达到最大迭代次数时,停止迭代。

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值