XGBoost
一、API详解
1.1 参数
1.1.1 通用参数:
-
booster=‘gbtree’ 使用的提升数的种类
gbtree, gblinear or dart
- silent=True: 训练过程中是否打印日志
- n_jobs=1: 并行运行的多线程数
1.1.2 提升树参数
- learning_rate=0.1: 训练的学习率,和梯度下降差不多
- max_depth=3: 树的最大深度
- gamma=0
- n_estimators=100: 要拟合的树的棵树,可以认为是训练轮数
- min_child_weight=1: 叶结点的最小权重
- subsample=1: 训练样本的抽样比率,行索引
- colsample_bytree=1: 特征的抽样比率,列索引
- reg_alpha=0: L1正则化系数
- reg_lambda=1: L2正则化系数
1.1.3 学习任务参数
- objective=‘binary:logistic’ 确定学习任务和相应的学习函数
"reg:linear" -线性回归
"reg:logistic" -逻辑回归
"binary:logistic" -二分类逻辑回归,输出概率
"binary:logitraw" -二分类逻辑回归,输出未logistic变换前的得分
"multi:softmax"
"multi:softprob"
-
random_state=0: 随机种子数
-
missing=None: 缺失值处理办法
-
max_delta_step=0,
-
colsample_bylevel=1
-
scale_pos_weight=1,
-
base_score=0.5,
-
nthread=None: 弃用,改用n_jobs
-
seed=None:弃用,改用random_state
1.1.4 控制过拟合:
- 降低模型复杂度:max_depth, min_child_weight and gamma
- 对样本随机采样:subsample, colsample_bytree
- 降低学习率,同时相应提高训练轮数
1.2 方法:
1.2.1 fit
-
X: 特征矩阵
-
y: 标签
-
sample_weight=None: 没一个样本的权重
-
eval_set=None: (X,y)验证集,用于检测提前结束训练
-
eval_metric=None: 评价指标
"rmse"
"mae"
"logloss"
"error":二分类错误率,阈值是0.5
"error@t":和error类似,阈值为t
"mlogloss"
"auc"
- early_stopping_rounds=None: 提前结束轮数
- verbose=True,
- xgb_model=None,
- sample_weight_eval_set=None
1.2.2 predict(data, output_margin=False, ntree_limit=0)
返回预测类别,数据类型,阈值不好控制
1.2.3 predict_proba(data, ntree_limit=0)
预测每一个数据,成为给定类别的概率
Lightgbm:
核心参数:
-
’objective’: (objective_type, app, application)
- 回归任务:
- ‘regression’(默认)
- ‘poisson’
- ‘tweedie’
- 分类任务:
- ‘binary’:二分类
- ‘multiclass’:多分类
- 回归任务:
-
’boosting_type’:(boosting_type, boost)
- ‘gbdt’:传统的梯度提升决策树 (默认)
- ‘rf’:随机森林
- ‘dart’:Dropouts meet Multiple Additive Regression Trees
- ‘goss’:Gradient-based One-Side Sampling 训练更快,可能欠拟合
- data:训练数据
- valid:验证数据集
-
’num_iteration’:(num_trees, n_estimators)
- 迭代次数,100(默认)
-
’learning_rate’:(eta, shrinkage_rate)
- 衰减因子,0.1(默认)
- seed:(random_state, random_seed)
- num_threads:(n_jobs, nthreads)
-
num_leaves:
- 单棵树的最大叶子数,31(默认)
控制学习参数:
-
’max_depth’:
- 树的最大深度,-1(默认),无限制
- 可用于控制过拟合
-
’lambda_l2’:(reg_lambda, lambda)
- L2正则化,0(默认)
-
’lambda_l1’:(reg_alpha)
- L1正则化,0(默认)
-
’min_data_in_leaf’(min_data, min_child_samples)
- 一个叶子的最小数据量,20(默认)
- 可用于控制过拟合
-
’subsample’: (sub_row, bagging, bagging_fraction)
- 对样本进行采样,1(默认)
- 可用于控制过拟合
-
’sub_feature’: (colsample_bytree, feature_fraction)
- 对特征进行采样,1(默认)
- 加速训练,控制过拟合
-
early_stopping: (early_stopping_round)
- 有验证集的话,提前停止的轮数
-
’verbose’: (verbosity)
- 训练日志显示数,1(默认)
对比表
参数 | Lightgbm | XGBoost |
---|---|---|
模型参数 | boosting_type=‘gbdt’/‘dart’/‘goss’/‘rf’ | boosting_type=‘gbdt’(gbdt,dart,goss,rf) |
num_leaves=31 | ||
max_depth=-1(no limit) | ||
n_estimators=100 | ||
learning_rate=0.1 | ||
subsample_for_bin=200000 | ||
objective=‘regression’/'binary/multiclass) | ||
class_weight=(dict, ‘balanced’ or None)用于多分类 | ||
min_split_gain=0 分裂的最小增益 | ||
min_split_weight=1e-3 分裂的最小海森值 | ||
subsample=1 训练样本采样率(行) | ||
colsample_bytree=1 训练特征采样率(列) | ||
lambda_l1=0:L1正则化系数 | ||
lambda_l2=0.0: L2正则化系数 | ||
random_state=None: 随机种子数 | ||
n_jobs=-1: 多线程数 | ||
max_bin=255 | ||
importance_type=split’/‘gain’ | ||
fit | X,y | |
eval_set=None([(X_train, y_train), (X_valid, y_valid)]) | ||
early_stopping_rounds=None | ||
categorical_feature=‘auto’ | ||
verbose=True | ||
eval_metric=None | ||
metrics | l1/mae | |
l2/mse(regression) | ||
l2_root/rmse | ||
binary_logloss(bi-classification) | ||
auc | ||
multi_logloss |
参考资料:
1. XGBoost和LightGBM的参数以及调参
2. Xgboost参数调优的完整指南及实战
3. LightGBM调参笔记
4. LightGBM 调参方法(具体操作)
5. LightGBM源码阅读+理论分析(处理特征类别,缺省值的实现细节) 6. 开源 | LightGBM:三天内收获GitHub 1000 星
7. 『我爱机器学习』集成学习(四)LightGBM