python批量梯度下降算法(人工智能的核心)

批量梯度下降算法

背景:

批量梯度下降算法是1847年由著名数学家Cauchy给出的,它是解析法中最古老的一种,其他解析方法或是它的变形,或是受它的启发而得到的,因此它是最优化方法的基础。作为一种基本的算法,他在最优化方法中占有重要地位。

优点:工作量少,存储变量较少,初始点要求不高;
缺点:收敛慢,效率不高,有时达不到最优解。

所谓梯度下降就是导数值下降

梯度函数是由目标函数求导或偏导得到的,目的是找出目标函数的极值点

具体代码如下:
import matplotlib.pyplot as plt
import numpy as np

# f(x) = x^2, 目标函数
# f'(x) = 2*x  梯度函数:一阶导数函数
# f(x1, x2...xn) = a0 + a1*x1 + a2*x2 + ...+  an*xn  # 


# 梯度下降算法是一个方法,是帮助我们找极值点的方法cost # 凸函数
def targetFunc(x):
    return x**2       # 目标函数
    pass

def gradientFunc(x):
    return 2*x        #梯度函数:目标函数的一阶导
    pass

listx = []            #列表用于存储逐渐步进的点

# 猜测的过程
def gradientCal(initX, targetFunc, gradientFunc, rating=0.1, tolent=0.000000001, times = 500000):
    '''
    :param initX: 猜测的点
    :param targetFunc: 目标函数
    :param gradientFunc: 梯度函数
    :param rating: 步进系数
    :param tolent: 收敛条件
    :return: 返回极值点x值
    '''
    result = targetFunc(initX)           # 计算出initX这个点的实际值
    gradientResult = gradientFunc(initX) # 计算出initX这个点的导数,也是斜率,梯度
    listx.append(initX)
    newX = initX - rating*gradientFunc(initX)
    newResult = targetFunc(newX)

    reResult = np.abs(result - newResult)
    t = 0
    while reResult > tolent and t < times:
        t += 1
        initX = newX
        result = newResult
        listx.append(initX)
        newX = newX - rating * gradientFunc(newX)
        newResult = targetFunc(newX)
        reResult = np.abs(result - newResult)
        pass
    return initX

    pass

if __name__ == "__main__":
    print(gradientCal(10, targetFunc, gradientFunc))
    x = np.arange(-10, 10+1, 1)
    y = x**2

    plt.plot(x, y)
    plt.grid(linestyle='--')
    plt.scatter(np.array(listx), np.array(listx)**2 , s=20)
    plt.show()

    # print(listx)
    pass

如下图为运行效果:
在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值