# y=4+3x+高斯雜訊
我們利用線性回歸原理,假設y=wx+b, 利用梯度下降法,去求解w,b。驗證w,b是否比較接近w=3,b=4
# 計算loss_function函式
'''loss = sum(y-(w*x+b))**2
'''#定義loss_functiondef computre_error_loss_function(b, w, x, y): totalerror = 0 # 初始error設定為0
for i in
range(0
,len
(x))
: x = x[i]
y = y[i]
totalerror = totalerror +
(y -
(w*x+b))**
2#計算所有樣本的error
return totalerror/
float
(len
(x))
#返回平均error
def
compute_grad
(b_cal, w_cal, x,y, learn_rate)
: b_grad =
0#初始b的導數值
w_grad =
0#初始w的導數值
n =float
(len
(x))
for i in
range(0
,len
(x))
: x,y = x[i]
,y[i]
b_grad =-(
2/n)
*(y-
((w_cal*x)
+ b_cal)
)+ b_grad #對b求導公式
w_grad =-(
2/n)
*x*(y-
((w_cal*x)
+b_cal)
)+ w_grad #對w求導公式
new_b = b_cal-
(learn_rate*b_grad)
#梯度更新
new_w = w_cal-
(learn_rate*w_grad)
#梯度更新
return
[new_b, new_w]
#返回引數權值
# 執行每個樣本的梯度更新
defgd_runner
(x,y,starting_b,starting_w,learn_rate, num_iter)
: b = starting_b
w = starting_w
for i in
range
(num_iter)
: b,w = compute_grad(b,w, x,y, learn_rate)
return
[b,w]
def
run():
#設定超引數
learn_rate =
0.001
# 設定學習率
init_b =
0#初始值
init_w =
0 num_iter =
100000
#設定迭代次數
print
('初始梯度引數:b=,w=,error ='
.format
(init_b,init_w,computre_error_loss_function(init_b,init_w,x,y)))
print
('runing...'
)[b,w]
= gd_runner(x,y,init_b,init_w, learn_rate, num_iter)
print
('迭代次數:iter=,b=,w=,error='
從圖6的結果來看,b=4.16,w=2.81,error=1.14,即使用梯度下降法求得 y=4.14+2.81*x,
這與原先的y=4+3*x+隨機雜訊(圖2公式)的函式比較接近。
關聯知識點:
pytorch_線性回歸問題
線性回歸的原理及其實現
pytorch線性回歸
線性回歸假設輸出與各個輸入之間是線性關係 y wx b pytorch定義線性回歸模型 def linreg x,w,b return torch.mm x,w b線性回歸常用損失函式是平方損失 2優化函式 隨機梯度下降 小批量隨機梯度下降 mini batch stochastic gradien...
pytorch 線性回歸
import torch from torch.autograd import variable import torch.nn.functional as f import matplotlib.pyplot as plt print torch.linspace 1,1,100 x torch....
Pytorch之線性回歸
import torch from torch import nn import numpy as np import torch.utils.data as data from torch.nn import init 使得模型的可復現性 torch.manual seed 1 設定預設的資料格式...