梯度下降:一種最優化算法,就是沿着函數的梯度方向尋找函數的最小值
線性迴歸模型:
最終的目標就是利用 (梯度下降法) 求出使 (誤差函數) 最小的線性函數的係數值
梯度下降算法有兩種
1.批量梯度下降(Batch gradient descent)
2.隨機梯度下降(Stochastic gradient descent)
練習題目
import numpy as np
def stochastic_gradient_descent(x, y, theta, alpha,m,max_iter):
"""隨機梯度下降法,每一次梯度下降只使用一個樣本。
:param x: 訓練集種的自變量
:param y: 訓練集種的因變量
:param theta: 待求的權值
:param alpha: 學習速率
:param m: 樣本總數
:param max_iter: 最大迭代次數
"""
deviation = 1
iter = 0
flag = 0
while True:
for i in range(m): #循環取訓練集中的一個
deviation = 0
h = theta[0] * x[i][0] + theta[1] * x[i][1]
theta[0] = theta[0] - alpha * (y[i] - h)*x[i][0]
theta[1] = theta[1] - alpha * (y[i] - h)*x[i][1]
iter = iter + 1
#計算誤差
for i in range(m):
deviation = deviation + (y[i] - (theta[0] * x[i][0] + theta[1] * x[i][1])) ** 2
if deviation <alpha or iter >max_iter:
flag = 1
break
if flag == 1 :
break
return theta, iter
x =np.array([[1,2],[2,5],[5,1],[2,4]])
y =np.array([19,26,19,20])
theta=[1,1]
ALPHA=0.001
MAX_ITER=5000
result,iters=stochastic_gradient_descent(x,y,theta,ALPHA,4,MAX_ITER)
print(result,iters)