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

10

您可以通过 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_
于 2017-06-28T14:47:34.390 回答
9

GridSearchCV如果您正在寻找参数调整,Sklearn应该是一种方法。您只需将 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

交叉验证用于估计一组参数在看不见的数据上的性能。

网格搜索评估具有不同参数的模型,以找到这些参数的最佳组合。

sklearn文档谈了很多关于 CV 的内容,它们可以组合使用,但它们各自的用途非常不同。

您也许可以将 xgboost 放入 sklearn 的网格搜索功能中。查看 xgboost 的 sklearn 接口以获得最流畅的应用程序。

于 2015-12-27T17:58:01.363 回答
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 回答