多重線形回帰と正則化 | 回帰アルゴリズム | Pythonによる機械学習を学ぶ

スポンサーリンク
スポンサーリンク
amazon
スマイルSALE
--:--:--
ad. 価格範囲を指定して商品を探せます

多重線形回帰と正則化(Lasso、Ridge)

多重線形回帰は、複数の説明変数を使用して目的変数を予測する回帰手法です。しかし、説明変数が増えるとモデルが複雑になり、訓練データに過剰に適合してしまう過学習(オーバーフィッティング)が発生することがあります。

この問題を抑えるために利用されるのが正則化(Regularization)です。本記事では、多重線形回帰の基本と、代表的な正則化手法であるLasso回帰(L1正則化)とRidge回帰(L2正則化)について解説します。

多重線形回帰と正則化の違いを図で理解する

多重線形回帰と正則化の違いを図で理解する

多重線形回帰の基本

多重線形回帰は、複数の説明変数を利用して目的変数を予測する手法です。

モデルは次のような形で表されます。

y = w1 * x1 + w2 * x2 + ... + wn * xn + b
記号 意味
y 目的変数(予測したい値)
x1~xn 説明変数(特徴量)
w1~wn 各特徴量の重み(回帰係数)
b 切片

学習では、予測誤差が最も小さくなるように回帰係数と切片を求めます。

正則化とは

正則化は、回帰係数が過度に大きくなることを防ぎ、モデルの複雑さを抑えるための手法です。

複雑なモデルは訓練データには高精度でも、未知のデータでは性能が低下することがあります。正則化はそのような過学習を防ぐ目的で利用されます。

Lasso回帰とRidge回帰の仕組み

代表的な正則化手法としてLasso回帰とRidge回帰があります。

手法 特徴
Lasso回帰(L1正則化) 不要な特徴量の係数を0にして変数選択を行う
Ridge回帰(L2正則化) 係数を小さく抑えながら全特徴量を利用する

Lasso回帰(L1正則化)

Lasso回帰は、係数の絶対値にペナルティを与える手法です。

重要度の低い特徴量の係数を0にすることができるため、自動的に特徴量選択を行えるという特徴があります。

Ridge回帰(L2正則化)

Ridge回帰は、係数の二乗にペナルティを与える手法です。

係数を0にはせず、全体的に小さく抑えることで安定したモデルを構築できます。

Pythonでの多重線形回帰と正則化の実装

ここではScikit-learnを利用して、多重線形回帰、Lasso回帰、Ridge回帰を実装します。

データセットの準備

import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression, Lasso, Ridge
from sklearn.metrics import mean_squared_error

# サンプルデータの作成
np.random.seed(0)
X = np.random.rand(100, 3)
y = 3 * X[:, 0] + 2 * X[:, 1] - X[:, 2] + np.random.randn(100)

# 訓練データとテストデータに分割
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, random_state=42
)

3つの特徴量から目的変数を予測するサンプルデータを作成しています。

多重線形回帰の実装

# 多重線形回帰モデルの訓練
linear_model = LinearRegression()
linear_model.fit(X_train, y_train)

# 予測と評価
y_pred_linear = linear_model.predict(X_test)
mse_linear = mean_squared_error(y_test, y_pred_linear)

print(f'多重線形回帰のMSE: {mse_linear:.3f}')

通常の多重線形回帰を実行し、平均二乗誤差(MSE)で性能を評価しています。

Lasso回帰の実装

# Lasso回帰モデルの訓練
lasso_model = Lasso(alpha=0.1)

lasso_model.fit(X_train, y_train)

# 予測と評価
y_pred_lasso = lasso_model.predict(X_test)
mse_lasso = mean_squared_error(y_test, y_pred_lasso)

print(f'Lasso回帰のMSE: {mse_lasso:.3f}')

alphaは正則化の強さを表します。値が大きいほど係数が強く抑制されます。

Ridge回帰の実装

# Ridge回帰モデルの訓練
ridge_model = Ridge(alpha=1.0)

ridge_model.fit(X_train, y_train)

# 予測と評価
y_pred_ridge = ridge_model.predict(X_test)
mse_ridge = mean_squared_error(y_test, y_pred_ridge)

print(f'Ridge回帰のMSE: {mse_ridge:.3f}')

Ridge回帰では全ての特徴量を残したまま係数を小さく調整します。

Lasso回帰とRidge回帰の使い分け

項目 Lasso回帰 Ridge回帰
係数が0になる ×
特徴量選択 可能 不可
全特徴量を活用 一部除外される 活用される
多重共線性への対応 有効 特に有効

正則化を利用する際のポイント

  • alphaの調整: 正則化の強さはモデル性能に大きく影響するため、適切な値を探索する必要があります。
  • 特徴量の標準化: 正則化の前に標準化を行うことで、各特徴量の影響を公平に比較できます。
  • 交差検証の活用: GridSearchCVなどを利用して最適なパラメータを探索することが推奨されます。

まとめ

多重線形回帰は複数の特徴量から予測を行う基本的な回帰手法です。一方、Lasso回帰やRidge回帰は正則化によって過学習を防ぎ、モデルの汎化性能を向上させます。

Lasso回帰は特徴量選択に強く、Ridge回帰は全体の係数を安定化させることに優れています。データの特性に応じて使い分けることで、より精度の高い回帰モデルを構築できます。