多元線性回歸 梯度下降法 sklearn實現

2021-09-24 03:14:25 字數 4029 閱讀 3169

載入資料

data = genfromtxt(r"\delivery.csv"

, delimiter=

',')

觀察一下資料

x_data為特徵值,y_data為標籤值

所以應該設定3個引數θ0,θ1,θ2

lr = 0.0001

# 引數

theta0 = 0

theta1 = 0

theta2 = 0

# 最大迭代次數

epochs = 1000

接下來與一元線性回歸一樣,用最小二乘和梯度下降求解引數

:# 計算總資料量

m =float

(len

(x_data)

)for i in

range

(epochs)

: theta0_grad =

0 theta1_grad =

0 theta2_grad =

0# 計算梯度的總和再求平均

for j in

range(0

,len

(x_data)):

theta0_grad +=-(

1/m)

*(y_data[j]

-(theta1 * x_data[j,0]

+ theta2*x_data[j,1]

+ theta0)

) theta1_grad +=-(

1/ m)

* x_data[j,0]

*(y_data[j]

-(theta1 * x_data[j,0]

+ theta2 * x_data[j,1]

+ theta0)

) theta2_grad +=-(

1/ m)

* x_data[j,1]

*(y_data[j]

-(theta1 * x_data[j,0]

+ theta2 * x_data[j,1]

+ theta0)

)#更新b和k

theta0 = theta0 -

(lr*theta0_grad)

theta1 = theta1 -

(lr*theta1_grad)

theta2 = theta2 -

(lr*theta2_grad)

return theta0, theta1, theta2

theta0, theta1, theta2 = gradient_descent_runner(x_data, y_data, theta0, theta1, theta2, lr, epochs)
畫圖

ax = plt.figure(

).add_subplot(

111, projection=

'3d'

)ax.scatter(x_data[:,

0], x_data[:,

1], y_data, c=

'r', marker=

'o', s=

100)

# 點為紅色三角形

x0 = x_data[:,

0]x1 = x_data[:,

1]# 生成網路矩陣

x0, x1 = np.meshgrid(x0, x1)

z = theta0 + x0 * theta1 + theta2

# 畫3d圖

ax.plot_su***ce(x0, x1, z)

# 設定座標軸

載入資料、切分資料與普通方法無異

建立模型

model = linear_model.linearregression(

)model.fit(x_data, y_data)

列印出相關資訊

# 係數

print

('coefficients:'

, model.coef_)

# 截距

print

('intercept:'

, model.intercept_)

對模型進行測試

畫圖,包括生成網格圖、3d圖,可以更好地觀察擬合效果

ax = plt.figure(

).add_subplot(

111, projection =

'3d'

)ax.scatter(x_data[:,

0], x_data[:,

1], y_data, c=

'r', marker=

'o', s=

100)

x0 = x_data[:,

0]x1 = x_data[:,

1]# 生成網路矩陣

x0, x1 = np.meshgrid(x0, x1)

z = model.intercept_ + x0 * model.coef_[0]

+ x1 * model.coef_[1]

# 畫3d圖

ax.plot_su***ce(x0, x1, z)

# 設定座標軸

梯度下降法 sklearn多元線性回歸

是我跟著網課學習自己敲得,資料來源delivery.csv我將會放在我的資源裡,大家有興趣可以試試 import numpy as np from numpy import genfromtxt from sklearn import linear model import matplotlib.p...

線性回歸與梯度下降法

原文 最近在看斯坦福的 機器學習 的公開課,這個課程是2009年的,有點老了,不過講的還是很好的,廓清了一些我以前關於機器學習懵懂的地方。我的一位老師曾經說過 什麼叫理解?理解就是你能把同乙個事情用自己的語言表達出來,並且能讓別人聽得懂。本著這樣的原則,同時也為了證明自己是 理解 的,於是決定打算在...

20191008 線性回歸 梯度下降法

不斷的迭代,還是波士頓房價 獲取資料 資料清洗預處理 劃分資料集 特徵工程 預估器流程 coef intercept 模型評估 from sklearn.datasets import load boston from sklearn.model selection import train tes...