線性迴歸基礎

使用 scikit-learn 進行監督式學習

George Boorman

Core Curriculum Manager, DataCamp

迴歸的運作機制

  • $y = ax + b$

    • 簡單線性迴歸使用單一特徵

      • $y$ = 目標

      • $x$ = 單一特徵

      • $a$, $b$ = 模型參數/係數:斜率、截距

  • 如何選擇 $a$ 和 $b$?

    • 為每條直線定義一個誤差函式

    • 選擇讓誤差函式最小的那條線

  • 誤差函式 = 損失函式 = 成本函式

使用 scikit-learn 進行監督式學習

損失函式

散佈圖

使用 scikit-learn 進行監督式學習

損失函式

由左下到右上穿過觀測點中央的迴歸線

使用 scikit-learn 進行監督式學習

損失函式

從迴歸線到各觀測值的紅線

使用 scikit-learn 進行監督式學習

損失函式

紅線代表殘差

使用 scikit-learn 進行監督式學習

損失函式

箭頭標示正殘差:觀測值在迴歸線之上

使用 scikit-learn 進行監督式學習

Ordinary Least Squares

第二個箭頭指向迴歸線下方的殘差,代表負殘差

$RSS = $ $\displaystyle\sum_{i=1}^{n}(y_i-\hat{y_i})^2$

普通最小平方法(OLS):使 RSS 最小化

使用 scikit-learn 進行監督式學習

高維度的線性迴歸

$$ y = a_{1}x_{1} + a_{2}x_{2} + b$$

  • 這裡要擬合線性迴歸模型:
    • 需指定 3 個變數:$ a_1,\ a_2,\ b $
  • 更高維度時:
    • 稱為多元迴歸
    • 必須為每個特徵設定係數,並包含變數 $b$

$$ y = a_{1}x_{1} + a_{2}x_{2} + a_{3}x_{3} +... + a_{n}x_{n}+ b$$

  • scikit-learn 的用法完全相同:
    • 傳入兩個陣列:features 與 target
使用 scikit-learn 進行監督式學習

使用所有特徵的線性迴歸

from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
reg_all = LinearRegression()
reg_all.fit(X_train, y_train)
y_pred = reg_all.predict(X_test)
使用 scikit-learn 進行監督式學習

R-squared(決定係數)

  • $R^2$:量化特徵可解釋的目標變異程度

    • 介於 0 到 1
  • 高 $R^2$:

45 度由左下到右上的迴歸線,貼近多數觀測值

 

 

  • 低 $R^2$:

水平的迴歸線,觀測值分散遠離該線

使用 scikit-learn 進行監督式學習

scikit-learn 中的 R-squared

reg_all.score(X_test, y_test)
0.356302876407827
使用 scikit-learn 進行監督式學習

均方誤差與均方根誤差

$MSE = $ $\displaystyle\frac{1}{n}\sum_{i=1}^{n}(y_i-\hat{y_i})^2$

  • $MSE$ 的單位為目標變數的平方

 

$RMSE = $ $\sqrt{MSE}$

  • $RMSE$ 與目標變數單位相同
使用 scikit-learn 進行監督式學習

scikit-learn 計算 RMSE

from sklearn.metrics import root_mean_squared_error

root_mean_squared_error(y_test, y_pred)
24.028109426907236
使用 scikit-learn 進行監督式學習

一起來練習吧!

使用 scikit-learn 進行監督式學習

Preparing Video For Download...