機器學習 批量梯度下降法(線性回歸中的使用)

2022-03-22 01:36:53 字數 3024 閱讀 2514

1)基礎概念

2)梯度下降原理

此圖為有兩個引數的梯度下降法的視覺化:z = x2 + 2y2;

一圈圈的紅線為等高線,也就是每次引數x、y的變化後目標函式 z 的取值;

越外圈的 z 的取值越大,中心位置表示 z 的最小值;

z 的取值可以延不同的方向逐層下降,箭頭表示梯度下降的方向,也是 z 的取值變化最快的方向;

圈與圈之間的間距為目標函式 z 的變化量;

最外圈的間距較大,也就是 z 的變化量較大;

3)推導目標函式

▽j(θ) 中,θ 是未知數,x 是樣本中的已知數;

公式變形思路:▽j(θ) 中的每一項都是 m 項的求和,因此梯度的大小跟樣本數量有關,樣本數量越大,梯度中的每乙個元素值也就越大,因此所求得的梯度中的每乙個元素的值,受到了 m 的影響,而在優化的過程中,梯度中的每乙個元素的值最好和 m 無關;

目標函式變形——確定使用梯度法所要優化的最終的目標函式:j(θ) = mse (y, ý)

新增乙個 1/m 是為了減小梯度的元素值;

4)思考總結1)解決簡單線性回歸演算法

x_b:變形後的x_train資料集;

y:訓練資料集y_train;

initial_theta:用於儲存搜尋過程中的theta值;

eta:xuexilv;

n_iters:搜尋迴圈的次數;

epsilon:搜尋精度;

2)封裝即呼叫

def fit_gd(self, x_train, y_train, eta=0.01, n_iters=1e4):

"""根據訓練資料集x_train, y_train, 使用梯度下降法訓練linear regression模型

"""assert x_train.shape[0] ==y_train.shape[0], \

"the size of x_train must be equal to the size of y_train

"def

j(theta, x_b, y):

try:

return np.sum((y - x_b.dot(theta)) ** 2) /len(y)

except

:

return float('

inf'

)

defdj(theta, x_b, y):

res =np.empty(len(theta))

res[0] = np.sum(x_b.dot(theta) -y)

for i in range(1, len(theta)):

res[i] = (x_b.dot(theta) -y).dot(x_b[:, i])

return res * 2 /len(x_b)

#return x_b.t.dot(x_b.dot(theta) - y) * 2. / len(x_b)

def gradient_descent(x_b, y, initial_theta, eta, n_iters=1e4, epsilon=1e-8):

theta =initial_theta

cur_iter =0

while cur_iter gradient =dj(theta, x_b, y)

last_theta =theta

theta = theta - eta *gradient

if (abs(j(theta, x_b, y) - j(last_theta, x_b, y)) break

cur_iter += 1

return

theta

x_b = np.hstack([np.ones((len(x_train), 1)), x_train])

initial_theta = np.zeros(x_b.shape[1])self._theta=gradient_descent(x_b, y_train, initial_theta, eta, n_iters)

self.intercept_ =self._theta[0]

self.coef_ = self._theta[1:]

return self

#self._theta:為linearregression類的引數;

3)在jupyter notebook中呼叫封裝的**

1)對梯度多向量化處理

xb

t == xb . t:是 xb 的轉置矩陣;

2)例項

問題一:沒有得到準確度,說明優化時損失函式沒有收斂

分析:資料集中的資料值的大小差異較大,使用預設的 eta 求得的梯度非常大,使得梯度下降法的結果不收斂;

方案:修改 eata 值

問題二:準確度太小(與正規方程優化結果比較而言);

分析: eta 值太小,根據設定的迴圈次數沒能找到損失函式的最小值;

方案:修改迴圈次數

問題三:準確度還是太小(與正規方程優化結果比較而言),沒有到達損失函式的最小值;

分析:迴圈次數太小,或者 eta 值太小;

問題四:如果迴圈次數過大,或者 eta 太小,迴圈耗時比較大

分析(1):之所以出現這種現象,因為整體的資料集的數值不在同乙個規模上,也就是大小相差太大;

分析(2):由於有 eta 這個變數,如果最終資料集的資料不在乙個維度上(大小相差很大)將會影響梯度的結果,梯度的結果 乘與 eta 是損失函式真正每次變化的步長,則步長有可能或者太大或者太小,如果步長太大會導致損結果不收斂,如果步長太小會導致搜尋過程太慢;

方案:對資料集做歸一化處理

3)梯度下降法比正規化方程優化法的優勢

優點:使用梯度下降法優化,耗時更少

原因:正規方程處理的是 m 行 n 列的矩陣,對矩陣進行非常多的乘法運算,如果矩陣比較大時,用正規方程法優化耗時較多

機器學習 隨機梯度下降法(線性回歸中的應用)

只針對線性回歸中的使用 1 批量梯度下降法的特點 運算量大 批量梯度下降法中的每一項計算 要計算所有樣本 共 m 個 批量梯度下降法的梯度是損失函式減小最快的方向,也就是說,對應相同的 theta 變化量,損失函式在梯度方向上的變化量最大 1 基礎理解 2 優化方向的公式 每一次搜尋的方向,不能保證...

機器學習之梯度下降法求解線性回歸

最小二乘法的優點 準確率比較高,缺點 當有兩個或者兩個以上的變數時,就會出現計算量大,過於複雜。這時我們將用梯度下降的方法來畫出擬合圖。梯度下降 import pandas as pd import numpy as np import matplotlib.pyplot as plt points...

線性回歸與梯度下降法

原文 最近在看斯坦福的 機器學習 的公開課,這個課程是2009年的,有點老了,不過講的還是很好的,廓清了一些我以前關於機器學習懵懂的地方。我的一位老師曾經說過 什麼叫理解?理解就是你能把同乙個事情用自己的語言表達出來,並且能讓別人聽得懂。本著這樣的原則,同時也為了證明自己是 理解 的,於是決定打算在...