線性回歸python實現

2022-03-12 22:38:42 字數 4440 閱讀 6724

1

import

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#

給座標軸命名

動態調整學習速率

1

import

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...