• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    利用Python实现最小二乘法与梯度下降算法

    导入所需库

    %matplotlib inline
    import sympy
    import numpy as np
    import matplotlib.pyplot as plt
    from sympy.abc import x as a,y as b
    

    生成模拟数据

    # 模拟函数 y=3x-1
    
    #自变量
    x=np.linspace(-5,5,num=1000)
    #加入噪声
    noise=np.random.rand(len(x))*2-1
    #因变量
    y=3*x-1+noise
    

    查看所生成数据的图像

    plt.figure(figsize=(10,10))
    plt.scatter(x,y,s=1)
    

    求代价函数的偏导

    y=ax+b  #目标函数
    
    e=1/2*Σ([axi+b]-yi)^2   #代价函数,求使得代价函数为最小值时,对应的a和b
    
    对a求偏导->Σ(axi+b-yi)*xi
    
    对b求偏导->Σ(axi+b-yi)
    

    1. 通过最小二乘法求a,b

    我们知道当在a,b处的偏导为0时,代价函数e达到最小值,所以得到二元一次方程组

    Σ(axi+b-yi)*xi=0
    Σ(axi+b-yi)=0

    该方程组是关于未知数为a,b的二元一次方程组,通过求解该方程,得到a,b

    result=sympy.solve([
      np.sum((a*x+b-y)*x),
      np.sum(a*x+b-y)],[a,b])
    print(result)	#{x: 3.01182977621975, y: -1.00272253325765}
    

    通过sympy库解方程组,得出了a= 3.01182977621975,b= -1.00272253325765,已经与我们真实的a,b很接近了,下面进行作图

    plt.figure(figsize=(10,10))
    plt.scatter(x,y,s=1)
    plt.plot(x,result[a]*x+result[b],c='red')
    
    print(type(a),type(b))	#class 'sympy.core.symbol.Symbol'> class 'sympy.core.symbol.Symbol'>
    

    2. 通过梯度下降算法求a,b

    我们注意到最小二乘法最后一步要求p个方程组,是非常大的计算量,其实计算起来很难,因此我们就有了一种新的计算方法,就是梯度下降法,梯度下降法可以看作是 更简单的一种 求最小二乘法最后一步解方程 的方法

    # 注意这里覆盖了sympy.abc的a和b
    # 设定a和b的起始点
    a,b=0.1,0.1
    
    #步长,也称作学习率
    alpha=0.00001
    
    #循环一千次结束
    for i in range(1000):
      a-=alpha*np.sum((a*x+b-y)*x)
      b-=alpha*np.sum(a*x+b-y)
    
    print(a,b)	#3.0118297762197526 -1.002674927350334
    

    通过梯度下降法,得出了a= 3.0118297762197526,b= -1.002674927350334,也是很接近真实的a,b值了,作图看看

    plt.figure(figsize=(10,10))
    plt.scatter(x,y,s=1)
    plt.plot(x,a*x+b,c='black')
    
    print(type(a),type(b))	#class 'numpy.float64'> class 'numpy.float64'>
    

    到此这篇关于利用Python实现最小二乘法与梯度下降算法的文章就介绍到这了,更多相关Python最小二乘法与梯度下降内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    您可能感兴趣的文章:
    • python中最小二乘法详细讲解
    • Python实现曲线拟合的最小二乘法
    • 最小二乘法及其python实现详解
    • python实现最小二乘法线性拟合
    • Python最小二乘法矩阵
    • Python 普通最小二乘法(OLS)进行多项式拟合的方法
    • Python基于最小二乘法实现曲线拟合示例
    • Python中实现最小二乘法思路及实现代码
    • python中matplotlib实现最小二乘法拟合的过程详解
    上一篇:Scrapy实现模拟登录的示例代码
    下一篇:python实现图片转字符画的完整代码
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    利用Python实现最小二乘法与梯度下降算法 利用,Python,实现,最小,二,