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

2022-02-23 12:55:41 字數 2514 閱讀 6033

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

假設我們的資料集為

# 訓練資料

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])

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

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

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

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

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

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

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

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

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

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

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

計算可得到:

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,這個小於誤差則擬合成功

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

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

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

梯度下降法 一元線性回歸

import numpy as np import matplotlib.pyplot as plt 載入資料,delimite表示分隔符為逗號 data np.genfromtxt data.csv delimiter x data data 0 y data data 1 plt.scatter...

梯度下降法 一元線性回歸

import numpy as np import matplotlib.pyplot as plt 載入資料 data np.genfromtxt data.csv delimiter x data data 0 y data data 1 plt.scatter x data,y data pl...

線回與非線回 梯度下降法的一元線性回歸

對於線性回歸問題,通常有兩種方法可以解決,即梯度下降法和標準方程法,兩者各有優缺點 梯度下降法對於引數多的回歸方程仍然適用,但並不是每次都能達到最優解,神經網路也需要梯度下降法來解決 標準方程法適用於引數少的回歸方程,但是時間複雜度較高 首先來看一下梯度下降法的 import numpy as np...