はじめに
この実験では、過学習を防ぐために L2 正則化を使用した線形回帰に対するリッジ回帰の使い方を学びます。Python 用の人気のある機械学習ライブラリである scikit-learn を使用します。
VM のヒント
VM の起動が完了したら、左上隅をクリックして ノートブック タブに切り替えて、Jupyter Notebook を使って練習します。
時々、Jupyter Notebook が読み込み終わるまで数秒待つ必要がある場合があります。Jupyter Notebook の制限により、操作の検証を自動化することはできません。
学習中に問題に遭遇した場合は、Labby にお問い合わせください。セッション後にフィードバックを提供してください。すぐに問題を解決いたします。
必要なライブラリをインポートする
この実験に必要なライブラリをインポートして始めましょう。
import matplotlib.pyplot as plt
import numpy as np
from sklearn.datasets import make_regression
from sklearn.linear_model import Ridge
from sklearn.metrics import mean_squared_error
ランダムなデータを生成する
scikit-learn の make_regression 関数を使ってランダムなデータを生成します。n_samples を 10、n_features を 10、random_state を 1 に設定します。この関数は、入力特徴量 X、目的変数 y、および真の係数値 w を返します。
X, y, w = make_regression(
n_samples=10, n_features=10, coef=True, random_state=1, bias=3.5
)
リッジ回帰モデルを初期化する
デフォルトのハイパーパラメータでリッジ回帰モデルを初期化します。
clf = Ridge()
異なる正則化強度でモデルを学習する
ループを使って異なる正則化強度でモデルを学習します。set_params 関数の alpha の値を変更することで正則化強度を設定します。各 alpha の値に対する係数とエラーを保存します。
coefs = []
errors = []
alphas = np.logspace(-6, 6, 200)
for a in alphas:
clf.set_params(alpha=a)
clf.fit(X, y)
coefs.append(clf.coef_)
errors.append(mean_squared_error(clf.coef_, w))
結果をプロットする
Matplotlib を使って、正則化強度の関数として係数とエラーをプロットします。
plt.figure(figsize=(20, 6))
plt.subplot(121)
ax = plt.gca()
ax.plot(alphas, coefs)
ax.set_xscale("log")
plt.xlabel("alpha")
plt.ylabel("weights")
plt.title("Ridge coefficients as a function of the regularization")
plt.axis("tight")
plt.subplot(122)
ax = plt.gca()
ax.plot(alphas, errors)
ax.set_xscale("log")
plt.xlabel("alpha")
plt.ylabel("error")
plt.title("Coefficient error as a function of the regularization")
plt.axis("tight")
plt.show()
まとめ
この実験では、L2 正則化を使ったリッジ回帰を用いてオーバーフィットを防ぐ方法を学びました。ランダムなデータを生成し、異なる正則化強度でリッジ回帰モデルを学習し、正則化強度の関数として係数とエラーをプロットしました。