線性回歸之隨機梯度下降(sgd)

2021-08-22 00:13:11 字數 2081 閱讀 8935

梯度下降的原理:梯度下降

普通梯度下降bgd的方法簡單暴力,但是調整速度比較慢。

如果不想等所有資料都計算完了才開始調整w,而是計算完資料的一部分(batch_size)後就立即調整w,說白了就是在訓練過程中進行權重的更新。

這樣就成了隨機梯度下降

主要優點有:

* 收斂速度更快,

* 避免過擬合的問題。

**更新如下:

'''

隨機全梯度下降方法

改進:進行到一部分的時候即更新權重

'''import numpy as np

import math

print(__doc__)

sample = 10

num_input = 5

#加入訓練資料

np.random.seed(0)

normalrand = np.random.normal(0,0.1,sample) # 10個均值為0方差為0.1 的隨機數 (b)

weight = [7,99,-1,-333,0.06] # 1 * 5 權重

x_train = np.random.random((sample, num_input)) #x 資料(10 * 5)

y_train = np.zeros((sample,1)) # y資料(10 * 1)

for i in range (0,len(x_train)):

total = 0

for j in range(0,len(x_train[i])):

total += weight[j]*x_train[i,j]

y_train[i] = total+ normalrand[i]

# 訓練

np.random.seed(0)

weight = np.random.random(num_input+1)

rate = 0.04

batch = 3

deftrain

(x_train,y_train):

#計算損失

global weight,rate

predicty = np.zeros((len(x_train)))

for i in range(0,len(x_train)):

predicty[i] = np.dot(x_train[i],weight[0:num_input])+ weight[num_input]

loss = 0

for i in range(0,len(x_train)):

loss += (predicty[i]-y_train[i])**2

for i in range(0,len(weight)-1):

grade = 0

for j in range(0,len(x_train)):

grade += 2*(predicty[j]-y_train[j])*x_train[j,i]

weight[i] = weight[i] - rate*grade

grade = 0

for j in range(0,len(x_train)):

grade += 2*(predicty[j]-y_train[j])

weight[num_input] = weight[num_input] - rate*grade

return loss

for epoch in range(0,100):

begin = 0

while begin < len(x_train):

end = begin + batch

if end > len(x_train):

end = len(x_train)

loss = train(x_train[begin:end],y_train[begin:end])

begin = end

print("epoch: %d-loss: %f"%(epoch,loss)) #列印迭代次數和損失函式

print(weight)

SGD 隨機梯度下降法

中心思想 隨機梯度下降法是每次先將大量的訓練集中隨機打亂順序,再取其中固定數量的例項組成mini batch,按照minibatch進行權重和偏差的更新,重複操作直到所有的資料都按minibatch的規格取完了一遍,這時就完成了乙個epoch,然後在按照提前設定好的epoch數量進行重複計算更新。對...

python實現隨機梯度下降 SGD

使用神經網路進行樣本訓練,要實現隨機梯度下降演算法。這裡我根據麥子學院彭亮老師的講解,總結如下,神經網路的結構在另一篇部落格中已經定義 def sgd self,training data,epochs,mini batch size,eta,test data none if test data ...

梯度下降SGD

當資料過多時,無法將資料一次性載入到記憶體中,進行模型訓練,因此可以使用隨機梯度下降回歸器或分類器,作為線性 器 該方法每次只是用乙個觀察點來進行引數優化,因此 使用ridge或lasso回歸到達可比較的結果之前,採用了更多的迭代,但只需要較少的記憶體和時間。from sklearn.linear ...