全部产品
Search
文档中心

云原生数据库 PolarDB:LightGBM算法

更新时间:Nov 08, 2024

本文介绍了LightGBM算法相关内容。

简介

LightGBM(Light Gradient Boosting Machine)是一个基于决策树算法的分布式梯度提升框架。设计初衷是提供一个快速、高效、低内存、高准确度、支持并行和大规模数据处理的工具。LightGBM可以减少数据对内存的使用、减少通信代价以及提升多机并行时的效率,在数据计算上实现线性加速。

使用场景

LightGBM是一个算法框架,包括GBDT模型、随机森林和逻辑回归等模型。通常应用于二分类、多分类和排序等场景。

例如:在个性化商品推荐场景中,通常需要做点击预估模型。使用用户过往的行为(点击、曝光未点击、购买等)作为训练数据,来预测用户点击或购买的概率。根据用户行为和用户属性提取一些特征,包括:

  • 类别特征(Categorical Feature):字符串类型,如性别(男/女)。

  • 物品类型:服饰、玩具和电子等。

  • 数值特征(Numrical Feature):整型或浮点型,如用户活跃度或商品价格等。

参数说明

下表中的参数为创建模型CREATE MODEL语法中model_parameter参数的取值,您可以根据当前需求选择对应的参数。

参数

说明

boosting_type

弱学习器的类型。取值范围如下:

  • gbdt(默认):使用基于树的模型进行计算。

  • gblinear:使用线性模型进行计算。

  • rf:使用随机森林模型进行计算。

  • dart:使用dropout技术删除部分树,防止过拟合。

  • goss:使用单边梯度抽象算法进行计算。速度快,但是可能欠拟合。

说明

设置该参数值时,需要使用单引号将参数值包裹起来。例如:boosting_type='gbdt'

n_estimators

迭代次数。取值为整数。默认值为100。

loss

学习任务及相应的学习目标。取值范围如下:

  • binary(默认):二分类。

  • regression:使用L2正则项回归模型。

  • regression_l1:使用L1正则项回归模型。

  • multiclass:多分类。

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

模型的存储类型。取值范围如下:

  • pkl(默认):PKL类型的文件。

  • pmml:PMML类型的文件,可以显示树的结构等信息。

n_jobs

训练的线程数。取值为整数。默认值为4。

说明

训练的线程数越多,训练越快。

is_unbalance

是否提高样本少的类别的权重,用于解决样本不平衡问题。取值范围如下:

  • False(默认):不提高样本少的类别的权重。

  • True:提高样本少的类别的权重。

categorical_feature

类别型特征。取值为字符串数组。一般情况下,算法会通过判断数据类型来自动设置,但也可以人为指定。

示例:当categorical_feature参数值设置为'AirportTo,DayOfWeek'时,表示这两个特征是类别型特征。

automl

是否开启自动调参功能。取值范围如下:

  • False(默认):不开启自动调参功能。

  • True:开启自动调参功能。开启后,默认会使用早停技术,在学习任务及相应的学习目标(loss参数的值)不变时停止迭代。

automl_train_tag

训练的标签。

automl_test_tag

测试的标签。

automl_column

自动调参用来区别训练集和开发集的列名。使用时需要指定automl_columnautoml_test_tag,建议automl_train_tag的数据数量比automl_test_tag的数据数量多4~9倍。

说明

当设置automl_column参数值后,会开启自动搜索最优参数组合的能力。此时,在learning_rate参数和subsample参数前添加automl_前缀,就可以对已有的参数进行搜索 ,以定位最佳参数。示例如下:

automl_column='automl_column',automl_train_tag='train',automl_test_tag='test',automl_learning_rate='0.05,0.04,0.03,0.01',automl_subsample='0.6,0.5'

则会从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');