• 售前

  • 售后

热门帖子
入门百科

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

[复制链接]
樱花283 显示全部楼层 发表于 2021-10-25 19:22:42 |阅读模式 打印 上一主题 下一主题
导入所需库
  1. %matplotlib inline
  2. import sympy
  3. import numpy as np
  4. import matplotlib.pyplot as plt
  5. from sympy.abc import x as a,y as b
复制代码
天生模拟数据
  1. # 模拟函数 y=3x-1
  2. #自变量
  3. x=np.linspace(-5,5,num=1000)
  4. #加入噪声
  5. noise=np.random.rand(len(x))*2-1
  6. #因变量
  7. y=3*x-1+noise
复制代码
查看所天生数据的图像
  1. plt.figure(figsize=(10,10))
  2. plt.scatter(x,y,s=1)
复制代码

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

我们知道当在a,b处的偏导为0时,代价函数e到达最小值,以是得到二元一次方程组
Σ(axi+b-yi)*xi=0
Σ(axi+b-yi)=0
该方程组是关于未知数为a,b的二元一次方程组,通过求解该方程,得到a,b
  1. result=sympy.solve([
  2.   np.sum((a*x+b-y)*x),
  3.   np.sum(a*x+b-y)],[a,b])
  4. print(result)        #{x: 3.01182977621975, y: -1.00272253325765}
复制代码
通过sympy库解方程组,得出了a= 3.01182977621975,b= -1.00272253325765,已经与我们真实的a,b很靠近了,下面进行作图
  1. plt.figure(figsize=(10,10))
  2. 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个方程组,黑白常大的计算量,实在计算起来很难,因此我们就有了一种新的计算方法,就是梯度下降法,梯度下降法可以看作是 更简朴的一种 求最小二乘法最后一步解方程 的方法
  1. # 注意这里覆盖了sympy.abc的a和b
  2. # 设定a和b的起始点
  3. a,b=0.1,0.1
  4. #步长,也称作学习率
  5. alpha=0.00001
  6. #循环一千次结束
  7. for i in range(1000):
  8.   a-=alpha*np.sum((a*x+b-y)*x)
  9.   b-=alpha*np.sum(a*x+b-y)
  10. print(a,b)        #3.0118297762197526 -1.002674927350334
复制代码
通过梯度下降法,得出了a= 3.0118297762197526,b= -1.002674927350334,也是很靠近真实的a,b值了,作图看看
  1. plt.figure(figsize=(10,10))
  2. 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最小二乘法与梯度下降内容请搜刮草根技能分享以前的文章或继续浏览下面的相关文章盼望各人以后多多支持草根技能分享!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作