質問

Xgboostは、カテゴリと連続的な従属変数の両方を扱うことに関して、素晴らしい仕事をしてきました。しかし、xgboostの問題の最適化されたパラメーターを選択するにはどうすればよいですか?

これは、最近のKaggle問題にパラメーターを適用した方法です。

param <- list(  objective           = "reg:linear", 
                booster = "gbtree",
                eta                 = 0.02, # 0.06, #0.01,
                max_depth           = 10, #changed from default of 8
                subsample           = 0.5, # 0.7
                colsample_bytree    = 0.7, # 0.7
                num_parallel_tree   = 5
                # alpha = 0.0001, 
                # lambda = 1
)


clf <- xgb.train(   params              = param, 
                    data                = dtrain, 
                    nrounds             = 3000, #300, #280, #125, #250, # changed from 300
                    verbose             = 0,
                    early.stop.round    = 100,
                    watchlist           = watchlist,
                    maximize            = FALSE,
                    feval=RMPSE
)

私が実験するために行うのは、結果を改善するための別のパラメーターセット(直感を備えた)をランダムに選択することだけです。

とにかく、最適化された(ベスト)セットのパラメーターの選択を自動化しますか?

(答えはどんな言語でもあります。テクニックを探しているだけです)

役に立ちましたか?

解決

Xgboostを使用するときはいつでも、私はしばしば独自のHomebrewパラメーター検索を行いますが、Krispが言及したように、CARETパッケージでそれを行うことができます。

  1. カレット

Crossのこの回答は、Xgboostでハイパーパラメーター検索にCARETパッケージを使用する方法についての徹底的な説明について検証されたこの回答を参照してください。Xgboost Treesのハイパーパラメーターを調整する方法は?

  1. カスタムグリッド検索

私はしばしば、いくつかの仮定から始めます オーウェン・チャンスライドします データサイエンスのヒント P. 14

enter image description here

ここでは、主に行のサンプリング、列のサンプリング、おそらく最大ツリーの深さを調整する必要があることがわかります。これは、私が現在取り組んでいる問題のカスタム行サンプリングと列サンプリングの検索方法です。

searchGridSubCol <- expand.grid(subsample = c(0.5, 0.75, 1), 
                                colsample_bytree = c(0.6, 0.8, 1))
ntrees <- 100

#Build a xgb.DMatrix object
DMMatrixTrain <- xgb.DMatrix(data = yourMatrix, label = yourTarget)

rmseErrorsHyperparameters <- apply(searchGridSubCol, 1, function(parameterList){

    #Extract Parameters to test
    currentSubsampleRate <- parameterList[["subsample"]]
    currentColsampleRate <- parameterList[["colsample_bytree"]]

    xgboostModelCV <- xgb.cv(data =  DMMatrixTrain, nrounds = ntrees, nfold = 5, showsd = TRUE, 
                           metrics = "rmse", verbose = TRUE, "eval_metric" = "rmse",
                           "objective" = "reg:linear", "max.depth" = 15, "eta" = 2/ntrees,                               
                           "subsample" = currentSubsampleRate, "colsample_bytree" = currentColsampleRate)

    xvalidationScores <- as.data.frame(xgboostModelCV)
    #Save rmse of the last iteration
    rmse <- tail(xvalidationScores$test.rmse.mean, 1)

    return(c(rmse, currentSubsampleRate, currentColsampleRate))

})

また、その適用関数の結果を使用してGGPLOT2マジックと組み合わせて、検索のグラフィカルな表現をプロットできます。My xgboost hyperparameter search

このプロットでは、軽い色が低いエラーを表し、各ブロックは列サンプリングと行サンプリングの一意の組み合わせを表します。したがって、ETA(または樹木の深さ)の追加検索を実行したい場合は、テストされた各ETAパラメーターのこれらのプロットの1つになります。

別の評価メトリック(RMPSE)があることがわかります。クロス検証関数にプラグを付けるだけで、目的の結果が得られます。それに加えて、他のパラメーターを微調整することについてあまり心配することはありません。なぜなら、そうすることはパフォーマンスをあまり改善しないからです。少なくとも、エンジニアリングの機能を増やしたり、データをクリーニングするのに比べてそれほど多くはありません。

  1. その他

ランダム検索とベイジアンパラメーターの選択も可能ですが、それらの実装をまだ作成/見つけていません。

これは、マックス・クーンのCareor of Caretによるハイパーパラメーターのベイジアンの最適化に関する優れた入門書です。

http://blog.revolutionanalytics.com/2016/06/bayesian-optimization-of-machine-learning-models.html

他のヒント

CARETパッケージを使用して、ハイパーパラメータースペース検索を行うことができます。 グリッド検索 、または通り ランダム検索.

グリッド、ランダム、ベイジアン、PSO ...など..

xgboostを使用する場合、上記のすべては重要ではありません。xgbは非常に高速であるため、ソリューションを見つけるまで多くのハイパーパラメーターを使用してグリッドを使用できます。

あなたを助けるかもしれないことの1つは、約MESTEを使用することです。常に最低のMSEエラーを与えてください。

ライセンス: CC-BY-SA帰属
所属していません datascience.stackexchange
scroll top