boosting
XgBoost 和 LightGBM 官方文档阅读和算法学习*
号为未解释完全,具体使用方法请参考官方文档
XgBoost
常用参数
booster
[default= gbtree ] 基础模型类型,可选参数包括: gbtree、gblinear、dart,其中 gbtree、dart 为树模型、gblinear 为线性函数模型
eta
学习率
tree_method
XGBoost 中树的构造算法,可选项包括: auto, exact, approx, hist, gpu_exact, gpu_hist
eval_metric
依据目标函数选择评估指标
rmse: 根均方误差
mae: 平均绝对值误差
logloss: 负的似然函数
error: 二分类问题的分类错误率
merror: 多分类问题的分类错误率
mlogloss: 多分类问题的负似然函数
auc: IOC 曲线下面积
aucpr: PR 曲线下面积
updater
线性模型的拟合算法
shotgun: 基于 shotgun 算法的坐标下降法
coord_descent: 普通的坐标下降法
feature_selector: 特征选择和排序算法
objective
训练的模型类型和目标函数
reg:linear: 线性回归
reg:logistic: 逻辑回归
binary:logistic: 二分类问题, 输出概率值
binary:logitraw: 二分类问题, 输出得分值,需要通过 sigmoid 函数转化成概率值
binary:hinge: 二分类问题,使用铰链损失函数,输出 0 或 1,而不是概率值
count:poisson: 用于计数问题的泊松分布,输出泊松分布的均值。
survival:cox: Cox regression for right censored survival time data
multi:softmax: 多分类目标函数, 使用此目标函数,需要设置样本类别数据: num_class
multi:softprob: 同 softmax, 但是输出的结果为 ndata * nclass 维的向量,表示样本属于每个类别的概率
cyclic
: 循环变量特征shuffle
: 类型与循环变量特征,但是在每次更新时都会随机打乱特征的顺序random
: 随机(带替换)的坐标选择器greedy
: 选择最大梯度的坐标thrifty
: 近似 greedy 的坐标选择器top_k
: greedy 算法和 thrifty 算法选择的最优特征数量,0 表示不限制。
API
1. 数据结构类,提供数据的构建和处理xgboost.DMatrix(data, label=None, missing=None, weight=None, silent=False, feature_names=None, feature_types=None)
data
数据源或文件路径label
训练数据的标签missing
缺省值表示字符,如果没填, 默认值为:np.nanweight
每个样本的权重silent
构造数据结构时是否显示日志feature_names
各个特征的名称feature_types
各个特征的数据类型nthread
加载数据开启的线程数
2. 模型类,提供了一些基础的函数,如模型加载、保存、评估和预测等方法xgboost.Booster(params=None, cache=(), model_file=None)
load_model(fname) |
3. 对模型进行训练xgboost.train(params, dtrain, num_boost_round=10, evals=(), obj=None, feval=None, maximize=False, early_stopping_rounds=None, evals_result=None, verbose_eval=True, learning_rates=None, xgb_model=None, callbacks=None)
params
配置参数dtrain
训练数据num_boost_round
生成树的数量evals
评估数据obj
自定义的目标函数feval
自定义的评价函数maximize
是否最大化评价指标early_stopping_rounds
错误率 early_stopping_rounds 轮未下降,则停止训练evals_result
模型评估结果learning_rates
学习率xgb_model
在训练前加载之前训练的模型callback
设置回调函数,比如重新设置学习率
4. 对数据分类xgboost.XGBClassifier(max_depth=3, learning_rate=0.1, n_estimators=100, silent=True, objective='binary:logistic', nthread=-1, gamma=0, min_child_weight=1, max_delta_step=0, subsample=1, colsample_bytree=1, colsample_bylevel=1, reg_alpha=0, reg_lambda=1, scale_pos_weight=1, base_score=0.5, seed=0, missing=None)
max_depth
最大树深度learning_rate
学习率n_estimators
树的迭代次数gamma
节点分裂需要下降的最小损失min_child_weight
节点中样本的最小权重和max_delta_step
每轮允许叶子输出值的最大增量subsample
每轮训练使用的样本数量等于样本总数乘以采样率colsample_bytree
每轮训练使用的特征占比colsample_bylevel
每层训练使用的特征占比reg_alpha
L1 正则reg_lambda
L2 正则scale_pos_weight
用于控制正例和负例均衡的权重base_score
初始时各个样本的得分
5. 数据拟合和预测
xgboost.fit(X, y, sample_weight=None, eval_set=None, eval_metric=None, early_stopping_rounds=None, verbose=True) |
class xgboost.XGBRegressor()
用于回归任务
XgBoost 示例
import xgboost as xgb |
LightGBM
paramenter 常用参数
objective:
‘regression’,’regression_l2’,’mean_squared_error’,’mse’,’l2_root’,’root_mean_squred_error’,’rmse’: 表示回归任务,但是使用 L2 损失函数。默认为’regression’
‘binary’: 表示二分类任务,使用对数损失函数作为目标函数。
‘multiclass’: 表示多分类任务,使用 softmax 函数作为目标函数。必须设置 num_class 参数
‘multiclassova’,’multiclass_ova’,’ova’,’ovr’: 表示多分类任务,使用 one-vs-all 的二分类目标函数。必须设置 num_class 参数
‘regression_l1’,’mae’,’mean_absolute_error’: 表示回归任务,但是使用 L1 损失函数。
‘huber’: 表示回归任务,但是使用 huber 损失函数。
‘fair’: 表示回归任务,但是使用 fair 损失函数。
‘poisson’: 表示 Poisson 回归任务。
‘quantile’: 表示 quantile 回归任务。
‘quantile_l2’:表示 quantile 回归任务,但是使用了 L2 损失函数。
‘mape’,’mean_absolute_precentage_error’: 表示回归任务,但是使用 MAPE 损失函数
‘gamma’: 表示 gamma 回归任务。
‘tweedie’: 表示 tweedie 回归任务。
‘xentropy’,’cross_entropy’: 目标函数为交叉熵(同时具有可选择的线性权重)。要求标签是[0,1] 之间的数值。
‘xentlambda’,’cross_entropy_lambda’: 替代了参数化的 cross_entropy 。要求标签是[0,1] 之间的数值。
‘lambdarank’:表示排序任务。
boosting_type: // 基学习器模型算法
‘gbdt’: 表示传统的梯度提升决策树。默认值为’gbdt’
‘rf’: 表示随机森林。
‘dart’: 表示带 dropout 的 gbdt
‘goss’:表示 Gradient-based One-Side Sampling 的 gbdt
metric://指定度量的指标
‘l1’ 或者 mean_absolute_error 或者 mae 或者 regression_l1: 表示绝对值损失
‘l2’ 或者 mean_squared_error 或者 mse 或者 regression_l2 或者 regression:表示平方损失
‘l2_root’ 或者 root_mean_squared_error 或者 rmse:表示开方损失
‘quantile’ 表示 Quantile 回归中的损失
‘mape’ 或者 ‘mean_absolute_percentage_error’ 表示 MAPE 损失
‘huber’ 表示 huber 损失
‘fair’ 表示 fair 损失
‘poisson’ 表示 poisson 回归的负对数似然
‘gamma’ 表示 gamma 回归的负对数似然
‘gamma_deviance’ 表示 gamma 回归的残差的方差
‘tweedie’ 表示 Tweedie 回归的负对数似然
‘ndcg’ 表示 NDCG
‘map’ 或者’mean_average_precision’ 表示平均的精度
‘auc’ 表示 AUC
‘binary_logloss’或者’binary’ 表示二类分类中的对数损失函数
‘binary_error’ 表示二类分类中的分类错误率
‘multi_logloss’或者 ‘multiclass’或者 ‘softmax’或者 ‘multiclassova’或者 ‘multiclass_ova’,或者’ova’或者 ‘ovr’ 表示多类分类中的对数损失函数
‘multi_error’ 表示多分类中的分类错误率
‘xentropy’或者’cross_entropy’ 表示交叉熵
‘xentlambda’ 或者’cross_entropy_lambda’ 表示 intensity 加权的交叉熵
‘kldiv’或者’kullback_leibler’ 表示 KL 散度
数据结构
1. 数据结构类,提供数据的构建和处理lightgbm.Dataset(data, label=None, max_bin=None, reference=None, weight=None, group=None, init_score=None, silent=False, feature_name='auto', categorical_feature='auto', params=None, free_raw_data=True)
label
指定数据的标签列max_bin
特征值最大分类数量reference
增加评估参照,评估模型时使用,reference=trainweight
设置权重group
设置数据组的大小init_score
加入之前的分数silent
是否在训练过程中屏蔽输出feature_name
特征名字categorical_feature
设置分类特征free_raw_data
创建完后释放数据
2. 模型类,提供了一些基础的函数,如模型加载、保存、评估和预测等方法lightgbm.Booster(params=None, train_set=None, model_file=None, model_str=None, silent=False)
params
一个字典或者 None,给出了 Booster 的参数。默认为 Nonetrain_set
一个 Dataset 对象或者 None,给出了训练集。 默认为 Nonemodel_file
一个字符串或者 None,给出了 model file 的路径。 默认为 Nonesilent
一个布尔值,指示是否在构建过程中打印消息。默认为 False
lightgbm.add_valid(data,name) # 添加一个验证集。 |
训练
1. lightgbm.train()
执行训练
lightgbm.train(params, train_set, num_boost_round=100, valid_sets=None, valid_names=None, fobj=None, feval=None, init_model=None, feature_name='auto', categorical_feature='auto', early_stopping_rounds=None, evals_result=None, verbose_eval=True, learning_rates=None, keep_training_booster=False, callbacks=None)
params
相关参数配置,另外导入字典train_set
训练数据num_boost_round
boost 迭代次数valid_sets
,valid_names
设置训练时用于评估的数据集 fobj
自定义目标函数 preds, train_data -> grad,hess feval
自定义评估函数 preds, traindata -> eval_name, eval_result, is_higher_better init_model
导入之前训练数据feature_name
指定特征名字,数据源为 pandas DataFrame 会使用里面的 columnnamescategorical_feature
指定分类特征early_stopping_rounds
指定连续多少轮未改善后停止evals_result
指定字典存储 valid_sets 中验证的结果 verbose_eval
设置打印评估的间隔,可设置每个提升阶段打印或间隔verbose_eval
个阶段打印learning_rates
设置学习率keep_training_booster
设置训练得到的 booster 是否继续训练callbacks
设置每次迭代后需要执行的函数
最后返回 booster 实例
2. lightgbm.cv()
执行交叉检验
lightgbm.cv(params, train_set, num_boost_round=10, folds=None, nfold=5, stratified=True, shuffle=True, metrics=None, fobj=None, feval=None, init_model=None, feature_name='auto',categorical_feature='auto', early_stopping_rounds=None, fpreproc=None, verbose_eval=None, show_stdv=True, seed=0, callbacks=None)
folds
:一个生成器、一个迭代器、或者 None nfold
:指定交叉检验的数量。默认为 5stratified
:指示是否进行分层拆分shuffle
:指示是否在拆分之前先混洗数据metrics
:指定评估度量标准,在 params 中设置fpreproc
:设置预处理函数,在训练开始之前进行 show_stdv
:在训练过程中展示标准差信息seed
:一个整数,给出了生成 fold 的随机数种子 *
最后以字典的形式返回检验结果的均值和标准差
scikit-learn API
1. LGBMMOdel
实现 lightgbm 在 scikir-learn 中的接口,详见分类和回归任务
2. LGBMClassifier: LGBMModel 的子类,用于分类任务
lightgbm.LGBMClassifier(boosting_type='gbdt', num_leaves=31, max_depth=-1, learning_rate=0.1, n_estimators=10, max_bin=255, ubsample_for_bin=200000, objective=None, min_split_gain=0.0, in_child_weight=0.001, min_child_samples=20, subsample=1.0, subsample_freq=1, colsample_bytree=1.0, reg_alpha=0.0, reg_lambda=0.0, random_state=None, n_jobs=-1, silent=True, **kwargs)
boosting_type
: 指定学习器的算法’gbdt, rf, dart, goss’num_leaves
:一棵树上的叶子数max_depth
:树模型的最大深度learning_rate
:学习率n_estimators
:提升树的数量max_bin
: 每个特征的最大分支数量class_weight
:给出了每个类别的权重占比subsample_for_bin
:构建直方图的样本的数量 objective
:问题类型以及对应的目标函数,对于 LGBMRegressor 为’regression’;对于 LGBMClassifier 为’binary’ 或者’multiclass’;对于 LGBMRanker 为’lambdarank’min_split_gain
:执行切分的最小增益min_child_weight
:一个叶子节点上的最小权重之和,默认为 1e-3min_child_samples
: 一个叶子节点上包含的最少样本数量subsample
: 表示训练样本的采样比例,取值范围为[0.0,1.0]。如果小于 1.0,则 lightgbm 会在每次迭代中随机选择部分样本来训练(非重复采样)subsample_freq
:表示训练样本的采样频率colsample_bytree
:表示特征的采样比例,取值范围为[0.0,1.0]。如果小于 1.0,则 lightgbm 会在每次迭代中随机选择部分特征reg_alpha
:L1 正则化系数reg_lambda
:L2 正则化系数random_state
:随机数种子 n_jobs
:并行线程数量silent
:是否在训练过程中屏蔽输出
import lightgbm as lgb |
预测
gbm.fit(X, y, sample_weight=None, init_score=None, eval_set=None, eval_names=None, eval_sample_weight=None, eval_init_score=None, eval_metric='logloss', early_stopping_rounds=None, verbose=True, feature_name='auto', categorical_feature='auto', callbacks=None)` |
- LGBMRegressor 是 LGBMModel 的子类,它用于回归任务
- LGBMRanker 是 LGBMModel 的子类,它用于排序任务,详见排序学习算法
绘图 API
booster API
LightGBM 示例
import pandas as pd |
- 本文链接:https://hyqskevin.github.io/2019/08/01/boosting/
- 版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 CN 许可协议。转载请注明出处!