梯度下降算法的简单Python原理实现
import numpy as np
'''
目标函数:f(x) = x^2
梯度函数:一阶导数函数
f'(x) = 2*x
梯度下降算法是一个方法,是帮助我们找极值点的方法cost
'''
import matplotlib.pyplot as plt
import numpy as np
'''
目标函数:f(x) = x^2
梯度函数:一阶导数函数
f'(x) = 2*x
梯度下降算法是一个方法,是帮助我们找极值点的方法cost
'''
def targetFunc(p):
return p**2
pass
def gradientFunc(p):
return 2*p
pass
def gradientCal(targetFunc,gradinteFunc,*args,rating=0.001,tolent=0.000001):
'''
:param initX: 猜测的点
:param targetFunc: 目标函数
:param gradinteFunc: 导函数
:param rating: 步进系数
:param tolent: 收敛条件
:return: 返回极值点的X
'''
print(args)
p= np.array(args)
result = targetFunc(p)
gradientRestlt = gradinteFunc(p)
reResult = np.inf
newX = p - rating*gradinteFunc(p)
newresult = targetFunc(newX)
reResult = np.abs(result - newresult)
print(reResult)
reResultlen = reResult > tolent
while np.any(reResultlen):
p=newX
result=newresult
print(newX[reResultlen])
newX[reResultlen] =newX[reResultlen] - rating* gradinteFunc(newX[reResultlen])
newresult = targetFunc(newX)
reResult = np.abs(result - newresult)
reResultlen = reResult > tolent
print(reResultlen)
return p
pass
if __name__ == '__main__':
print(gradientCal(targetFunc,gradientFunc,10000,10))
pass