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

現在作成中です。今後加筆修正してまいります。
スポンサーリンク
スポンサーリンク

多重線形回帰と正則化(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の予測に最も適したwbを見つけることです。

正則化とは?

正則化は、回帰モデルが複雑になりすぎるのを防ぐために使用される手法で、モデルの過学習を防止します。正則化にはいくつかの手法がありますが、特に代表的なのが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回帰はパラメータの過剰な振れを抑えることができます。適切な正則化手法とパラメータの選定が、モデルの性能を向上させる鍵となります。