了解 python xgboost 简历
understanding python xgboost cv
我想使用 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
Cross-validation 用于估计一组参数在未见数据上的性能。
Grid-search 评估具有不同参数的模型以找到这些参数的最佳组合。
sklearn docs 谈了很多关于 CV 的内容,它们可以结合使用,但它们各自的用途非常不同。
您或许可以将 xgboost 纳入 sklearn 的网格搜索功能。查看 xgboost 的 sklearn 接口以获得最流畅的应用程序。
如果您正在寻找参数调整,Sklearn GridSearchCV
应该是一个不错的选择。您只需将 xgb 分类器传递给 GridSearchCV 并评估最佳 CV 分数。
这里有一个很好的教程,可以帮助您开始参数调整:http://www.analyticsvidhya.com/blog/2016/03/complete-guide-parameter-tuning-xgboost-with-codes-python/
您可以通过 xgboost sklearn 将 GridSearchCV 与 xgboost 一起使用 API
按如下方式定义分类器:
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_
我会选择 hyperOpt
https://github.com/hyperopt/hyperopt
开源并且对我非常有用。
如果你确实选择了这个并且需要帮助,我可以详细说明。
当你要求查看 "max_depth":[2,4,6]
时,你可以通过 运行 3 个模型天真地解决这个问题,每个模型都有你想要的最大深度,然后看看哪个模型产生更好的结果。
但是 "max_depth" 并不是您应该考虑调整的唯一超参数。还有很多其他的超参数,比如:eta (learning rate), gamma, min_child_weight, subsample
等等。有些是连续的,有些是离散的。 (假设您知道您的 objective 功能和评估指标)
您可以在这里阅读所有内容 https://github.com/dmlc/xgboost/blob/master/doc/parameter.md
当您查看所有这些 "parameters" 以及它们创建的维度的大小时,它是巨大的。您不能手动搜索("expert" 也不能为您提供最好的论据)。
因此,hyperOpt 为您提供了一个巧妙的解决方案,并为您构建了一个既不完全随机也不网格的搜索 space。您需要做的就是定义参数及其范围。
您可以在此处找到代码示例:https://github.com/bamine/Kaggle-stuff/blob/master/otto/hyperopt_xgboost.py
根据我自己的经验,我可以告诉你它在我的模型上比贝叶斯优化更有效。给它一些 hours/days 的试验和错误,如果遇到无法解决的问题,请与我联系。
祝你好运!
我想使用 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
Cross-validation 用于估计一组参数在未见数据上的性能。
Grid-search 评估具有不同参数的模型以找到这些参数的最佳组合。
sklearn docs 谈了很多关于 CV 的内容,它们可以结合使用,但它们各自的用途非常不同。
您或许可以将 xgboost 纳入 sklearn 的网格搜索功能。查看 xgboost 的 sklearn 接口以获得最流畅的应用程序。
如果您正在寻找参数调整,Sklearn GridSearchCV
应该是一个不错的选择。您只需将 xgb 分类器传递给 GridSearchCV 并评估最佳 CV 分数。
这里有一个很好的教程,可以帮助您开始参数调整:http://www.analyticsvidhya.com/blog/2016/03/complete-guide-parameter-tuning-xgboost-with-codes-python/
您可以通过 xgboost sklearn 将 GridSearchCV 与 xgboost 一起使用 API
按如下方式定义分类器:
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_
我会选择 hyperOpt
https://github.com/hyperopt/hyperopt
开源并且对我非常有用。 如果你确实选择了这个并且需要帮助,我可以详细说明。
当你要求查看 "max_depth":[2,4,6]
时,你可以通过 运行 3 个模型天真地解决这个问题,每个模型都有你想要的最大深度,然后看看哪个模型产生更好的结果。
但是 "max_depth" 并不是您应该考虑调整的唯一超参数。还有很多其他的超参数,比如:eta (learning rate), gamma, min_child_weight, subsample
等等。有些是连续的,有些是离散的。 (假设您知道您的 objective 功能和评估指标)
您可以在这里阅读所有内容 https://github.com/dmlc/xgboost/blob/master/doc/parameter.md
当您查看所有这些 "parameters" 以及它们创建的维度的大小时,它是巨大的。您不能手动搜索("expert" 也不能为您提供最好的论据)。
因此,hyperOpt 为您提供了一个巧妙的解决方案,并为您构建了一个既不完全随机也不网格的搜索 space。您需要做的就是定义参数及其范围。
您可以在此处找到代码示例:https://github.com/bamine/Kaggle-stuff/blob/master/otto/hyperopt_xgboost.py
根据我自己的经验,我可以告诉你它在我的模型上比贝叶斯优化更有效。给它一些 hours/days 的试验和错误,如果遇到无法解决的问题,请与我联系。
祝你好运!