線性回歸 簡單python實現

2021-10-10 12:54:35 字數 1784 閱讀 1907

在空間中找到一條線擬合已經存在的資料,訓練結束後對未知的資料有乙個**的作用。

線性回歸一般模型:

擴充套件到n維空間:

構建模型後需要對引數進行優化,使其構造的回歸模型能最為精確的對資料進行擬合。可以直觀的看出,該模型的優化問題是乙個凸優化問題,找到的最優解即為全域性最優解。整體演算法描述如下:

該問題轉化為了乙個優化問題,對該問題有兩種方法求解:正規方程解和梯度下降法,

正規方程解,由於是凸優化問題,分別對帶求引數進行求導令其為0:

有了w和b,就能對未知資料進行**。同時,在n維空間中,若找到了最優模型,那麼對每乙個引數都可以有乙個解釋,若引數前面的w大,說明該變數對結果的影響大,若w接近於0,說明該引數無論怎麼變化對結果的影響力都不大。

下面採用梯度下降演算法對一簡單資料進行回歸(沒有對資料進行歸一化和分測試集、訓練集的操作,僅僅體現演算法原理)

import matplotlib.pyplot as plt

import numpy as np

##設定簡單資料集 y=2x+0.5

x_data=np.linspace(-1,1,100)

nosie=np.random.normal(0,0.05,x_data.shape)

y_data=2*x_data+0.5+nosie

w=0b=1

lr=0.005 #學習率

epoch=50000 #玩50000回合

def gradient(x_data,y_data,w,b,lr,epoch):

n=float(len(x_data))

for i in range(epoch):

w_grad=0

b_grad=0

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

w_grad+=-x_data[j]*(y_data[j]-(w*x_data[j]+b))*(1/n)

b_grad=-(y_data[j]-(w*x_data[j]+b))*(1/n)#計算w 和 b的導數

w=w-w_grad*lr

b=b-b_grad*lr#梯度下降更新w b

if i==49999:

print('epoch:',i)

print('w=',w,'b=',b)

plt.scatter(x_data,y_data,)

plt.plot(x_data,w*x_data+b,'r') #視覺化結果

plt.show()

return w,b

gradient(x_data,y_data,w,b,lr,epoch)

最後,所得結果如下:

初步完成了回歸的操作。

python多元線性回歸簡單實現

繼上次對成都房租進行視覺化後,這次簡單的做乙個成都房租與面積 所屬區的多元回歸分析。資料集一共有3w資料,每一組觀測值對應乙個房租情況,其中 價錢 乙個月房租,單位人民幣。面積 租房的面積,單位平方公尺。所屬區 序號如下 步驟1 首先使用pandas庫匯入資料 import pandas as pd...

機器學習 線性回歸python簡單實現

寫下這篇部落格只是為了當做乙個記錄記下來,以後可以回頭看看,不至於每遇到一次都要去實現一遍。線性回歸的主要內容如下 因為要最小化j,有兩種方法,一種是最小二乘法直接求解,另一種是梯度下降法。這裡記錄的是梯度下降法。梯度下降法可以歸結為ng課程中以下的 所以線性回歸梯度下降法的主要核心就在於對thet...

python實現線性回歸

定義 線性回歸在假設特徵滿足線性關係,根據給定的訓練資料訓練乙個模型,並用此模型進行 文中只介紹了簡單的概念,不涉及公式的證明等。從最簡單的一元線性關係介紹,假設有一組資料型態為 y theta x,其中 x y 我們根據 x,y 模擬出近似的 theta 引數值,進而得到 y theta x 模型...