PS-SMART回归

参数服务器PS(Parameter Server)致力于解决大规模的离线及在线训练任务,SMART(Scalable Multiple Additive Regression Tree)是GBDT(Gradient Boosting Decision Tree)基于PS实现的迭代算法。PS-SMART支持百亿样本及几十万特征的训练任务,可以在上千节点中运行。同时,PS-SMART支持多种数据格式及直方图近似等优化技术。

使用限制

PS-SMART回归组件的输入数据必须满足以下要求:

  • PS-SMART回归组件的目标列仅支持数值类型。如果MaxCompute表数据是STRING类型,则需要进行类型转换。

  • 如果数据是KV格式,则特征ID必须为正整数,特征值必须为实数。如果特征ID为字符串类型,则需要使用序列化组件进行序列化。如果特征值为类别型字符串,需要进行特征离散化等特征工程处理。

  • 虽然PS-SMART回归组件支持数十万特征任务,但是消耗资源大且运行速度慢,可以使用GBDT类算法进行训练。GBDT类算法适合直接使用连续特征进行训练,除需要对类别特征进行One-Hot编码(筛除低频特征)外,不建议对其他连续型数值特征进行离散化。

  • PS-SMART算法会引入随机性。例如,data_sample_ratiofea_sample_ratio表示的数据和特征采样、算法使用的直方图近似优化及局部Sketch归并为全局Sketch的顺序随机性。虽然多个Worker分布式执行时,树结构不同,但是从理论上可以保证模型效果相近。如果您在训练过程中,使用相同数据和参数,多次得到的结果不一致,属于正常现象。

  • 如果需要加速训练,可以增大计算核心数。因为PS-SMART算法需要所有服务器获得资源后,才能开始训练,所以集群忙碌时,申请较多资源会增加等待时间。

注意事项

使用PS-SMART回归组件时,您需要注意以下事宜:

  • 虽然PS-SMART回归组件支持数十万特征任务,但是消耗资源大且运行速度慢,可以使用GBDT类算法进行训练。GBDT类算法适合直接使用连续特征进行训练,除需要对类别特征进行One-Hot编码(筛除低频特征)外,不建议对其他连续型数值特征进行离散化。

  • PS-SMART算法会引入随机性。例如,data_sample_ratiofea_sample_ratio表示的数据和特征采样、算法使用的直方图近似优化及局部Sketch归并为全局Sketch的顺序随机性。虽然多个Worker分布式执行时,树结构不同,但是从理论上可以保证模型效果相近。如果您在训练过程中,使用相同数据和参数,多次得到的结果不一致,属于正常现象。

  • 如果需要加速训练,可以增大计算核心数。因为PS-SMART算法需要所有服务器获得资源后,才能开始训练,所以集群忙碌时,申请较多资源会增加等待时间。

组件配置

您可以使用以下任意一种方式,配置PS-SMART回归组件参数。

方式一:可视化方式

Designer工作流页面配置组件参数。

页签

参数

描述

字段设置

是否稀疏格式

稀疏格式的KV之间使用空格分隔,keyvalue之间使用半角冒号(:)分隔。例如1:0.3 3:0.9

选择特征列

输入表中,用于训练的特征列。如果输入数据是Dense格式,则只能选择数值(BIGINTDOUBLE)类型。如果输入数据是Sparse KV格式,且keyvalue是数值类型,则只能选择STRING类型。

选择标签列

输入表的标签列,支持STRING及数值类型。如果是内部存储,则仅支持数值类型。例如二分类中的01

选择权重列

列可以对每行样本进行加权,支持数值类型。

参数设置

目标函数类型

支持以下类型:

  • Linear regression(默认值)

  • Logistic regression

  • Poisson regression

  • Gamma regression

  • Tweedie regression

Tweedie分布指数

仅目标函数类型选择Tweedie regression时,支持配置该参数。表示Tweedie分布的方差和均值关系指数。

评估指标类型

支持以下类型:

  • rooted mean square error

  • mean absolute error

  • negative loglikelihood for logistic regression

  • negative loglikelihood for poisson regression

  • residual deviance for gamma regression

  • negative log-likelihood for gamma regression

  • negative log-likelihood for Tweedie regression

树数量

需要配置为树数量,正整数,树数量和训练时间成正比。

树最大深度

默认值为5,即最多32个叶子节点。

数据采样比例

构建每棵树时,采样部分数据进行学习,构建弱学习器,从而加快训练。

特征采样比例

构建每棵树时,采样部分特征进行学习,构建弱学习器,从而加快训练。

L1惩罚项系数

控制叶子节点大小。该参数值越大,叶子节点规模分布越均匀。如果过拟合,则增大该参数值。

L2惩罚项系数

控制叶子节点大小。该参数值越大,叶子节点规模分布越均匀。如果过拟合,则增大该参数值。

学习速率

取值范围为(0,1)

近似Sketch精度

构造Sketch的切割分位点阈值。该参数值越小,获得的桶越多。一般使用默认值0.03,无需手动配置。

最小分裂损失变化

分裂节点所需要的最小损失变化。该参数值越大,分裂越保守。

特征数量

特征数量或最大特征ID。如果估计使用资源时,未配置该参数,则系统会启动SQL任务自动计算。

全局偏置项

所有样本的初始预测值。

随机数产生器种子

随机数种子,整型。

特征重要性类型

支持以下类型:

  • 模型中,该特征做为分裂特征的次数

  • 模型中,该特征带来的信息增益(默认值)

  • 模型中,该特征在分裂节点覆盖的样本数

执行调优

核心数

默认为系统自动分配。

每个核的内存大小

单个核心使用的内存,单位为MB。通常无需手动配置,系统会自动分配。

方式二:PAI命令方式

使用PAI命令方式,配置该组件参数。您可以使用SQL脚本组件进行PAI命令调用,详情请参见SQL脚本

#训练。
PAI -name ps_smart
    -project algo_public
    -DinputTableName="smart_regression_input"
    -DmodelName="xlab_m_pai_ps_smart_bi_545859_v0"
    -DoutputTableName="pai_temp_24515_545859_2"
    -DoutputImportanceTableName="pai_temp_24515_545859_3"
    -DlabelColName="label"
    -DfeatureColNames="features"
    -DenableSparse="true"
    -Dobjective="reg:linear"
    -Dmetric="rmse"
    -DfeatureImportanceType="gain"
    -DtreeCount="5"
    -DmaxDepth="5"
    -Dshrinkage="0.3"
    -Dl2="1.0"
    -Dl1="0"
    -Dlifecycle="3"
    -DsketchEps="0.03"
    -DsampleRatio="1.0"
    -DfeatureRatio="1.0"
    -DbaseScore="0.5"
    -DminSplitLoss="0"
#预测。
PAI -name prediction
    -project algo_public
    -DinputTableName="smart_regression_input";
    -DmodelName="xlab_m_pai_ps_smart_bi_545859_v0"
    -DoutputTableName="pai_temp_24515_545860_1"
    -DfeatureColNames="features"
    -DappendColNames="label,features"
    -DenableSparse="true"
    -Dlifecycle="28"

模块

参数

是否必选

描述

默认值

数据参数

featureColNames

输入表中,用于训练的特征列。如果输入表是Dense格式,则只能选择数值(BIGINTDOUBLE)类型。如果输入表是Sparse KV格式,且KV格式中keyvalue是数值类型,则只能选择STRING类型。

labelColName

输入表的标签列,支持STRING及数值类型。如果是内部存储,则仅支持数值类型。例如二分类中的01

weightCol

列可以对每行样本进行加权,支持数值类型。

enableSparse

是否为稀疏格式,取值范围为{true,false}。稀疏格式的KV之间使用空格分隔,keyvalue之间使用半角冒号(:)分隔。例如1:0.3 3:0.9

false

inputTableName

输入表的名称。

modelName

输出的模型名称。

outputImportanceTableName

输出特征重要性的表名。

inputTablePartitions

格式为ds=1/pt=1

outputTableName

输出至MaxCompute的表,二进制格式。

lifecycle

输出表的生命周期,单位为天。

3

算法参数

objective

目标函数类型。支持以下类型:

  • reg:linear:Linear Regression

  • reg:logistic:Logistic Regression

  • count:poisson:Poisson Regression

  • reg:gamma:Gamma Regression

  • reg:tweedie:Tweedie Regression

reg:linear

metric

训练集的评估指标类型,输出在logview文件coordinator区域的stdout。支持以下类型:

  • rmse:对应可视化方式的rooted mean square error类型。

  • mae:对应可视化方式中的mean absolute error类型。

  • logistic-nloglik:对应可视化方式中的negative loglikelihood for logistic regression类型。

  • poisson-nloglik:对应可视化方式中的negative loglikelihood for poisson regression类型。

  • gamma-deviance:对应可视化方式中的residual deviance for gamma regression类型。

  • gamma-nloglik:对应可视化方式中的negative log-likelihood for gamma regression类型。

  • tweedie-nloglik:对应可视化方式中的negative log-likelihood for Tweedie regression类型。

treeCount

树数量,与训练时间成正比。

1

maxDepth

树的最大深度,取值范围为1~20。

5

sampleRatio

数据采样比例,取值范围为(0,1]。如果取值为1.0,则表示不采样。

1.0

featureRatio

特征采样比例,取值范围为(0,1]。如果取值为1.0,则表示不采样。

1.0

l1

L1惩罚项系数。该参数值越大,叶子节点分布越均匀。如果过拟合,则增大该参数值。

0

l2

L2惩罚项系数。该参数值越大,叶子节点分布越均匀。如果过拟合,则增大该参数值。

1.0

shrinkage

学习速率,取值范围为(0,1)

0.3

sketchEps

构造Sketch的切割分位点阈值,桶数为O(1.0/sketchEps)。该参数值越小,获得的桶越多。一般使用默认值,无需手动配置。取值范围为(0,1)

0.03

minSplitLoss

分裂节点所需要的最小损失变化。该参数值越大,分裂越保守。

0

featureNum

特征数量或最大特征ID。如果估计使用资源时,未配置该参数,则系统会启动SQL任务自动计算。

baseScore

所有样本的初始预测值。

0.5

randSeed

随机数种子,整型。

featureImportanceType

计算特征重要性的类型,包括:

  • weight:在模型中,该特征作为分裂特征的次数。

  • gain:在模型中,该特征带来的信息增益。

  • cover:在模型中,该特征在分裂节点覆盖的样本数。

gain

tweedieVarPower

Tweedie分布的方差和均值关系指数。

1.5

调优参数

coreNum

核心数量,该参数值越大,算法运行越快。

系统自动分配

memSizePerCore

每个核心使用的内存,单位为MB。

系统自动分配

示例

  1. 使用ODPS SQL节点执行如下SQL语句,生成输入数据(以KV格式数据为例)。

    drop table if exists smart_regression_input;
    create table smart_regression_input as
    select
    *
    from
    (
    select 2.0 as label, '1:0.55 2:-0.15 3:0.82 4:-0.99 5:0.17' as features
        union all
    select 1.0 as label, '1:-1.26 2:1.36 3:-0.13 4:-2.82 5:-0.41' as features
        union all
    select 1.0 as label, '1:-0.77 2:0.91 3:-0.23 4:-4.46 5:0.91' as features
        union all
    select 2.0 as label, '1:0.86 2:-0.22 3:-0.46 4:0.08 5:-0.60' as features
        union all
    select 1.0 as label, '1:-0.76 2:0.89 3:1.02 4:-0.78 5:-0.86' as features
        union all
    select 1.0 as label, '1:2.22 2:-0.46 3:0.49 4:0.31 5:-1.84' as features
        union all
    select 0.0 as label, '1:-1.21 2:0.09 3:0.23 4:2.04 5:0.30' as features
        union all
    select 1.0 as label, '1:2.17 2:-0.45 3:-1.22 4:-0.48 5:-1.41' as features
        union all
    select 0.0 as label, '1:-0.40 2:0.63 3:0.56 4:0.74 5:-1.44' as features
        union all
    select 1.0 as label, '1:0.17 2:0.49 3:-1.50 4:-2.20 5:-0.35' as features
    ) tmp;

    生成的数据如下。image

  2. 构建如下工作流,并运行组件,详情请参见算法建模image

    1. Designer左侧组件列表中,分别搜索读数据表组件、PS-SMART回归组件、预测组件、写数据表组件,并拖入右侧画布中。

    2. 配置组件参数。

      • 在画布中单击读数据表-1组件,在右侧表选择页签,配置表名smart_regression_input。

      • 在画布中单击PS-SMART回归-1组件,在右侧配置如下表中的参数,其余参数使用默认值。

        页签

        参数

        描述

        字段设置

        是否稀疏格式

        选中是否稀疏格式复选框。

        特征列

        选择features列。

        标签列

        选择label列。

        参数设置

        目标函数类别

        配置为Linear regression

        评估指标类型

        选择rooted mean square error

        树数量

        配置为5

      • 在画布中单击预测-1组件,在右侧配置如下表中的参数,其余参数使用默认值。

        页签

        参数

        描述

        字段设置

        特征列

        默认全选,多余列不影响预测结果。

        原样输出列

        选择为label列。

        稀疏矩阵

        选中稀疏矩阵复选框。

        keyvalue分隔符

        配置为半角冒号(:)。

        kv对间的分隔符

        配置为空格。

      • 在画布中单击写数据表-1组件,在右侧表选择页签,配置写入表表名smart_regression_output。

    3. 参数配置完成后,单击运行按钮image,运行工作流。

  3. 右键单击预测-1组件,在快捷菜单中,选择查看数据 > 预测结果输出,查看预测结果。image

  4. 右键单击PS-SMART回归-1组件,在快捷菜单,选择查看数据 > 输出特征重要性表,查看特征重要性。 image

    其中id列表示传入的特征序号。因为该示例的输入数据是KV格式,所以id列表示KV对中的key。该特性重要性表中仅有2个特性,表示树在分裂过程中仅使用了这两个特性,可以认为其他特性的特征重要性为0。value列表示特征重要性类型,默认为gain,即该特征对模型带来的信息增益之和。

PS-SMART模型部署说明

如果您需要将PS-SMART组件生成的模型部署为在线服务,您需要在该组件的下游接入通用模型导出组件,并按照PS系列组件的使用方式配置组件参数,详情请参见通用模型导出

组件运行成功后,您可以前往PAI EAS模型在线服务页面,部署模型服务,详情请参见服务部署:控制台

相关文档

  • 关于Designer组件更详细的内容介绍,请参见Designer概述

  • Designer预置了多种算法组件,你可以根据不同的使用场景选择合适的组件进行数据处理,详情请参见组件参考:所有组件汇总