多重線形回帰と正則化(Lasso、Ridge)
多重線形回帰は、1つ以上の説明変数を使用して目的変数を予測する回帰手法です。多重線形回帰において、モデルが複雑すぎると過学習のリスクが高まり、汎化性能が低下することがあります。この問題を軽減するために、正則化(Regularization)を用います。本記事では、Pythonでの多重線形回帰の実装と共に、Lasso回帰とRidge回帰という2つの代表的な正則化手法を解説します。
多重線形回帰の基本
多重線形回帰は、複数の説明変数(特徴量)を持つデータに対して次のようなモデルを構築します。
y = w1 * x1 + w2 * x2 + ... + wn * xn + b
ここで、y
は目的変数、x1, x2,..., xn
は説明変数、w1, w2,..., wn
は回帰係数、b
は切片を表します。目的は、y
の予測に最も適したw
とb
を見つけることです。
正則化とは?
正則化は、回帰モデルが複雑になりすぎるのを防ぐために使用される手法で、モデルの過学習を防止します。正則化にはいくつかの手法がありますが、特に代表的なのがLasso回帰とRidge回帰です。
Lasso回帰(L1正則化)
Lasso回帰は、モデルのパラメータの絶対値の和をペナルティとして加えることで、不要な変数を自動的に選択する手法です。L1正則化を用いることで、いくつかの回帰係数を0にし、変数選択を行うことができます。
Ridge回帰(L2正則化)
Ridge回帰は、パラメータの二乗和をペナルティとして加える手法です。L2正則化を用いることで、係数の値が大きくなりすぎるのを防ぎ、モデルの過学習を抑制します。
Pythonでの多重線形回帰と正則化の実装
それでは、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) # 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つの特徴量を持つデータセットを作成し、目的変数y
にはノイズを加えています。データセットを訓練データとテストデータに分割します。
多重線形回帰の実装
次に、通常の多重線形回帰を実装します。
# 多重線形回帰モデルの訓練
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回帰モデルの訓練
lasso_model = Lasso(alpha=0.1) # alphaは正則化の強度を決定
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}')
Lasso回帰のalpha
パラメータは、正則化の強さを制御します。alpha
の値が大きいほど正則化の効果が強くなり、モデルの係数がゼロに近づきます。
Ridge回帰の実装
最後に、Ridge回帰を実装します。
# Ridge回帰モデルの訓練
ridge_model = Ridge(alpha=1.0) # alphaは正則化の強度を決定
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回帰でも、alpha
パラメータを調整して正則化の強さを制御します。Lassoとは異なり、Ridge回帰では全ての係数が0にはならず、0に近づくのみです。
正則化を使う上での注意点
- 正則化の強度: 正則化の強度を決定する
alpha
パラメータは、モデルの性能に大きく影響を与えるため、最適な値を選ぶ必要があります。GridSearchCV
などを使用してチューニングすることが推奨されます。 - データのスケーリング: 正則化を適用する前に、データを標準化することが重要です。
StandardScaler
を使用してデータをスケールすることで、特徴量の影響を均等にすることができます。
まとめ
多重線形回帰と正則化は、回帰モデルの過学習を防ぎ、より汎化性能の高いモデルを構築するために重要な手法です。Lasso回帰は不要な変数を自動で除外するのに役立ち、Ridge回帰はパラメータの過剰な振れを抑えることができます。適切な正則化手法とパラメータの選定が、モデルの性能を向上させる鍵となります。