在处理分类和连续依赖变量方面,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时,我都会经常进行自己的自制参数搜索,但是您也可以像刚提到的Krisp一样使用Caret软件包进行操作。

  1. 商在

请参阅Cross上的此答案,以获取有关如何在XGBoost上使用CARET软件包进行超参数搜索的详细说明。如何调整Xgboost树的超参数?

  1. 自定义网格搜索

我经常从基于几个假设开始 欧文张的幻灯片 数据科学技巧 P. 14

enter image description here

在这里,您可以看到您最需要调整行采样,列采样以及最大的树深度。这就是我进行自定义行采样和列采样搜索我目前正在处理的问题的方式:

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魔术结合使用,您可以绘制搜索的图形表示。My xgboost hyperparameter search

在此图中,更轻的颜色表示较低的误差,每个块代表列采样和行采样的唯一组合。因此,如果您想对Say ETA(或树深)进行其他搜索,最终将为每个ETA参数所测试的一个图之一。

我看到您有不同的评估度量(RMPSE),只需将其插入交叉验证功能中,您就会获得所需的结果。除此之外,我不必太担心其他参数,因为这样做不会提高性能太多,至少与花费更多的时间工程功能或清洁数据相比,至少不是那么多。

  1. 其他

随机搜索和贝叶斯参数选择也是可能的,但我尚未进行/尚未找到它们的实现。

这是Max Kuhn Caret的贝叶斯优化超参数的贝叶斯优化。

http://blog.revolutionanalytics.com/2016/06/bayesian-optimization-of-machine-learning-models.html

其他提示

您可以使用Caret软件包进行超参数空间搜索,要么通过 网格搜索 ,或通过 随机搜索.

网格,随机,贝叶斯和PSO ...等。

当您使用XGBOOST时,所有上述所有内容都不重要,因为XGB确实很快,因此您可以将网格与许多HyperParametrs一起使用,直到找到解决方案为止。

可能会帮助您的一件事:使用大约方法,它总是给我最低的MSE错误。

许可以下: CC-BY-SA归因
scroll top