2017-11-28 10 views
2

クロスバリデーションのあるcaret::train(..., method = "glmnet")、またはcv.glmnet()の両方が実装されていることがわかりましたので、クロスバリデーションエラーを最小限に抑えるlambda.minが見つかりました。最終的に最も適合したモデルは、lambda.minに適合するモデルでなければなりません。次に、グリッドをlambdaの値をトレーニングプロセスに設定する必要があるのはなぜですか?なぜlambdaをcaret :: train(...、method = "glmnet")とcv.glmnet()で調整する必要がありますか?

答えて

1

glmnetモデルのカスタムチューニンググリッドを使用します。これは、デフォルトのチューニンググリッドが非常に小さく、探索する可能性があるより多くの潜在的なglmnetモデルがあるためです。

glmnetは罰せモデルのフィッティング2種類の異なる可能であり、それは2つのチューニングパラメータがあります

  1. アルファ
    • リッジ回帰(またはアルファ= 0)
    • ラッソ退縮を(またはα= 1)
  2. ラムダ係数

  • ペナルティの強度がglmnetモデルは(単一alphaため、lambdaのすべての値が同時にフィット)一度に多くのモデルに適合することができ、我々は渡すことができますモデルのペナルティの量を制御する多数のlambda値。

    train()は、alpha値ごとに1つのモデルに適合し、lambdaの値すべてを同時に適合させるのに十分なほどスマートです。

    例:

    # Make a custom tuning grid 
    tuneGrid <- expand.grid(alpha = 0:1, lambda = seq(0.0001, 1, length = 10)) 
    
    # Fit a model 
    model <- train(y ~ ., overfit, method = "glmnet", 
        tuneGrid = tuneGrid, trControl = myControl 
    ) 
    
    
    # Sample Output 
    Warning message: The metric "Accuracy" was not in the result set. ROC will be used instead. 
    + Fold01: alpha=0, lambda=1 
    - Fold01: alpha=0, lambda=1 
    + Fold01: alpha=1, lambda=1 
    - Fold01: alpha=1, lambda=1 
    + Fold02: alpha=0, lambda=1 
    - Fold02: alpha=0, lambda=1 
    + Fold02: alpha=1, lambda=1 
    - Fold02: alpha=1, lambda=1 
    + Fold03: alpha=0, lambda=1 
    - Fold03: alpha=0, lambda=1 
    + Fold03: alpha=1, lambda=1 
    - Fold03: alpha=1, lambda=1 
    + Fold04: alpha=0, lambda=1 
    - Fold04: alpha=0, lambda=1 
    + Fold04: alpha=1, lambda=1 
    - Fold04: alpha=1, lambda=1 
    + Fold05: alpha=0, lambda=1 
    - Fold05: alpha=0, lambda=1 
    + Fold05: alpha=1, lambda=1 
    - Fold05: alpha=1, lambda=1 
    + Fold06: alpha=0, lambda=1 
    - Fold06: alpha=0, lambda=1 
    + Fold06: alpha=1, lambda=1 
    - Fold06: alpha=1, lambda=1 
    + Fold07: alpha=0, lambda=1 
    - Fold07: alpha=0, lambda=1 
    + Fold07: alpha=1, lambda=1 
    - Fold07: alpha=1, lambda=1 
    + Fold08: alpha=0, lambda=1 
    - Fold08: alpha=0, lambda=1 
    + Fold08: alpha=1, lambda=1 
    - Fold08: alpha=1, lambda=1 
    + Fold09: alpha=0, lambda=1 
    - Fold09: alpha=0, lambda=1 
    + Fold09: alpha=1, lambda=1 
    - Fold09: alpha=1, lambda=1 
    + Fold10: alpha=0, lambda=1 
    - Fold10: alpha=0, lambda=1 
    + Fold10: alpha=1, lambda=1 
    - Fold10: alpha=1, lambda=1 
    Aggregating results 
    Selecting tuning parameters 
    Fitting alpha = 1, lambda = 1 on full training set 
    
    
    # Print model to console 
    model 
    
    
    # Sample Output 
    glmnet 
    
    250 samples 
    200 predictors 
        2 classes: 'class1', 'class2' 
    
    No pre-processing 
    Resampling: Cross-Validated (10 fold) 
    Summary of sample sizes: 225, 225, 225, 225, 224, 226, ... 
    Resampling results across tuning parameters: 
    
        alpha lambda ROC  Sens Spec  
        0  0.0001 0.3877717 0.00 0.9786232 
        0  0.1112 0.4352355 0.00 1.0000000 
        0  0.2223 0.4546196 0.00 1.0000000 
        0  0.3334 0.4589674 0.00 1.0000000 
        0  0.4445 0.4718297 0.00 1.0000000 
        0  0.5556 0.4762681 0.00 1.0000000 
        0  0.6667 0.4783514 0.00 1.0000000 
        0  0.7778 0.4826087 0.00 1.0000000 
        0  0.8889 0.4869565 0.00 1.0000000 
        0  1.0000 0.4869565 0.00 1.0000000 
        1  0.0001 0.3368659 0.05 0.9188406 
        1  0.1112 0.5000000 0.00 1.0000000 
        1  0.2223 0.5000000 0.00 1.0000000 
        1  0.3334 0.5000000 0.00 1.0000000 
        1  0.4445 0.5000000 0.00 1.0000000 
        1  0.5556 0.5000000 0.00 1.0000000 
        1  0.6667 0.5000000 0.00 1.0000000 
        1  0.7778 0.5000000 0.00 1.0000000 
        1  0.8889 0.5000000 0.00 1.0000000 
        1  1.0000 0.5000000 0.00 1.0000000 
    
    ROC was used to select the optimal model using the largest value. 
    The final values used for the model were alpha = 1 and lambda = 1. 
    
    
    # Plot model 
    plot(model) 
    

    enter image description here

関連する問題