18

xgboost cv 関数を使用して、トレーニング データ セットに最適なパラメーターを見つけたいと考えています。私はAPIに混乱しています。最適なパラメーターを見つけるにはどうすればよいですか? これは sklearngrid_search交差検証関数に似ていますか? max_depthパラメータ ([2,4,6]) のどのオプションが最適であると判断されたかを調べるにはどうすればよいですか?

from sklearn.datasets import load_iris
import xgboost as xgb
iris = load_iris()
DTrain = xgb.DMatrix(iris.data, iris.target)
x_parameters = {"max_depth":[2,4,6]}
xgb.cv(x_parameters, DTrain)
...
Out[6]: 
   test-rmse-mean  test-rmse-std  train-rmse-mean  train-rmse-std
0        0.888435       0.059403         0.888052        0.022942
1        0.854170       0.053118         0.851958        0.017982
2        0.837200       0.046986         0.833532        0.015613
3        0.829001       0.041960         0.824270        0.014501
4        0.825132       0.038176         0.819654        0.013975
5        0.823357       0.035454         0.817363        0.013722
6        0.822580       0.033540         0.816229        0.013598
7        0.822265       0.032209         0.815667        0.013538
8        0.822158       0.031287         0.815390        0.013508
9        0.822140       0.030647         0.815252        0.013494
4

4 に答える 4

9

SklearnGridSearchCVは、パラメーターの調整を探している場合に最適な方法です。xgb 分類子を GridSearchCV に渡し、最高の CV スコアを評価するだけです。

パラメータ調整を始めるのに役立つ素晴らしいチュートリアルがあります: http://www.analyticsvidhya.com/blog/2016/03/complete-guide-parameter-tuning-xgboost-with-codes-python/

于 2016-04-14T11:11:50.963 に答える
7

私は一緒に行きますhyperOpt

https://github.com/hyperopt/hyperopt

オープンソースで、私にとってはうまくいきました。これを選択してサポートが必要な場合は、詳しく説明できます。

見直すように頼むと"max_depth":[2,4,6]、3つのモデルを実行することでこれを単純に解決できます。それぞれに必要な最大深度を設定し、どのモデルがより良い結果をもたらすかを確認します。

しかし、「max_depth」だけが調整を検討すべきハイパー パラメーターではありません。など、他にも多くのハイパー パラメーターがありますeta (learning rate), gamma, min_child_weight, subsample。連続するものもあれば、離散するものもあります。(目的関数と評価指標を知っていると仮定)

ここでそれらすべてについて読むことができますhttps://github.com/dmlc/xgboost/blob/master/doc/parameter.md

これらすべての「パラメーター」と、それらが作成する次元のサイズを見ると、その巨大さ. 手で検索することはできません(また、「専門家」が最良の議論を与えることもできません)。

そのため、hyperOpt はこれに対する優れたソリューションを提供し、厳密にはランダムでもグリッドでもない検索空間を構築します。パラメータとその範囲を定義するだけです。

ここでコード例を見つけることができます: https://github.com/bamine/Kaggle-stuff/blob/master/otto/hyperopt_xgboost.py

私自身の経験から、私のモデルではベイジアン最適化よりもうまく機能したと言えます。数時間/数日試行錯誤してみて、解決できない問題が発生した場合は、私に連絡してください.

幸運を!

于 2017-12-13T14:13:14.520 に答える