線性回歸基本概念
線性回歸是利用數理統計中的回歸分析來确定兩種或兩種以上變量間互相依賴的定量關系的一種統計分析方法,表達形式為y=wx+e,其中e為誤差服從均值為0的正态分布。
回歸分析中,隻包括一個自變量和一個因變量,且二者的關系可用一條直線近似表示,這種回歸分析稱為回歸分析。如果回歸分析中包含兩個或兩個以上的自變量,且因變量和自變量之間是線性關系,則稱為多元線性回歸分析。
簡單來說,線性回歸對于輸入x和輸出y有一個映射f,y=f(x),而f的形式為ax+b,其中a、b為兩個可調的參數,訓練的時候就是訓練a、b這兩個參數。
使用PyTorch實作線性回歸
下面使用PyTorch做一個詳細的解釋。首先導入相應的子產品包:
import torchfrom torch.nn import Linear, Module, MSELossfrom torch.optim import SGDimport numpy as npimport pandas as pdimport matplotlibimport matplotlib.pyplot as pltimport seaborn as sns
定義一個線性函數,這裡使用y=2x+1,這裡的2和1對應的就是上述的參數a和b,使用matplotlib可視化這個函數。

可視化線性函數
我們生成一些随機的點作為訓練資料,并使用seaborn将這些資料顯示在圖上。
随機生成訓練資料
下面使用PyTorch建立一個線性的模型來對其進行拟合,也就是我們所說的訓練過程。由于隻有一層線性模型,我們可以直接使用torch.nn子產品中的Linear模型。
model = Linear(1, 1)
其中,(1, 1)表示輸入輸出的特征數量都是1。Linear模型的表達式為y=w·x+b,w代表權重,b代表偏置。損失函數使用均方損失函數:MSELoss。優化器選擇最常用的優化方法:梯度下降法SGD,就是每次疊代計算mini-batch的梯度,再對參數進行更新。學習率選擇0.01。關于損失函數與梯度下降的相關概念後續會介紹。
critertion = MSELoss()optim = SGD(model.parameters(), lr=0.01)
我們設定訓練次數為3000,并準備訓練資料x_train和y_train。x_train和y_train的形狀為(256, 1),表示mini-batch大小為256,feature為1。
x_train = x.reshape(-1, 1).astype('float32')y_train = y.reshape(-1, 1).astype('float32')
上述代碼中的astype('float32')是為了下一步可以直接轉換為torch.float類型的資料。現在可以開始訓練了。
訓練
上述代碼完成了3000次的訓練,為了便于觀察,每200次輸出一下損失值,可以看到,随着訓練次數的增加,損失值在不斷減少。
訓練結果
完成訓練後,可以通過model.parameters( )擷取模型參數。其中,w和b就是我們訓練的模型參數。
擷取訓練模型參數
我們期望的是w=2,b=1,而訓練結果w=2.011474609375,b=0.9763303995132446已經幾乎接近于期望了。
最後我們将模型可視化。
模型可視化
至此,我們就完成了通過PyTorch實作的一個簡單線性回歸的樣例。