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