梯度上升算法实现

梯度上升算法概念

例如我们存在一个函数

f(x)=X2+4x
要求它的极值,主要就是求偏导为0的那个点的坐标
像这种简单的函数直接使f(x)为0就行


但在真实的情况中函数没有我们想象的这么简单,那就只能让我们一步一步的逼近极值点

X i+1=X i+a*f(x)

a为步长控制更新的幅度,当函数值无限逼近极值点时停止迭代过程

代码实现

#coding=UTF-8
'''
梯度上升算法的简单实现
原函数
f(x)=x2+4x
'''
def Gradient():
    ##定义导函数
    def gradientPrim(X):
        return -2*X+4
    x_old=1
    x_new=0
    ###控制步长度
    alpha=0.01 
    #####控制梯度阈值
    presision=0.0000001
    while abs(x_new-x_old)>presision:
        x_old=x_new
        #将提升后的值代入导函数求得新的坐标点;
        #当导函数无限的笔记0的时候,x_old与x_new也就无限逼近了
        x_new=x_old+alpha*gradientPrim(x_old)

    print(x_new)

Gradient()

总结

梯度上升与梯度下降算法主要的一个思想

  • 当函数达到极值点时,导函数为0,这时新的坐标点与旧的坐标点之间的距离将无限的逼近
  • 逼近的精度受到判断指标presision影响
  • 同时步长主要影响的是迭代的次数

参考

https://blog.csdn.net/c406495762/article/details/77723333