カスタム trainControl とチューニングによる glmnet
動画で見たように、glmnetモデルは実際には一度に多くのモデルを学習します(このパッケージの大きな利点のひとつです)。これを活かすために、モデルの正則化の強さを制御する多数のlambda値を渡せます。train()は賢く、alphaごとに1つのモデルだけを学習し、すべてのlambda値を同時フィット用に一度に渡してくれます。
glmnetモデル向けに私が好むチューニンググリッドは次のとおりです。
expand.grid(
alpha = 0:1,
lambda = seq(0.0001, 1, length = 100)
)
このグリッドでは、非常に小さい値から大きい値まで、多数(実際には100個)のlambdaを探索します。(最大のlambdaを10まで増やすこともできますが、この演習では1が良い上限です。)
より少ないモデルを試したい場合は、より短いlambdaの数列を使えます。例えば、lambda = seq(0.0001, 1, length = 10)なら、alphaの各値につき10個のモデルを学習します。
このtuneGridでは、2種類の正則化モデルも確認できます。ridge回帰とlasso回帰です。alpha = 0は純粋なridge回帰、alpha = 1は純粋なlasso回帰です。0から1の間のalphaを使えば、両者の混合(すなわちelastic net)を学習できます。例えば、alpha = 0.05はridge回帰95%、lasso回帰5%の割合になります。
この問題では、それらの違いを示す目的で、両極端 – 純粋なridge回帰と純粋なlasso回帰 – だけを探索します。
この演習はコースの一部です
Rで学ぶ caret を使った Machine Learning
演習の手順
overfitデータに対してglmnetモデルを学習し、目的変数をy、その他すべての変数を説明変数にしてください。前の演習で作成したカスタムtrainControl(myControl)を必ず使用します。また、カスタムtuneGridを使って、alpha = 0:1と、各alphaの値ごとに0.0001から1までのlambdaを20個探索してください。modelをコンソールに表示してください。model[["results"]]にあるROC統計量のmax()を表示してください。model[["results"]][["ROC"]]でアクセスできます。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
# Train glmnet with custom trainControl and tuning: model
model <- train(
___,
___,
tuneGrid = ___(
___,
___
),
method = ___,
trControl = ___
)
# Print model to console
# Print maximum ROC statistic