線性迴歸

線性迴歸(Linear Regression)是統計分析、機器學習中最基礎也是最重要的算法之一,利用線性函數對一個或多個自變量和因變量(y)之間的關係進行擬合模型,用來做預測。

根據自變量(樣本特徵)個數分爲一元和多元線性迴歸:
\[ Y=a + bx \]

\[ Y = a+ b1X1 + b2X2 + b3X3 + ... + bkXk \]

開胃小菜

什麼是線性?

首先看看線性函數的定義:一階或零階多項式。特徵是一維時,線性模型在二維空間構成一條直線;特徵是二維時,線性模型在三維空間中構成一個平面;特徵是三維時,則最終模型在四維空間中構成一個體;以此類推…

線性迴歸具體什麼時候使用呢?

  1. 迴歸問題,因變量是連續值
  2. 自變量和因變量存在線性關係

其實,這裏我們可以大概將線性迴歸概括爲:在N維空間中找到一個線性函數(一條直線,一個平面...)來擬合數據。

看圖更直觀一些:

線性迴歸的目標就是找到圖中的直線或平面來擬合圖中的點,再結合上述迴歸方程可以得到:線性迴歸的目標就是找到迴歸參數a和b。

怎樣找到,且找到最優值呢?

在一個二維空間找到一條直線是簡單的,但是怎樣找到一條最佳擬合直線是一個值得思索的問題。不妨換一種思路:預測值和真實值之間肯定是存在誤差的,那麼要是能將誤差的最小值找到,就可以使得預測值和真實值無限接近,此時便是最優值。

因此,線性迴歸可以轉換爲最小化預測值和真實值誤差的問題。

怎樣最小化誤差呢?

常見的有最小二乘法和梯度下降法。

實現

機器學習相關的框架和庫基本都有實現線性迴歸的方法,今天介紹用sklearn一個經典實例,預測房價:

from sklearn import datasets
from sklearn.metrics import mean_squared_error
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split

import matplotlib as mpl
mpl.use("TkAgg")
import matplotlib.pyplot as plt


boston = datasets.load_boston()
X = boston.data
y = boston.target

x_train, x_test, y_train, y_test = train_test_split(X, y, test_size=1/5., random_state=8)

lr = LinearRegression()
lr.fit(x_train, y_train)
y_pred = lr.predict(x_test)

plt.title("linear_regression ")
plt.plot(y_test, color='green', marker='o', label='test')
plt.plot(y_pred, color='red', marker='+', label='predict')
plt.legend()
plt.show()


# 用均方誤差評估預測結果
mse = mean_squared_error(y_test, y_pred)
print("MSE:" + repr(mse))

數據集包含了波士頓房屋以及周邊環境的一些詳細信息,label字段爲房屋價格,數據集已經集成到scikit-learn中,可以直接加載數據,通過房屋及其相關的特徵使用線性迴歸預測房屋價格,最後使用均方誤差對預測結果進行評估。

總結

線性迴歸很簡單,但是不能擬合非線性數據,並且在實際項目中一般不會單獨使用線性迴歸。

但是,它確是很多強大的非線性模型的基礎,蘊含了機器學習中很多重要的思想,還是很值得學習的。

感興趣的朋友可以對線性迴歸進行推導。

以上。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章