! Z5 s- ]( \* H4 {$ L) h) Q: F' c) h3.2 booster参数 * z; R4 E0 i0 Q- K. N @( P$ {1 V尽管有两种booster可供选择,我这里只介绍tree booster,因为它的表现远远胜过linear booster,所以linear booster很少用到。: n5 }! v. a5 m- G4 F
# a% k8 C' H- P e
1、eta[默认0.3]5 _1 b( I& a. k0 a. t+ y
5 y/ F# [3 H$ a( d9 P和GBM中的 learning rate 参数类似。 ( `$ e5 t% a; v. X0 A通过减少每一步的权重,可以提高模型的鲁棒性。 9 g" s! z8 U8 O$ C" \典型值为0.01-0.2。4 e. D% O; T: W2 F3 d
2、min_child_weight[默认1] $ q1 P, q0 q8 d 1 R& z% b; y* i" J; _决定最小叶子节点样本权重和。/ d& K8 h% c& y
和GBM的 min_child_leaf 参数类似,但不完全一样。XGBoost的这个参数是最小样本权重的和,而GBM参数是最小样本总数。8 w; y3 Q& D2 u( c* t0 Y7 a
这个参数用于避免过拟合。当它的值较大时,可以避免模型学习到局部的特殊样本。7 c5 l( k3 i- Z' D+ V
但是如果这个值过高,会导致欠拟合。这个参数需要使用CV来调整。8 c$ ?# \2 ~3 f0 n
3、max_depth[默认6] ( ] t- G0 P& n3 `$ Y. q3 e& n$ d/ N( j/ n( K; h6 L t
和GBM中的参数相同,这个值为树的最大深度。 ! j/ ^3 A W4 `5 T; o这个值也是用来避免过拟合的。max_depth越大,模型会学到更具体更局部的样本。 ' n! J l# I" I, E+ @( S: P, O需要使用CV函数来进行调优。& N4 Y- ]; d* g* S+ `( Z8 E
典型值:3-10/ ~# u- p6 w4 P
4、max_leaf_nodes 7 d6 n W7 z' [" D- K ) X- H' I D* p3 z9 ?! E( C" N' ^树上最大的节点或叶子的数量。 3 S. S8 |& E( X可以替代max_depth的作用。因为如果生成的是二叉树,一个深度为n的树最多生成n2n2个叶子。' s; q! i! ~- \) |5 Q! w3 D
如果定义了这个参数,GBM会忽略max_depth参数。 - y" \* ?+ U2 j8 ^5、gamma[默认0]7 J" n! r( m R1 u0 V
9 I& T# P8 H* C T在节点分裂时,只有分裂后损失函数的值下降了,才会分裂这个节点。Gamma指定了节点分裂所需的最小损失函数下降值。9 y& K% q3 A2 O8 Y
这个参数的值越大,算法越保守。这个参数的值和损失函数息息相关,所以是需要调整的。% z& W! x* p+ b# m8 W
6、max_delta_step[默认0]0 E9 ]2 Y( ?) {% R! f
6 {; I, b* X. z3 p! Q这参数限制每棵树权重改变的最大步长。如果这个参数的值为0,那就意味着没有约束。如果它被赋予了某个正值,那么它会让这个算法更加保守。 " E9 v, s. ?8 U/ B8 b! _8 n通常,这个参数不需要设置。但是当各类别的样本十分不平衡时,它对逻辑回归是很有帮助的。5 R& D' K- e, i" _
这个参数一般用不到,但是你可以挖掘出来它更多的用处。9 Q' e# x( P# Q3 x
7、subsample[默认1] ( c! _& Y) [7 g 8 j: j( x" a# M: K9 W+ q和GBM中的subsample参数一模一样。这个参数控制对于每棵树,随机采样的比例。 ( ]- M: J4 b- Z M减小这个参数的值,算法会更加保守,避免过拟合。但是,如果这个值设置得过小,它可能会导致欠拟合。 4 y4 A2 Y' }+ C# H$ N5 g" E$ G& w典型值:0.5-12 q) _. w8 {3 _) I; z
8、colsample_bytree[默认1]. ]; I+ M P0 Q
5 B5 k1 ?; z* l' m
和GBM里面的max_features参数类似。用来控制每棵随机采样的列数的占比(每一列是一个特征)。& Q3 N& {# x" ?, P3 n
典型值:0.5-1 ( M0 ?( ~- X: v9 `. b+ \! q5 X9、colsample_bylevel[默认1] % U3 E6 E. n* Q& w & j S) [/ l8 l) g用来控制树的每一级的每一次分裂,对列数的采样的占比。6 w R5 {% i9 X8 o
我个人一般不太用这个参数,因为subsample参数和colsample_bytree参数可以起到相同的作用。但是如果感兴趣,可以挖掘这个参数更多的用处。) ?+ N. G; q. g( V$ q
10、lambda[默认1] ( C( A( E7 }! q+ ^$ @3 Z: p" d 1 [% g _: ]8 w: H" T8 b) l权重的L2正则化项。(和Ridge regression类似)。6 f' J& j5 {: ^4 f3 d5 T* B* V) n/ J, f
这个参数是用来控制XGBoost的正则化部分的。虽然大部分数据科学家很少用到这个参数,但是这个参数在减少过拟合上还是可以挖掘出更多用处的。 3 g& C) z4 e0 y! g6 e: S. A11、alpha[默认1] 6 X3 C' R8 w' ^" {' h1 O4 D/ e9 y2 w2 M e* o' V
权重的L1正则化项。(和Lasso regression类似)。 W' m* G- O; }可以应用在很高维度的情况下,使得算法的速度更快。 " h) l4 O6 K: S0 w- [" Y+ a12、scale_pos_weight[默认1]* e" t$ c! `- i- N9 u
6 s3 l6 r, V8 T' s# `# M
在各类别样本十分不平衡时,把这个参数设定为一个正值,可以使算法更快收敛。 7 J" ^5 f! L' @4 G- V4 Y2 d4 c3.3学习目标参数0 _ A0 t6 f8 K2 E% x3 _
这个参数用来控制理想的优化目标和每一步结果的度量方法。. @, L( ~$ r% d5 U J
- p) q, E1 f) H0 q; \' L- }
1、objective[默认reg:linear] 9 y6 L, {! Q) F4 h' k; o. U; A+ Q/ G4 U) F$ q0 M
这个参数定义需要被最小化的损失函数。最常用的值有: 2 T6 n7 A% M! d8 y* a: b
binary:logistic 二分类的逻辑回归,返回预测的概率(不是类别)。 $ Z( t! Z1 t0 wmulti:softmax 使用softmax的多分类器,返回预测的类别(不是概率)。 在这种情况下,你还需要多设一个参数:num_class(类别数目)。 # O0 V3 y4 z- o; G# zmulti:softprob 和multi:softmax参数一样,但是返回的是每个数据属于各个类别的概率。, c0 X) @3 a8 L6 n
2、eval_metric[默认值取决于objective参数的取值]# Z7 F% `: j3 m5 y2 P' e# R
$ h) @, I- A( @, g
对于有效数据的度量方法。% A2 |& J& J& y4 b& j! H9 R
对于回归问题,默认值是rmse,对于分类问题,默认值是error。8 R4 L; Q7 p' k) G9 G2 }) [
典型值有: 1 ~, `) e+ W/ Grmse 均方根误差(∑Ni=1ϵ2N−−−−−√∑i=1Nϵ2N)+ J( j1 ?2 @: l+ D, u
mae 平均绝对误差(∑Ni=1|ϵ|N∑i=1N|ϵ|N)3 Y" ~$ M4 j/ Z7 A9 t
logloss 负对数似然函数值 ' o0 J1 u9 U" }! qerror 二分类错误率(阈值为0.5) 3 m$ {. a( V& g! I. _" m8 f6 z7 y9 y: Tmerror 多分类错误率 % @5 |& }: b1 \) h; r0 vmlogloss 多分类logloss损失函数3 I' W; C6 S: B) s8 l
auc 曲线下面积: p' T6 |7 ^' d( c: S- F, e
python的Xgbosoost调参实例:推荐看 https://blog.csdn.net/han_xiaoyang/article/details/52665396 * \& ^4 _+ G `5 m& [ H3 G- O! l/ @; m! ^! U5 N+ ^- F
除此以外,xgboost除了原生版的调用以外,sklearn还为我们封装了一个sklearn版本调用的方法,from xgboost import XGBClassifier,调参同样可以借用网格搜索的方法,这是一篇xgboost的网格搜索的案例 7 s- Z, K7 u4 n; Y 2 F6 [) {% I0 D) d T' ~4、小结 3 M9 p0 h5 f; Kxgboost与gdbt除了上述的不同,xgboost在实现时还做了许多优化:(以下转载于 机器学习系列(12)_XGBoost参数调优完全指南(附Python代码))! Z% w9 H0 B! Y9 k
/ V6 F5 r' p+ h. a6 R8 L, ]; E1)并行处理 ! w3 B* X$ c( n5 _7 v' i 5 `, i( j4 h7 [4 P3 {XGBoost可以实现并行处理,相比GBM有了速度的飞跃。/ d! ^! y; v9 F( o5 u8 ?
不过,众所周知,Boosting算法是顺序处理的,它怎么可能并行呢?每一课树的构造都依赖于前一棵树,那具体是什么让我们能用多核处理器去构造一个树呢?我希望你理解了这句话的意思。如果你希望了解更多,点击这个链接。* F1 q/ X5 g Y! o0 u
XGBoost 也支持Hadoop实现。7 O: Q$ f1 h% ~
2)高度的灵活性 " L, l( S# D4 H6 d$ H) h2 C& G4 E: E: o
XGBoost 允许用户定义自定义优化目标和评价标准 % V, d: k/ p0 j. U( }3)缺失值处理: N9 m" w q: C% T9 Q3 G
- Z K# ~& F' T5 x$ X8 J: \XGBoost内置处理缺失值的规则。( p# A" Z4 E, f% D' K0 A9 `
用户需要提供一个和其它样本不同的值,然后把它作为一个参数传进去,以此来作为缺失值的取值。XGBoost在不同节点遇到缺失值时采用不同的处理方法,并且会学习未来遇到缺失值时的处理方法。 ; J( p' z: ], R4)剪枝 - u4 H9 Y: i, A2 u . i) N3 p: _6 A2 z' n" Z" Y5)内置交叉验证 ! G$ k) ]3 H# W6 ]3 ~+ H5 z8 M* S8 E/ O" k) m
XGBoost允许在每一轮boosting迭代中使用交叉验证。因此,可以方便地获得最优boosting迭代次数。 ' t& h( k; @- ?而GBM使用网格搜索,只能检测有限个值。 6 g s5 M1 J) ^0 q; @4 ~ E0 Z4 ?1 @) v* ^3 y6 E
1 ~2 ]0 v e5 G( n- q! J% u( G' _1 v
参考资料:, O5 M) ^. A: |- g/ K+ Z( T5 ~
# U9 ?) I: Q ~/ u# w
https://www.cnblogs.com/wxquare/p/5541414.html# |! Q' i5 b- |# Z
0 ~1 y; ^/ [* X) J
https://blog.csdn.net/a1b2c3d4123456/article/details/528490919 w$ B# P% ?4 g4 F