第二课:逻辑回归与梯度下降
梯度下降法
【实例】梯度下降法实例与代码
作者 : 老饼 日期 : 2022-06-26 03:48:35 更新 : 2022-09-24 17:23:58
本站原创文章,转载请说明来自《老饼讲解-机器学习》ml.bbbdata.com


为进一步具体掌握梯度下降法,

本文展示一个梯度下降法求解二元函数最小值的例子。

先用手算展示每一步的过程和结果,

再展示python的实现代码。




  (一) 问题  


求二元函数的最小值


求  为何值时,
 
取得最小值。

易知道,y 的最小值在 x1​=2, x2​=3 处取得,为0 


下面展示用梯度下降法寻找解的具体过程,看结果是否与我们预期一致。



  (二) 手算过程  


1、梯度公式计算


由  ,



2、参数设定


现设初始值为

此时 



3、迭代


迭代1:

计算梯度 :
更新x :
查看 y值 :

迭代2:

计算梯度 :
更新x :
查看 y值 :
...............
...............
...............

迭代40:

计算梯度 :
更新x :
查看 y值 :

4、结果


第40次迭代时,都极小,我们退出迭代 ,
以 作为最终结果,此时函数值 
易知,与预期的 x= [2,3] , y=0 几乎一致。



  (三) 代码实现  


上例 python程序如下


# -*- coding: utf-8 -*-
"""
梯度下降求y= (x1-2)^2+(x2-3)^2的最小解
"""
x1 = 0    # 初始化x1
x2 = 0    # 初始化x2
for i in range(100):
    
    #------计算梯度--------
    dx1 = 2*x1-4          
    dx2 = 2*x2-6
    
    #----- 往负梯度方向更新x------
    x1  = x1 - 0.1*dx1    
    x2  = x2 - 0.1*dx2
    #----- 如果梯度过小,则退出迭代 --------if((abs(dx1)< 0.001)  & (abs(dx2)< 0.001)):break
    print("第"+str(i+1)+"轮迭代:x=:["+str(x1)+","+str(x2)+"],y="+str((x1-2)**2+(x2-3)**2))



结果


第1轮迭代:x=:[0.4,0.6000000000000001],y=8.32
第2轮迭代:x=:[0.7200000000000001,1.08],y=5.3248
第3轮迭代:x=:[0.976,1.464],y=3.4078720000000002
..................
第39轮迭代:x=:[1.9996676930010537,2.9995015395015807],y=3.588908100330732e-07
第40轮迭代:x=:[1.999734154400843,2.9996012316012646],y=2.2969011842121404e-07








 End 












联系小饼