線形回帰⑨ (交差検証)

前回は、ハイパーパラメータのalphaを1つだけ指定して、学習・評価を行いましたが、最適なalphaを見つけるためには複数の値を設定し、その結果を確認する必要があります。

LassoCVクラスを使うと、一度に複数のalphaの結果を確認することができます。

交差検証

LassoCVクラスは複数のalphaで交差検証を行い、最も精度が高かった時のalphaを結果として表示することができます。

alphaが[0.1, 0.5, 1, 5, 10]の場合の交差検証を行うコードは以下の通りです。

[Google Colaboratory]

1
2
3
from sklearn.linear_model import LassoCV

lasso_cv = LassoCV(alphas=[0.1, 0.5, 1, 5, 10]).fit(X_train_scaled, y_train)

[実行結果]

交差検証が正常に終了しました。

重み確認

交差検証により、最も精度のよかった時のalphaでモデルが構築されています。

最適なalphaと各説明変数の重みを確認します。

[Google Colaboratory]

1
2
3
4
print(f"alpha = {lasso_cv.alpha_}")
for i, (col, coef) in enumerate(zip(boston.feature_names, lasso_cv.coef_)):
print(f"w{i}({col}) = {coef}")
print(f"b = {lasso_cv.intercept_}")

[実行結果]

0.1のときの精度が最も高いということが確認できました。

またペナルティが弱くなったため、重みが0になる説明変数がなくなりました。

精度評価スコア

精度評価スコアを確認します。

[Google Colaboratory]

1
2
3
4
5
6
7
8
9
10
y_train_pred = lasso_cv.predict(X_train_scaled)
y_test_pred = lasso_cv.predict(X_test_scaled)

y_train_pred = np.expand_dims(y_train_pred, 1)
y_test_pred = np.expand_dims(y_test_pred, 1)

print("訓練データスコア")
get_eval_score(y_train,y_train_pred)
print("テストデータスコア")
get_eval_score(y_test,y_test_pred)

[実行結果]

精度評価スコアが以前のモデルよりも向上しています。

交差検証を使うと、効率的にパラメータの調整を行うことができるので、積極的に活用していきましょう。

次回は、リッジ回帰を行います。