大纲
LightGBM
LightGBM的优化
注:直方图算法是指将样本点离散化成n人箱子,分裂时,整个箱子一起分裂,即整个箱子在左边,或在右边;XGBoost的近似搜索也类似,但其用的是不直方图,而是分位数;
算法
注:level-wise(XGBoost采用的方式)是指分裂时按树的层数分裂出一个完整的决策树,如分裂的第一层为2个,第二层为4个,第三层为8个.......,第n层为2^n个;
leaf-wise(LightGBM采用的方式)每次从当前所有叶子中,找到分裂增益最大(一般也是数据量最大)的叶子节点进行分裂。
level-wise和leaf-wise的图示:
注:leaf-wise分裂完成的有可能不是一棵完全树,且每次分裂时,都会忽略层数,从当前所有的叶子节点里进行筛选,如上图中第二个箭头右边的图里,筛选的叶子节点为,第三层的第一个,第四层的第一个和第二个,第二层的第二个;
注:histogram做差加速是指,因为分裂后的左节点和右节点的样本数等于其父节点的样本数,所以父节点分裂时,左叶子节点分裂完后,右叶子节点里的样本不需要再次计算,而是直接用父节点的样本减去左叶子节点里的样本得到;
LightGBM的使用
注:max_bin是LightGBM相对XGBoost多出来的一个参数,表示直方图中,一共有多少个箱子,默认为255;
weight为权重参数,可以对每个样本是否设置权重进行设置;
注:categorical_feature(类别型特征),可以指定类别型特征的值,默认为auto,自动识别;
free_raw_data,默认为true,即生成直方图后,释放到原始数据,从而减小内存使用量;
注:num_boost_round是弱学习器的数目,默认为100;
valid_sets:是否有校验集,有的话可以以Datasets的形式放在这个参数中;
fobj:目标函数;
feval:评价指标;
注:early_stopping_rounds同XGBoost,在有校验集时,可以设置过早停止;
evals_result:评价性能的结果;
verbose_eval:是否打印中间结果, 可以设置成一个整数(如10,表示10个中间结果打印一次),如果每个中间结果都打印出来,打印的结果可能太多;
注:learning_rates:迭代次数;
训练完成后返回一个学习器;
交叉验证
注:metrics为评价指标;
返回的结果的评价的历史记录;
注:fobj是指单独调用LightGBM时,参数的名称;objective是指在sklearn中调用LightGBM时,参数的名称;
LightGBM支持的任务类型为regression(回归)、binary(两类分类)、lambdarank(排序)、multiclass(多类分类);
注:评价指标的取值;
注:
,到这一步时,已经生成了直方图,且默认情况下原始数据也已经释放掉了;
注:boosting_type:弱学习器的类型;subsample_for_bin:直方图中,一个bin下面有多少个样本,例如,在均匀分布,可以用一部分样本来代表全部样本;min_split_gain:相当于XGBoost中的gamma,即分裂后,损失的减少小于该值时,停止分裂;min_child_samples:每个节点中最少有多少个样本;subsam-ple:行采样比例;subsample_freq:采样频率,即建多少棵树后,对样本再采一次样;colsample_bytree:列采样,即特征采样比例;
注:如果不使用交叉验证时,则需要使用校验集;
注:基于树的模型基本都支持feature_importances_(特征重要性),特征重要性可以用于特征选择;