線性迴歸梯度下降

梯度下降:一種最優化算法,就是沿着函數的梯度方向尋找函數的最小值

線性迴歸模型:

最終的目標就是利用      (梯度下降法)      求出使      (誤差函數)      最小的線性函數的係數值

梯度下降算法有兩種

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)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章