隨機梯度下降法

2021-09-10 09:14:01 字數 1566 閱讀 2213

#自定義虛擬資料集

import numpy as np

import matplotlib.pyplot as plt

m=100000

#m個樣本

x=np.random.normal(size=m)

x=x.reshape(-1

,1)y=

4.*x+3

.+np.random.normal(0,

3,size=m)

defj

(theta,x_b,y)

:try

:return np.

sum(

(y-x_b.dot(theta)**2

)/len(x_b)

except

:return

float

('inf'

)def

dj_sgd

(theta,x_b_i,y_i)

:return x_b_i.t.dot(x_b_i.dot(theta)

-y_i)*2

.def

sgd(x_b,y,initial_theta,n_iters)

: t0=

5 t1=

50def

learning_rate

(t):

retrun t0/

(t+t1)

theta=initial_theta

for cur_iter in

range

(n_iters)

: rand_i=np.random.randint(

len(x_b)

) gradient=dj_sgd(theta,x_b[rand_i]

,y[rand_i]

) theta=theta-learning_rate(cur_iter)

*gradient

return theta

%%time

x_b=np.hstack(

[np.ones(

(len

(x),1)

),x]

)initial_theta=np.zeros(x_b.shape[1]

)theta=sgd(x_b,y,initial_theta,n_iters=

len(x_b)//3

)

執行結果:

可以看出隨機梯度下降的準確率和梯度下降差不多,但是時間大大減少了。實際上這裡的時間花費只有1/3m。

在sklearn中使用隨機梯度下降法

from sklearn.linear_model import sgdregressor

sgd_reg=sgdregressor(

)%time sgd_reg.fit(x_train_standard,y_train)

sgd_reg.score(x_test_standard,y_test)

梯度下降法和隨機梯度下降法

批量梯度下降法 batch gradient descent 在更新引數時使用所有的樣本來進行更新 隨機梯度下降法 stochastic gradient descent 求梯度時沒有用所有的m個樣本的資料,而是僅僅選取乙個樣本j來求梯度。小批量梯度下降法 mini batch gradient d...

隨機梯度下降法

剛剛看完史丹福大學機器學習第四講 牛頓法 也對學習過程做一次總結吧。一 誤差準則函式與隨機梯度下降 數學一點將就是,對於給定的乙個點集 x,y 找到一條曲線或者曲面,對其進行擬合之。同時稱x中的變數為特徵 feature y值為 值。如圖 乙個典型的機器學習的過程,首先給出一組輸入資料x,我們的演算...

梯度下降法和隨機梯度下降法的區別

梯度下降和隨機梯度下降之間的關鍵區別 1 標準梯度下降是在權值更新前對所有樣例彙總誤差,而隨機梯度下降的權值是通過考查某個訓練樣例來更新的。2 在標準梯度下降中,權值更新的每一步對多個樣例求和,需要更多的計算。3 標準梯度下降,由於使用真正的梯度,標準梯度下降對於每一次權值更新經常使用比隨機梯度下降...