大白話解讀梯度下降法解決一元線性回歸


1.一元線性回歸與損失函數

在我們解決一元線性回歸進行擬合曲線的時候,常常會使用梯度下降法。

假設我們的數據集為

# 訓練數據
x_train = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])
y_train = np.array([1, 3, 4, 5, 6, 7, 8, 9, 10])

我們想將其擬合成一條曲線,然后進行訓練。擬合曲線表示如下

我們如何去擬合呢?顯然兩點確定一條直線的。我們就其次,然后求得一個函數,各個點到該函數的方差和最小,於是,我們將其稱為損失函數(也叫代價函數、目標函數),該函數如下

該方程為凸函數,並且有極小值。

2.梯度下降法求解最小值

我們解決一個函數的最小值的時候,往往會想到使用導數來求。但是,在多維數據,或者大數據情況下,這種求解方法不適用。

於是,我們有了一個新的方法。

例題:求解y = x^2的極小值

1.我們可以隨機取一個點m,假設取到了10, 那么我們顯然偏離了,我們進行計算,發現y = 10^2=100,偏右邊了怎么辦呢?

2.我們將m減去導數,得到100-2*10,靠近了一點點,我們反復取值,即可靠近最低點。

3.在機器學習中,往往允許的誤差是極小的,所以,我們應該將m乘上一個alpha值,這個值是學習率,學習率越低,往往擬合函數越好,但是也不是無限低的。

3.梯度下降求解一元線性回歸

我們將梯度下降,用來求解一個線性回歸,那么任意取值w0, w1

w0, w1每次變動的值為對w0, w1的偏導數,即:

計算可得到:

4.由3我們可以得到python代碼和擬合圖像

import numpy as np
import matplotlib.pyplot as plt

def h(x):
    return w0 + w1 * x // 函數

if __name__ == '__main__':
    # alpha學習率
    rate = 0.02

    # y = w0 * x + w1
    w0 = np.random.normal()
    w1 = np.random.normal()

    # 訓練數據
    x_train = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])
    y_train = np.array([1, 3, 4, 5, 6, 7, 8, 9, 10])

    err = 1
    # 計算誤差函數
    while (err > 0.1):
        for (x, y) in zip(x_train, y_train):
            w0 -= (rate * (h(x) - y) * 1)
            w1 -= (rate * (h(x) - y) * x)

        # 代入找誤差
        err = 0.0
        for (x, y) in zip(x_train, y_train):
            err += (y - h(x)) ** 2
        err /= float(x_train.size * 2)

    # 打印
    print("w0的值為%f" % w0)
    print("w1的值為%f" % w1)
    print("誤差率的值為%f" % err)

    # 畫圖
    x = np.linspace(0, 10, 10)
    y = h(x)

    plt.figure()
    plt.plot(x_train, y_train, 'ro')
    plt.plot(x, y)
    plt.title("linear_regression")
    plt.xlabel('x')
    plt.ylabel('h(x)')
    plt.show()

擬合圖像如下:

我們發現在編碼的過程中,我們有2個停止迭代的條件:

1.嘗試次數,嘗試次數 < 給定次數(因為有時候你的閾值設置不對會造成死循環)
2.誤差值MSE,這個小於誤差則擬合成功

5.常見問題

1.如果我們把alpha學習率設置為大於1,那么我們會error,因為,造成了梯度向上

2.如果我們采用絕對值代替方差,可行嗎?

不可行,因為平方,會擬合的更完善。而絕對值可能造成過擬合,使我們預測不准確。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM