最適な L1 罰則係数を見つける
ここでは L1 正則化の C パラメータをチューニングし、モデルの複雑さを抑えつつ、性能指標を良好に保てる値を見つけます。可能な C 値について for ループを回し、各候補でロジスティック回帰を構築し、性能指標を計算します。
候補値を含むリスト C は用意されています。配列 l1_metrics は3列で作成され、1列目に C、2列目と3列目は非ゼロ係数の数とモデルの再現率のプレースホルダーです。スケーリング済みの特徴量と目的変数は、学習用に train_X, train_Y、テスト用に test_X, test_Y として読み込まれています。
numpy と pandas はそれぞれ np と pd として、また sklearn から recall_score 関数も読み込まれています。
この演習はコースの一部です
Pythonで学ぶマーケティングのための機械学習
演習の手順
- リスト
Cの長さに基づき、0 からその範囲でforループを回します。 - 各
C候補について、Logistic Regression を初期化して学習し、テストデータで churn を予測します。 - 各
C候補について、非ゼロ係数の数と再現率をl1_metricsの第2列・第3列に保存します。 l1_metricsから適切な列名を付けてpandasの DataFrame を作成します。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
# Run a for loop over the range of C list length
for index in ___(0, len(C)):
# Initialize and fit Logistic Regression with the C candidate
logreg = ___(penalty='l1', C=C[___], solver='liblinear')
logreg.fit(___, train_Y)
# Predict churn on the testing data
pred_test_Y = logreg.___(test_X)
# Create non-zero count and recall score columns
l1_metrics[index,1] = np.___(logreg.coef_)
l1_metrics[index,2] = recall_score(___, pred_test_Y)
# Name the columns and print the array as pandas DataFrame
col_names = ['C','Non-Zero Coeffs','Recall']
print(pd.DataFrame(l1_metrics, columns=___))