概念
梯度下降是迭代法的一种,可以用于求解最小二乘问题(线性和非线性都可以)。
二维的
# 梯度下降 == 导数值下降
import matplotlib.pyplot as plt
import numpy as np
# f(x) = x^2, 目标函数
# f'(x) = 2*x 梯度函数:一阶导数函数
# f(x1, x2...xn)
# 梯度下降算法是一个方法,是帮助我们找极值点的方法cost
def targetFunc(x):
return (x-100)**2
pass
def gradientFunc(x):
return 2*x - 200
pass
listx = []
# 猜测的过程
def gradientCal(initX, targetFunc, gradientFunc, rating=0.1, tolent=0.000000001):
'''
:param initX: 猜测的点
:param targetFunc: 目标函数
:param gradientFunc: 梯度函数
:param rating: 步进系数
:param tolent: 收敛条件
:return: 返回极值点x值
'''
result = targetFunc(initX) # 计算出initX这个点的实际值
listx.append(initX)
# 核心梯度下降公式 rating自己确定
newX = initX - rating*gradientFunc(initX) #新x点
newResult = targetFunc(newX) # 新结果
reResult = np.abs(result - newResult) # 相差范围
while reResult > tolent