使用Python在实现一个梯度下降算法

  介绍

这期内容当中小编将会给大家带来有关使用Python在实现一个梯度下降算法,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

Python主要用来做什么

Python主要应用于:1,网络开发;2、数据科学研究;3,网络爬虫;4、嵌入式应用开发,5日游戏开发;6桌面应用开发。

导入所需库

% matplotlib 内联   import  sympy   import  numpy  as  np   import  matplotlib.pyplot  as  plt   得到sympy.abc  import  x  as , y  as  b

生成模拟数据

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

查看所生成数据的图像

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

使用Python在实现一个梯度下降算法

求代价函数的偏导

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

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

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

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

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

=sympy.solve([结果   np.sum才能((* x +时序)* x),   np.sum才能(* x +时序)],[a, b])   打印(结果)# {x: 3.01182977621975,, y,, -1.00272253325765}

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

plt.figure (figsize=(10,10))   plt.scatter (x, y, s=1)   plt.plot (x,结果[a] * x +结果[b], c=& # 39;红色# 39;)      print(类型(a)、(b)型)# & lt; class  & # 39; sympy.core.symbol.Symbol& # 39;祝辞,& lt; class  & # 39; sympy.core.symbol.Symbol& # 39;在

使用Python在实现一个梯度下降算法

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

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

#,注意这里覆盖了sympy.abc的a和b   #,设定a和b的起始点   a, b=0.1, 0.1      #步长,也称作学习率   α=0.00001      #循环一千次结束   for 小姐:拷贝范围(1000):   α-=* np.sum才能((* x +时序)* x)   b -=α*才能np.sum (* x +时序)      打印(a, b) # 3.0118297762197526, -1.002674927350334

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

plt.figure (figsize=(10,10))   plt.scatter (x, y, s=1)   plt.plot (x, x * + b, c=& # 39;黑色# 39;)      print(类型(a)、(b)型)# & lt; class  & # 39; numpy.float64& # 39;祝辞,& lt; class  & # 39; numpy.float64& # 39;在

使用Python在实现一个梯度下降算法

上述就是小编为大家分享的使用Python在实现一个梯度下降算法了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注行业资讯频道。

使用Python在实现一个梯度下降算法