1import
numpy as np
2import
matplotlib.pyplot as plt
34 x_data = [338,333,328,207,226,25,179,60,208,606]
5 y_data = [640,633,619,393,428,27,193,66,226,1591]67
8#生成從-200到-100的數,不包括-1009#
x軸10 x = np.arange(-200,-100,1)11#
y軸12 y = np.arange(-5,5,0.1)13#
儲存對應的誤差
14 z =np.zeros((len(x),len(y)))15#
x橫向平鋪給x,y縱向平鋪給y16#
x,y = np.meshgrid(x,y)
17for i in
range(len(x)):
18for j in
range(len(y)):
19 b =x[i]
20 w =y[j]21#
按行進行計算誤差
22 z[j][i] =023#
誤差和24
for n in
range(len(x_data)):
25 z[j][i] = z[j][i] + (y_data[n] - b - w*x_data[n])**226#
歸一化27 z[j][i] = z[j][i]/len(x_data)
282930#
y = b + w * x
31 b = -120
32 w = -433#
lr = 0.0000001
34 lr = 0.000001#
學習速率35#
lr = 0.00001
36 iteration = 100000
3738
#記錄每次求得的b和w
39 b_history =[b]
40 w_history =[w]
4142
for i in
range(iteration):
43 b_grad = 0.0
44 w_grad = 0.0
4546
for n in
range(len(x_data)):
47 b_grad = b_grad - 2.0*(y_data[n] - b - w*x_data[n])*1.0
48 w_grad = w_grad - 2.0 * (y_data[n] - b - w * x_data[n]) *x_data[n]
49 b = b - lr *b_grad
50 w = w - lr *w_grad
5152
535455#
五十種顏色 透明度:0.8
56 plt.contourf(x, y, z, 50, alpha=0.8, cmap=plt.get_cmap('
jet'
))57
#畫出最優解的位置
58 plt.plot([-188.4],[2.67],'
x',ms=12,markeredgewidth=3,color='
orange')
59 plt.plot(b_history,w_history,'
o-',ms = 3,lw = 1.5,color = '
red')60
#繪製座標軸
61 plt.xlim(-200,-100)
62 plt.ylim(-5,5)63#
給座標軸命名
動態調整學習速率
1import
numpy as np
2import
matplotlib.pyplot as plt
34 x_data = [338,333,328,207,226,25,179,60,208,606]
5 y_data = [640,633,619,393,428,27,193,66,226,1591]67
8#生成從-200到-100的數,不包括-1009#
x軸10 x = np.arange(-200,-100,1)11#
y軸12 y = np.arange(-5,5,0.1)13#
儲存對應的誤差
14 z =np.zeros((len(x),len(y)))15#
x橫向平鋪給x,y縱向平鋪給y16#
x,y = np.meshgrid(x,y)
17for i in
range(len(x)):
18for j in
range(len(y)):
19 b =x[i]
20 w =y[j]21#
按行進行計算誤差
22 z[j][i] =023#
誤差和24
for n in
range(len(x_data)):
25 z[j][i] = z[j][i] + (y_data[n] - b - w*x_data[n])**226#
歸一化27 z[j][i] = z[j][i]/len(x_data)
282930#
y = b + w * x
31 b = -120
32 w = -433#
lr = 0.0000001
34 lr = 1#
學習速率35#
lr = 0.00001
36 iteration = 100000
3738
#記錄每次求得的b和w
39 b_history =[b]
40 w_history =[w]
4142 lr_b =0
43 lr_w =0
4445
46for i in
range(iteration):
47 b_grad = 0.0
48 w_grad = 0.0
4950
for n in
range(len(x_data)):
51 b_grad = b_grad - 2.0*(y_data[n] - b - w*x_data[n])*1.0
52 w_grad = w_grad - 2.0 * (y_data[n] - b - w * x_data[n]) *x_data[n]
5354 lr_b = lr_b + b_grad ** 2
55 lr_w = lr_w + w_grad ** 256#
b = b - lr * b_grad57#
w = w - lr * w_grad58#
動態調整學習速率
59 b = b - lr/np.sqrt(lr_b) *b_grad
60 w = w - lr/np.sqrt(lr_w) *w_grad
6162
636465#
五十種顏色 透明度:0.8
66 plt.contourf(x, y, z, 50, alpha=0.8, cmap=plt.get_cmap('
jet'
))67
#畫出最優解的位置
68 plt.plot([-188.4],[2.67],'
x',ms=12,markeredgewidth=3,color='
orange')
69 plt.plot(b_history,w_history,'
o-',ms = 3,lw = 1.5,color = '
red')70
#繪製座標軸
71 plt.xlim(-200,-100)
72 plt.ylim(-5,5)73#
給座標軸命名
74 plt.xlabel(r'
$b$',fontsize=16)
75 plt.ylabel(r'
$w$',fontsize=16)
76 plt.show()
python實現線性回歸
定義 線性回歸在假設特徵滿足線性關係,根據給定的訓練資料訓練乙個模型,並用此模型進行 文中只介紹了簡單的概念,不涉及公式的證明等。從最簡單的一元線性關係介紹,假設有一組資料型態為 y theta x,其中 x y 我們根據 x,y 模擬出近似的 theta 引數值,進而得到 y theta x 模型...
python實現線性回歸
線性回歸模型是最簡單的機器學習模型,基礎可以從線性回歸模型開始入手,慢慢地過渡到非線性回歸以及神經網路模型。1.概念 2.線性回歸 簡單回歸 乙個自變數輸入,y x是一對一的關係,對映到幾何上來說就是二維座標系的直線方程,可表示為y 多元回歸 多個自變數,改變維度的大小。即 3.最小二乘法 通過向量...
python實現線性回歸
線性回歸模型是機器學習中最基礎的演算法,同時也在工業上得到很大應用。編碼實現該方法,可以對其有個透徹理解。回歸模型 目標函式 對目標函式求偏導 更新引數 樣本矩陣表示 python 實現 import numpy as np class linear object def init self sel...