我想使用xgboost cv函数来查找我的训练数据集的最佳参数.api我很困惑.我如何找到最佳参数?这与sklearn grid_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
Deepish.. 9
GridSearchCV
如果您正在寻找参数调整,Sklearn 应该是一种方法.您需要将xgb分类器传递给GridSearchCV并评估最佳CV分数.
这里有一个很好的教程,可以帮助您开始参数调整:http://www.analyticsvidhya.com/blog/2016/03/complete-guide-parameter-tuning-xgboost-with-codes-python/
GridSearchCV
如果您正在寻找参数调整,Sklearn 应该是一种方法.您需要将xgb分类器传递给GridSearchCV并评估最佳CV分数.
这里有一个很好的教程,可以帮助您开始参数调整:http://www.analyticsvidhya.com/blog/2016/03/complete-guide-parameter-tuning-xgboost-with-codes-python/
您可以通过xgboost sklearn API将GridSearchCV与xgboost一起使用
按如下方式定义分类器:
from xgboost.sklearn import XGBClassifier from sklearn.grid_search import GridSearchCV xgb_model = XGBClassifier(other_params) test_params = { 'max_depth':[4,8,12] } model = GridSearchCV(estimator = xgb_model,param_grid = test_params) model.fit(train,target) print model.best_params_
交叉验证用于估计一组参数在看不见的数据上的性能。
网格搜索评估具有不同参数的模型,以找到这些参数的最佳组合。
sklearn 文档讨论了很多有关CV的内容,可以将它们组合使用,但它们的用途截然不同。
您也许可以将xgboost放入sklearn的gridsearch功能中。签出xgboost的sklearn界面以获得最流畅的应用程序。
我会去 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
我可以根据自己的经验告诉您,在模型上比贝叶斯优化效果更好。给它几个小时/天的反复试验,如果遇到无法解决的问题,请与我联系。
祝好运!