1. 学ぶ
  2. /
  3. コース
  4. /
  5. Rで学ぶ caret を使った Machine Learning

Connected

演習

カスタム 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回帰 – だけを探索します。

指示

100 XP
  • overfitデータに対してglmnetモデルを学習し、目的変数をy、その他すべての変数を説明変数にしてください。前の演習で作成したカスタムtrainControl(myControl)を必ず使用します。また、カスタムtuneGridを使って、alpha = 0:1と、各alphaの値ごとに0.0001から1までのlambdaを20個探索してください。
  • modelをコンソールに表示してください。
  • model[["results"]]にあるROC統計量のmax()を表示してください。model[["results"]][["ROC"]]でアクセスできます。