質問
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パッケージでそれを行うことができます。
- カレット
Crossのこの回答は、Xgboostでハイパーパラメーター検索にCARETパッケージを使用する方法についての徹底的な説明について検証されたこの回答を参照してください。Xgboost Treesのハイパーパラメーターを調整する方法は?
- カスタムグリッド検索
私はしばしば、いくつかの仮定から始めます オーウェン・チャンスライドします データサイエンスのヒント P. 14
ここでは、主に行のサンプリング、列のサンプリング、おそらく最大ツリーの深さを調整する必要があることがわかります。これは、私が現在取り組んでいる問題のカスタム行サンプリングと列サンプリングの検索方法です。
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マジックと組み合わせて、検索のグラフィカルな表現をプロットできます。
このプロットでは、軽い色が低いエラーを表し、各ブロックは列サンプリングと行サンプリングの一意の組み合わせを表します。したがって、ETA(または樹木の深さ)の追加検索を実行したい場合は、テストされた各ETAパラメーターのこれらのプロットの1つになります。
別の評価メトリック(RMPSE)があることがわかります。クロス検証関数にプラグを付けるだけで、目的の結果が得られます。それに加えて、他のパラメーターを微調整することについてあまり心配することはありません。なぜなら、そうすることはパフォーマンスをあまり改善しないからです。少なくとも、エンジニアリングの機能を増やしたり、データをクリーニングするのに比べてそれほど多くはありません。
- その他
ランダム検索とベイジアンパラメーターの選択も可能ですが、それらの実装をまだ作成/見つけていません。
これは、マックス・クーンのCareor of Caretによるハイパーパラメーターのベイジアンの最適化に関する優れた入門書です。
http://blog.revolutionanalytics.com/2016/06/bayesian-optimization-of-machine-learning-models.html