背景
學習 Linear Regression in Python – Real Python,對線性回歸理論上的理解做個回顧,文章是前天讀完,今天憑着記憶和理解寫一遍,再回溫更正。
線性回歸(Linear Regression)
剛好今天聽大媽講機器學習,各種復雜高大上的算法,其背后都是在求”擬合“。
線性回歸估計是最簡單的擬合了。也是基礎中的基礎。
依然是從字面上先來試着拆解和組合:
首先,Regression 回歸,指的是研究變量之間的關系,這個由來在Python 線性回歸(Linear Regression) - 到底什么是 regression?一文中講多了,這里不多重復。
然后,linear 線性,很直觀:直線。
二者連在一起,便是:變量之間呈直線關系。
那具體是哪些變量之間?
因變量 y 和 自變量 (x1...xr) 之間。
𝑦 = 𝛽₀ + 𝛽₁𝑥₁ + ⋯ + 𝛽ᵣ𝑥ᵣ + 𝜀
當只有一個 x1 的時候,就是最簡單的線性回歸 𝑦 = 𝛽₀ + 𝛽₁𝑥₁
。
具體怎么理解這個公式呢?
舉個簡化的例子:員工的工資 y 與 學歷 x 的關系。
假設學歷越高,工資也越高,二者是某種程度上的線性關系,
那在理論上會存在這么一個公式 y = 𝛽₀ + 𝛽₁𝑥
,其中,x1...xn, y1...yn:
- x 和 y 的數據很容易拿到(當然合法渠道了,假設你是 hr 總監)
- hr 總監想做的是,根據這組 (x y)數據,找出 𝛽₀ 和 𝛽₁ 的值,二者稱為回歸系數
- 這樣,下一次招聘的時候,根據應聘者的學歷,可以先估一個工資了。
這個過程便是:數據 -> 建立模型 f(x) -> 預測
只是,理論和實際總是有差別的,就像 1/3 ~= 0.3333333333333...
所以,實際擬合到的模型可能是這樣的: f(x) = 𝑏₀ + 𝑏₁𝑥
𝛽₀ 和 𝛽₁ 分別與 𝑏₀ 和 𝑏₁ 有多接近?
當然是擬合出來的越接近越好;
如何知道有多接近?
簡單,
- 將 x1...xn 代入到擬合后的模型中 f(x),
- 求得新的 new_y1...new_yn
- 再跟原 y1...yn 比較,比如
new_y1 - y1
(稱為殘差)- 這里要用到最小二乘法(method of ordinary least squares)
- 因為殘差可能是負的,
- 所以用殘差平方和
回歸要解決的問題就是:以最簡單的線性回歸為例:
- 找到最佳的 𝑏₀ 和 𝑏₁, 使模型
f(x) = 𝑏₀ + 𝑏₁𝑥
最接近理論上的線性模型y = 𝛽₀ + 𝛽₁𝑥
- 然后,用這個擬合好的模型
f(x) = 𝑏₀ + 𝑏₁𝑥
來預測新的數據
線性回歸好多種
除了上面例子中的最簡單的線性回歸,還有:
- 多元線性回歸:Multiple linear Regression
𝑓(𝑥₁, 𝑥₂) = 𝑏₀ + 𝑏₁𝑥₁ + 𝑏₂𝑥₂
- 多項式回歸:Polynomial Regression
𝑓(𝑥) = 𝑏₀ + 𝑏₁𝑥 + 𝑏₂𝑥²
....
即從二維轉為三維、多維空間擬合了。這個有點復雜了,不過原理和前面是相通的。
擬合的程度
過猶不及用在這里也適合,過度擬合也很脆弱的,因為可能新增加一個或幾個數據就破壞了之前的完美,就好像專門為你定制的帽子戴在別人頭上就沒那么合適和美了。
](https://files.realpython.com/media/poly-reg.5790f47603d8.png)
當然,擬合的不及也不好,這時候可能就要換模型或者調參了吧
Reference
本文由博客一文多發平台 OpenWrite 發布!