Article directory
单模型
LightBGM理论
LightGBM 是一个轻量级梯度 boosting 框架,使用基于学习算法的决策树。它可以说是分布式的,高效的,有以下优势:
更快的训练效率
低内存使用
更高的准确率
支持并行化学习
可处理大规模数据
特点:
基于Histogram的决策树算法
带深度限制的Leaf-wise的叶子生长策略
直方图做差加速
直接支持类别特征(Categorical Feature)
Cache命中率优化
基于直方图的稀疏特征优化
多线程优化
Histogram算法
直方图算法的基本思想:先把连续的浮点特征值离散化成k个整数,同时构造一个宽度为k的直方图。遍历数据时,根据离散化后的值作为索引在直方图中累积统计量,当遍历一次数据后,直方图累积了需要的统计量,然后根据直方图的离散值,遍历寻找最优的分割点。
带深度限制的Leaf-wise的叶子生长策略
Level-wise过一次数据可以同时分裂同一层的叶子,容易进行多线程优化,也好控制模型复杂度,不容易过拟合。但实际上Level-wise是一种低效算法,因为它不加区分的对待同一层的叶子,带来了很多没必要的开销,因为实际上很多叶子的分裂增益较低,没必要进行搜索和分裂。
Leaf-wise则是一种更为高效的策略:每次从当前所有叶子中,找到分裂增益最大的一个叶子,然后分裂,如此循环。因此同Level-wise相比,在分裂次数相同的情况下,Leaf-wise可以降低更多的误差,得到更好的精度。
Leaf-wise的缺点:可能会长出比较深的决策树,产生过拟合。因此LightGBM在Leaf-wise之上增加了一个最大深度限制,在保证高效率的同时防止过拟合。
LightGBM实践
自己设定参数
import lightgbm as gbm
GBM = gbm.sklearn.LGBMClassifier(num_leaves = 30,learning_rate = 0.1,n_estimators = 20)
GBM.fit(x_train,y_train)
GBM_predict = GBM.predict(x_val)sklearn.metrics.f1_score(y_val,GBM_predict,average ='weighted')
GridSearchCV调参
From sklearn.model_selection import GridSearchCV
GBM_grid =gbm.sklearn.LGBMClassifier(num_leaves=30) param_grid = { 'learning_rate': [0.01, 0.1, 0.5], 'n_estimators': [30, 40] }
gbm = GridSearchCV(GBM_grid, param_grid )
gbm.fit(x_train, y_train)
print(''The optimal parameters for grid search are:', gbm.best_params_)
GBM_best = gbm.sklearn.LGBMClassifier(num_leaves = 30,learning_rate = 0.1,n_estimators = 40)
GBM_best.fit(x_train,y_train)
GBM_predict = lgb_best.predict(x_val)
sklearn.metrics.f1_score(y_val,GBM_predict,average =“weighted” “)
模型融合
GBM_predict = lgb_best.predict_paoba(x_val)
lr_predict=lr.predict_paoba(x_val)
clf_predict=clf.predict_paoba(x_val)
sum_preidct = GBM_predict + lr_predict + clf_predict
sum = np.argmax(sum, axis=1)