本文介绍了LightGBM算法相关内容。
简介
LightGBM(Light Gradient Boosting Machine)是一个基于决策树算法的分布式梯度提升框架。设计初衷是提供一个快速、高效、低内存、高准确度、支持并行和大规模数据处理的工具。LightGBM可以减少数据对内存的使用、减少通信代价以及提升多机并行时的效率,在数据计算上实现线性加速。
使用场景
LightGBM是一个算法框架,包括GBDT模型、随机森林和逻辑回归等模型。通常应用于二分类、多分类和排序等场景。
例如:在个性化商品推荐场景中,通常需要做点击预估模型。使用用户过往的行为(点击、曝光未点击、购买等)作为训练数据,来预测用户点击或购买的概率。根据用户行为和用户属性提取一些特征,包括:
类别特征(Categorical Feature):字符串类型,如性别(男/女)。
物品类型:服饰、玩具和电子等。
数值特征(Numrical Feature):整型或浮点型,如用户活跃度或商品价格等。
参数说明
下表中的参数为创建模型CREATE MODEL
语法中model_parameter
参数的取值,您可以根据当前需求选择对应的参数。
参数 | 说明 |
boosting_type | 弱学习器的类型。取值范围如下:
说明 设置该参数值时,需要使用单引号将参数值包裹起来。例如: |
n_estimators | 迭代次数。取值为整数。默认值为100。 |
loss | 学习任务及相应的学习目标。取值范围如下:
|
num_leaves | 叶子的个数。取值为整数。默认值为128。 |
max_depth | 树的最大深度。取值为整数。默认值为7。 说明 如果设置为-1,则表示不对树的深度做限制。但为防止过拟合,建议合理设置该值。 |
learning_rate | 学习率。取值为浮点数。默认值为0.06。 |
max_leaf_nodes | 树的最大叶子节点数。取值为空或者整数。默认值为空,表示对叶子节点数无限制。 |
min_samples_leaf | 叶子节点最少的样本数。取值为整数。默认值为20。 说明 如果某叶子节点数目小于最少样本数,则会和兄弟节点一起被剪枝。 |
subsample | 训练样本占所有样本的比例。取值为浮点数。取值范围:0~1。默认值为1。 说明 如果取值小于1,则只有这部分比例值的样本会参与训练。 |
max_features | 训练特征占所有特征的比例。取值为浮点数。取值范围:0~1。默认值为1。 |
max_depth | 树的最大深度。取值为整数。默认值为7。 说明 取值越大,精度越高,但容易过拟合。 |
random_state | 随机数种子。取值为整数。默认值为1。 说明 设置不同的值会影响树的构建和训练数据的切分。 |
model_type | 模型的存储类型。取值范围如下:
|
n_jobs | 训练的线程数。取值为整数。默认值为4。 说明 训练的线程数越多,训练越快。 |
is_unbalance | 是否提高样本少的类别的权重,用于解决样本不平衡问题。取值范围如下:
|
categorical_feature | 类别型特征。取值为字符串数组。一般情况下,算法会通过判断数据类型来自动设置,但也可以人为指定。 示例:当 |
automl | 是否开启自动调参功能。取值范围如下:
|
automl_train_tag | 训练的标签。 |
automl_test_tag | 测试的标签。 |
automl_column | 自动调参用来区别训练集和开发集的列名。使用时需要指定 说明 当设置
则会从0.05,0.04,0.03,0.01这几组学习率和0.6,0.5这两个样本采样参数中找到最佳参数。 |
示例
创建模型与模型离线训练
/*polar4ai*/CREATE MODEL airline_gbm WITH
(model_class = 'lightgbm',
x_cols = 'Airline,Flight,AirportFrom,AirportTo,DayOfWeek,Time,Length',
y_cols='Delay',model_parameter=(boosting_type='gbdt'))
AS (SELECT * FROM db4ai.airlines);
模型评估
/*polar4ai*/SELECT Airline FROM EVALUATE(MODEL airline_gbm,
SELECT * FROM db4ai.airlines LIMIT 20) WITH
(x_cols = 'Airline,Flight,AirportFrom,AirportTo,DayOfWeek,Time,Length',y_cols='Delay',metrics='acc');
模型预测
/*polar4ai*/SELECT Airline FROM PREDICT(MODEL airline_gbm,
SELECT * FROM db4ai.airlines limit 20) WITH
(x_cols = 'Airline,Flight,AirportFrom,AirportTo,DayOfWeek,Time,Length');