更新:2024/12/10
【scikit-learn】リッジ回帰の意味と使い方について


はるか
リッジ回帰って聞いたことある?

ふゅか
うん!線形回帰に正則化項を加えた手法だよね。
目次
1. リッジ回帰
リッジ回帰(Ridge Regression)は、機械学習や統計学で使用される線形回帰の一種です。通常の線形回帰に正則化(ペナルティ)を加えることで、過学習を防ぎ、モデルの安定性を向上させる手法です。
1.1. リッジ回帰とは?
リッジ回帰は、以下のような式で表される回帰モデルです。
$$L(\beta)= \sum_{i=1}^{n}(y_i – \hat{y}_i)^2 + \alpha \sum_{j=1}^{p} |\beta_j|^2$$
- 最初の項:線形回帰と同じく、予測値 $\hat{y}$ と実際の値 $y$の誤差を最小化します。
- 2番目の項:モデルの重み(回帰係数) $\beta_j$ でペナルティを課すことで、過度な複雑化を抑えます。
- $\alpha$:正則化の強さを調整するハイパーパラメータ。大きくするとペナルティが強くなり、小さくすると通常の線形回帰に近づきます。
- $p$:特徴量の総数。

はるか
ペナルティの強さを変えるパラメータが、α。
2. scikit-learnでリッジ回帰の使い方
2.1. データ準備
まず、必要なライブラリをインポートし、データセットを準備します。今回はScikit-learnに組み込まれているtoyデータセットである「irisデータセット」を使います。
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.linear_model import Ridge
from sklearn.metrics import mean_squared_error
# データの読み込み
iris = load_iris()
X,y = iris.data,iris.target
# データを訓練用とテスト用に分割
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
2.2. リッジ回帰モデルの構築と学習
# リッジ回帰モデルの作成
ridge = Ridge(alpha=1000000000.0) # alphaは正則化の強さを調整するパラメータ
# モデルの学習
ridge.fit(X_train, y_train)
# テストデータで予測
y_pred = ridge.predict(X_test)

はるか
次は、リッジ回帰モデルの作成。

ふゅか
alphaの値を調整することで、正則化の強さをコントロールできるんだよね!
2.3. モデルの評価
予測結果を評価するため、平均二乗誤差(Mean Squared Error)を計算します。
# 評価指標:平均二乗誤差
mse = mean_squared_error(y_test, y_pred)
print(f"Mean Squared Error: {mse}")
今回の場合は、
Mean Squared Error: 5361.533443880525
2.4. ハイパーパラメータ $\alpha$の調整
$α\alpha$の値によってモデルの性能が大きく変わるため、適切な値を見つけることが重要です。以下のように、グリッドサーチを使って最適な値を探索できます。
from sklearn.model_selection import GridSearchCV
# ハイパーパラメータの候補
param_grid = {'alpha': [0.1, 1.0, 10, 100,100000000]}
# グリッドサーチ
grid = GridSearchCV(Ridge(), param_grid, cv=5, scoring='neg_mean_squared_error')
grid.fit(X_train, y_train)
# 最適なalpha値
print(f"Best alpha: {grid.best_params_['alpha']}")
今回のケースは、次のようになりました。
PR