R语言XGBoost参数详解

R语言XGBoost参数详解

引言

XGBoost算法在Kaggle和天池数据科学竞赛中备受数据科学竞赛者的推崇,据说在Kaggle数据科学竞赛中有一半的获奖者使用了XGBoost算法。下面主要介绍XGBoost算法的参数。

XGBoost算法原理

XGBoost算法的原理

参数详解

本篇博客的目的是尽最大可能讲清楚XGBoost中的每一个参数当然如果哪里有不对的地方欢迎大家指正出来.
对于主要参数的一些解读:
控制过拟合
eta(学习率):学习率是用来约束booster的预测值,比如在XGBoost模型中第一个booster对第一个样本的预测值为4.0,如果设置eta的值为0.1,那么对于第一个样本的预测在此学习率下是0.4.
max_depth:控制树的深度,当树的深度过大时存在过拟合问题,同时XGBoost会使用大量的内存.
min_child_weight:最小的叶节点的权重,如果在树的某一次分裂中使得分裂后叶节点的weight小于min_child_weight,则停止这一步的分裂.
gamma :在一棵树的叶节点上创建一个新的分支时要求的最小loss减少值.
抽样使得模型更加稳健
subsample:训练实例中的子样本比例,如果将subsample设置为0.5,将意味着在训练过程中XGBoost会随机抽取50%的数据进行训练.并且在之后的每次建立新的树模型时都会抽50%的样本.
colsample_bytree:在创建一棵树的同时对列进行抽样.
colsample_bylevel:控制每一层的采样比例.
colsample_bynode:控制叶节点分裂时的采样比例.
lambda:在线性分类器中对权重的L2正则化的值.
alpha:在线性分类器中对权重的L1正则化的值.
lambda_bias:在线性分类器中对偏差L1正则化的值.
学习任务参数
reg:squarederror:均方根误差, 1 n ∑ i = 1 n ( y i − y i ^ ) 2 \sqrt{\frac{1}{n}\sum_{i=1}^{n}(y_{i}-\hat{y_{i}})^{2}} n1i=1n(yiyi^)2 .
reg:squaredlogerror:均方根对数误差, 1 n ∑ i = 1 n ( l o g ( y i + 1 ^ ) − l o g ( y i + 1 ) ) 2 \sqrt{\frac{1}{n}\sum_{i=1}^{n}(log(\hat{y_{i}+1})-log(y_{i}+1))^{2}} n1i=1n(log(yi+1^)log(yi+1))2 .
reg:logistic:分类问题中的logistic函数.
reg:pseudohubererror:Pseudo Huber损失函数.
binary:logistic:二分类问题中逻辑回归输出概率.
binary:logitraw:二分类问题中逻辑回归输出经过logistic转换前的值.
binary:hinge:svm的目标函数,其输出是0或者1.
count:poisson:计数数据的泊松回归,输出为泊松分布的均值.
survival:cox:半参数COX回归
multi:softmax:多分类问题中的softmax回归.
multi:softprob:softmax的输出为ndata*nclass.
rank:pairwise:pairwise模型
rank:ndcg:listwise模型
rank:map:pointwise模型
reg:tweedie:tweedie回归
base_score:对于所有样本预测为正样本的全局偏置(the initial prediction score of all instances, global bia)。如果迭代次数够多,改变这个参数对结果不会有影响。
eval_metric:验证数据的评估指标,具体请参考以下链接:
XGBoost参数
verbosity:打印信息的详细程度.
nthread:并行计算的核数。默认使用最大.
watchlist:用于评估模型性能的训练集与测试集.
nrounds:基模型的数量.
callbacks:在每次的建立基模型之后会对基模型进行回调。其中包括参数,预测值等。
以上主要是回顾了XGBoost中的一些主要参数,希望可以帮助到大家.

示例

> library(xgboost)
> data(agaricus.train, package='xgboost')
> data(agaricus.test, package='xgboost')
> dtrain <- with(agaricus.train, xgb.DMatrix(data, label = label))
> dtest <- with(agaricus.test, xgb.DMatrix(data, label = label))
> watchlist <- list(train = dtrain, eval = dtest)
> 
> param <- list(max_depth = 2, eta = 1, verbosity = 0, nthread = 2,
+               objective = "binary:logistic", eval_metric = "auc")
> bst <- xgb.train(param, dtrain, nrounds = 2, watchlist) 
[1]     train-auc:0.958228      eval-auc:0.960373 
[2]     train-auc:0.981413      eval-auc:0.979930 
> 
> str(bst)
List of 9
 $ handle        :Class 'xgb.Booster.handle' <externalptr> 
 $ raw           : raw [1:5756] 7b 4c 00 00 ...
 $ niter         : num 2
 $ evaluation_log:Classes ‘data.table’ and 'data.frame':        2 obs. of  3 variables:
  ..$ iter     : num [1:2] 1 2
  ..$ train_auc: num [1:2] 0.958 0.981
  ..$ eval_auc : num [1:2] 0.96 0.98
  ..- attr(*, ".internal.selfref")=<externalptr> 
 $ call          : language xgb.train(params = param, data = dtrain, nrounds = 2, watchlist = watchlist)
 $ params        :List of 7
  ..$ max_depth          : num 2
  ..$ eta                : num 1
  ..$ verbosity          : num 0
  ..$ nthread            : num 2
  ..$ objective          : chr "binary:logistic"
  ..$ eval_metric        : chr "auc"
  ..$ validate_parameters: logi TRUE
 $ callbacks     :List of 2
  ..$ cb.print.evaluation:function (env = parent.frame())  
  .. ..- attr(*, "call")= language cb.print.evaluation(period = print_every_n)
  .. ..- attr(*, "name")= chr "cb.print.evaluation"
  ..$ cb.evaluation.log  :function (env = parent.frame(), finalize = FALSE)  
  .. ..- attr(*, "call")= language cb.evaluation.log()
  .. ..- attr(*, "name")= chr "cb.evaluation.log"
 $ feature_names : chr [1:126] "cap-shape=bell" "cap-shape=conical" "cap-shape=convex" "cap-shape=flat" ...
 $ nfeatures     : int 126
 - attr(*, "class")= chr "xgb.Booster"
> bst$evaluation_log
   iter train_auc  eval_auc
1:    1 0.9582280 0.9603733
2:    2 0.9814132 0.9799301

根据最终的结果可以看到随着基模型数量的增加,对训练集与测试集的预测越来越好。
使用自定义的评价函数检测模型的预测效果

> logregobj <- function(preds, dtrain) {
+    labels <- getinfo(dtrain, "label")
+    preds <- 1/(1 + exp(-preds))
+    grad <- preds - labels
+    hess <- preds * (1 - preds)
+    return(list(grad = grad, hess = hess))
+ }
> evalerror <- function(preds, dtrain) {
+   labels <- getinfo(dtrain, "label")
+   err <- as.numeric(sum(labels != (preds > 0)))/length(labels)
+   return(list(metric = "error", value = err))
+ }
> 
> param <- list(max_depth = 2, eta = 1, verbosity = 0, nthread = 2,
+               objective = logregobj, eval_metric = evalerror)
> bst <- xgb.train(param, dtrain, nrounds = 2, watchlist)
[1]     train-error:0.046522    eval-error:0.042831 
[2]     train-error:0.022263    eval-error:0.021726 
> 

同样的随着基模型数量的增加,模型的错误率也在下降。
对不同的基模型设置不同的学习率

> param <- list(max_depth = 2, eta = 1, verbosity = 0, nthread = 2,
+               objective = "binary:logistic", eval_metric = "auc")
> my_etas <- list(eta = c(0.5, 0.1))
> bst <- xgb.train(param, dtrain, nrounds = 2, watchlist,
+                  callbacks = list(cb.reset.parameters(my_etas)))
[1]     train-auc:0.958228      eval-auc:0.960373 
[2]     train-auc:0.992347      eval-auc:0.994009 

early_stopping_rounds:

bst <- xgb.train(param, dtrain, nrounds = 25, watchlist,
                 early_stopping_rounds = 4)
[1]     train-auc:0.958228      eval-auc:0.960373 
Multiple eval metrics are present. Will use eval_auc for early stopping.
Will train until eval_auc hasn't improved in 4 rounds.

[2]     train-auc:0.981413      eval-auc:0.979930 
[3]     train-auc:0.997070      eval-auc:0.998518 
[4]     train-auc:0.998757      eval-auc:0.998943 
[5]     train-auc:0.999298      eval-auc:0.999830 
[6]     train-auc:0.999585      eval-auc:1.000000 
[7]     train-auc:0.999585      eval-auc:1.000000 
[8]     train-auc:0.999916      eval-auc:1.000000 
[9]     train-auc:0.999916      eval-auc:1.000000 
[10]    train-auc:1.000000      eval-auc:1.000000 
Stopping. Best iteration:
[6]     train-auc:0.999585      eval-auc:1.000000

以下就是关于XGBoost的部分示例,后续会借助Kaggle数据科学竞赛的例子来比较XGBoost、lightGBM、catBoost三种集成算法的效果。

  • 3
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
R语言中的hist函数用于绘制直方图,它的参数有很多,下面是各个参数详解: 1. x:要绘制直方图的数据向量或数据框。 2. breaks:指定直方图的分组数目或分组边界。可以是一个整数,表示分组数目;也可以是一个向量,表示分组边界。 3. freq:逻辑值,表示是否显示频数。默认为TRUE,显示频数;设置为FALSE,则显示频率。 4. probability:逻辑值,表示是否显示频率。默认为FALSE,显示频数;设置为TRUE,则显示频率。 5. include.lowest:逻辑值,表示是否包含最小值所在的组。默认为TRUE,包含最小值所在的组;设置为FALSE,则不包含最小值所在的组。 6. right:逻辑值,表示是否右闭合区间。默认为TRUE,右闭合区间;设置为FALSE,则左闭合区间。 7. density:逻辑值,表示是否显示密度曲线。默认为FALSE,不显示密度曲线;设置为TRUE,则显示密度曲线。 8. angle:密度曲线的角度,默认为45度。 9. col:直方图的颜色,默认为"gray"。 10. border:直方图的边界颜色,默认为"white"。 11. main:直方图的标题。 12. xlab:x轴的标签。 13. ylab:y轴的标签。 14. xlim:x轴的范围。 15. ylim:y轴的范围。 16. axes:逻辑值,表示是否绘制坐标轴。默认为TRUE,绘制坐标轴;设置为FALSE,则不绘制坐标轴。 17. plot:逻辑值,表示是否绘制直方图。默认为TRUE,绘制直方图;设置为FALSE,则不绘制直方图,只计算分组。 18. labels:分组的标签。 19. col.axis:坐标轴的颜色。 20. col.lab:标签的颜色。 21. col.main:标题的颜色。 22. col.sub:副标题的颜色。 23. cex.axis:坐标轴标签的大小。 24. cex.lab:标签的大小。 25. cex.main:标题的大小。 26. cex.sub:副标题的大小。 27. las:刻度标签的方向,默认为0,水平方向。 28. bg:直方图的背景颜色。 29. fg:直方图的前景颜色。 30. mar:边缘空白的大小。 31. mgp:刻度标签与轴线之间的距离。 32. ...:其他参数

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

麻利麻利哄吧

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值