LightGBM理论推导的数学原理
Ch.3 LightGBM完整建模流程的数学推导
在我们了解了一系列LGBM的数据压缩方法和决策树优化方法之后,本节我们围绕LGBM的损失函数求解过程进行完整的数学推导,同时也将结合此前介绍的LGBM提出的一系列数据预处理方法,从原理层面为大家呈现完整的LGBM算法建模流程。不过正如此前所说,LGBM的损失函数求解过程几乎可以看成是GBDT和XGB的结合体,因此LGBM损失函数的数学推导层面本身并不会有太多难点。但需要注意的是,不同于XGB算法提出了一整套非常严谨的数学推导和逻辑证明,LGBM其实更像是通常意义下的机器学习算法——即一切以后验结果为准。在LGBM算法提出团队来看,很多数学过程并不是一定需要环环相扣,一切以“追求最高精度”为导向,很多数学过程或许可以以“启发式”的方法拼凑到一起,只要最终能够获得一个足够精确的结果和高效的计算过程即可。
因此,从这个角度来说,学习LGBM算法的难点并不在于数学推导(LGBM算法原理的数学过程不会超过XGB的范畴),但却需要我们将环环相扣的数学过程拆解成一个个独立的关键环节,并理解每个关键环节之于最终结果的影响,同时能够进一步理解不同 ...
LightGBM原生API使用与进阶
Ch3.LightGBM原生API使用与进阶
1.LGBM的原生API调用
当然,除了sklearn API调用外,我们还可以使用LGBM原生API进行模型训练。LGBM的原生API调用和XGB的原生API调用过程非常类似,一个最简单的流程如下::
Step1.Data Interface:借助.Dataset方式进行数据集封装;
Step2.Setting Parameters:创建超参数字典,用于向模型传输超参数。若完全使用默认参数,则可设置空的字典作作为超参数列表对象;
Step3.Training:通过.train的方式进行模型训练。
首先是数据集的创建:
12# 数据集创建train_data = lgb.Dataset(X_train, label=y_train)
1type(train_data)
lightgbm.basic.Dataset
然后创建超参数字典。这里我们若全部采用模型默认的超参数,只需要设置空字典即可:
12# 设置超参数字典param = {}
不过这里因为鸢尾花数据是多分类问题,LGBM模型在默认情况下是回归类模型 ...
LightGBM sklearn API实现与进阶
Ch.4 LightGBM sklearn API实现与进阶
1.LightGBM算法特性
根据上一小节的LGBM优化策略的总结,我们不难发现LGBM算法具备如下特性:
超高的计算效率
其实从上面的和GBDT的对比中不难发现,LGBM最大的特点就是计算效率上进行了诸多优化,这方面的优化在具体建模过程中表现为两个方面,其一是建模时间极大缩短,其二则是计算过程的内存占用大幅减少,并且,LGBM同时提供多线程并行计算、分布式计算和GPU加速计算等多种计算实现方式,选择合适的计算方式,可以进一步提升计算效率;
性能强劲
而同时,算法原理层面的“简化操作”并不会对LGBM的实际预测效率产生太大的影响,尽管从理论上来说,LGBM算法的精确性是介于RF和XGB之间(强于随机森林、弱与XGB),但实际建模过程中,这些微弱的理论层面的性能差异并不会带来太多实际影响,并且复杂度降低有时候反而会使得模型更克服过拟合问题,从而获得一个更好的预测结果。在实际使用过程中,LGBM和XGB性能层面并没有明显差异。
功能完善
并且作为新兴的(次世代)集成学习算法,LGBM提供了 Pyth ...
XGBoost回归的原生代码实现
XGBoost回归的原生代码实现
XGBoost的原生代码与我们已经习惯了的sklearn代码有很大的不同。首先,原生代码必须使用XGBoost自定义的数据结构DMatrix,这一数据结构能够保证xgboost算法运行更快,并且能够自然迁移到GPU上运行,类似于列表、数组、Dataframe等结构都不能用于原生代码,因此使用原生代码的第一步就是要更换数据结构。
当设置好数据结构后,我们需要以字典形式设置参数。XGBoost也可以接受像sklearn一样,将所有参数都写在训练所用的类当中,然而由于xgboost的参数列表过长、参数类型过多,直接将所有参数混写在训练模型的类中会显得代码冗长且混乱,因此我们往往会使用字典单独呈现参数。准备好参数列表后,我们将使用xgboost中自带的方法xgb.train或xgb.cv进行训练,训练完毕后,我们可以使用predict方法对结果进行预测。虽然xgboost原生代码库所使用的数据结构是DMatrix,但在预测试输出的数据结构却是普通的数组,因此可以直接使用sklearn中的评估指标,或者python编写的评估指标进行评估。接下来,我们来认识一下 ...
XGBoost回归的sklearnAPI实现
XGBoost回归的sklearnAPI实现
不同于内嵌在sklearn框架中的其他算法,xgboost是独立的算法库,因此它有一套不同于sklearn代码的原生代码。大部分时候我们使用原生代码来运行xgboost,因为这套原生代码是完全为集成学习所设计的,不仅可以无缝使用交叉验证、默认输出指标为RMSE,还能够默认输出训练集上的结果帮我们监控模型。然而对于熟悉sklearn的我们来说,这一套代码略有难度,因此许多人也会倾向于使用xgboost自带的sklearn接口来实现算法。
XGBoost自带sklearn接口(sklearn API),通过这个接口,我们可以使用跟sklearn代码一样的方式来实现xgboost,即可以通过fit和predict等接口来执行训练预测过程,也可以调用属性比如coef_等。在XGBoost的sklearn API中,我们可以看到下面五个类:
类
说明
XGBRegressor()
实现xgboost回归
XGBClassifier()
实现xgboost分类
XGBRanker()
实现xgboost排序
XGBRFClas ...