在空間中找到一條線擬合已經存在的資料,訓練結束後對未知的資料有乙個**的作用。
線性回歸一般模型:
擴充套件到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 模型...