梯度下降演算法的簡單Python原理實現

2021-09-26 21:06:52 字數 1803 閱讀 3188

#梯度下降 == 導數值下降

#import matplotlib.pyplot as plt

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**

2pass

defgradientfunc

(p):

return2*p

pass

#猜測的過程

defgradientcal

(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

梯度下降演算法 梯度下降演算法為何叫梯度下降?

首先,我們知道乙個演算法的名字可以很好地去解釋乙個演算法,那麼梯度下降演算法是什麼呢?很明顯的,就是用梯度這個工具來解決問題的一種演算法。解決什麼問題呢?如何在乙個函式曲面的某一點,找到乙個函式值變化最大的方向。比如 我們站在山上的某一點,我們想要以最快的速度上山,但是我們的步子大小是一定的,那麼最...

簡單隨機梯度下降演算法

import numpy as np import matplotlib as plt import os os.environ tf cpp min log level 2 x np.arange 50 0 50 np.random.seed 1 每次生成的隨機數相同 randomarray np...

簡單的梯度下降展示 python

概念 梯度下降是迭代法的一種,可以用於求解最小二乘問題 線性和非線性都可以 二維的 梯度下降 導數值下降 import matplotlib.pyplot as plt import numpy as np f x x 2,目標函式 f x 2 x 梯度函式 一階導數函式 f x1,x2.xn 梯度...