線形回帰の基礎

scikit-learn による教師あり学習

George Boorman

Core Curriculum Manager, DataCamp

回帰の仕組み

  • $y = ax + b$

    • 単純線形回帰は1つの特徴量を使用する

      • $y$ = ターゲット

      • $x$ = 単一の特徴量

      • $a$, $b$ = モデルのパラメータ/係数 - 傾き、切片

  • $a$ と $b$ の選択方法

    • 任意の直線に対する誤差関数を定義する

    • 誤差関数を最小にする線を選択する

  • 誤差関数 = 損失関数 = コスト関数

scikit-learn による教師あり学習

損失関数

散布図

scikit-learn による教師あり学習

損失関数

左下から右上へ、観測値の中央を通る回帰直線

scikit-learn による教師あり学習

損失関数

回帰直線から各観測値への赤い線

scikit-learn による教師あり学習

損失関数

赤い線は残差を表す

scikit-learn による教師あり学習

損失関数

回帰直線の上に観測値があるため、正の矢印を強調する矢印

scikit-learn による教師あり学習

最小二乗法

回帰直線の下にある残差を指す2本目の矢印。負の残差を表す

$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はまったく同じように動作する:
    • 特徴量と目的変数の2つの配列を渡す
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^2$:特徴量によって説明される目的変数の分散を定量化する

    • 値の範囲:0~1
  • $R^2$ が大きい場合:

左下から右上へ45度で伸び、すべての観測値に近い回帰直線

  • $R^2$ が小さい場合:

回帰直線が水平に走り、観測値がその線から離れて広がっている

scikit-learn による教師あり学習

scikit-learn における決定係数

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...