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类型,则需要进行类型转换。例如,分类目标是Good/Medium/Bad字符串,需要转换为0/1/2

  • 如果数据是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。

选择权重列

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

参数设置

类别数

多分类的类别数量。如果类别数n,则标签列的取值为{0,1,2,...,n-1}

评估指标类型

支持multiclass negative log likelihoodmulticlass classification error类型。

树数量

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

树最大深度

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

数据采样比例

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

特征采样比例

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

L1惩罚项系数

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

L2惩罚项系数

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

学习速率

取值范围为(0,1)

近似Sketch精度

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

最小分裂损失变化

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

特征数量

特征数量或最大特征ID。如果需要估计使用资源,则必须手动配置该参数。

全局偏置项

所有样本的初始预测值。

随机数产生器种子

随机数种子,整型。

特征重要性类型

支持模型中,该特征做为分裂特征的次数模型中,该特征带来的信息增益模型中,该特征在分裂节点覆盖的样本数类型。

执行调优

核心数

默认为系统自动分配。

每个核的内存大小

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

方式二:PAI命令方式

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

#训练。
PAI -name ps_smart
    -project algo_public
    -DinputTableName="smart_multiclass_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="multi:softprob"
    -Dmetric="mlogloss"
    -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_multiclass_input";
    -DmodelName="xlab_m_pai_ps_smart_bi_545859_v0"
    -DoutputTableName="pai_temp_24515_545860_1"
    -DfeatureColNames="features"
    -DappendColNames="label,features"
    -DenableSparse="true"
    -DkvDelimiter=":"
    -Dlifecycle="28"

模块

参数

是否必选

描述

默认值

数据参数

featureColNames

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

labelColName

输入表的标签列,支持STRING及数值类型。如果是内部存储,则仅支持数值类型。例如多分类的{0,1,2,…,n-1},其中n表示类别数量。

weightCol

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

enableSparse

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

false

inputTableName

输入表的名称。

modelName

输出的模型名称。

outputImportanceTableName

输出特征重要性的表名。

inputTablePartitions

格式为ds=1/pt=1

outputTableName

输出至MaxCompute的表,二进制格式,不支持读取,只能通过SMART的预测组件获取。

lifecycle

输出表的生命周期。

3

算法参数

classNum

多分类的类别数量。如果类别数量为n,则标签列取值为{0,1,2,...,n-1}

objective

目标函数类型。如果进行多分类训练,则选择multi:softprob

metric

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

  • mlogloss:对应可视化方式的multiclass negative log likelihood类型。

  • merror:对应可视化方式中的multiclass classification error类型。

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。如果需要估计使用资源,则必须手动配置该参数。

baseScore

所有样本的初始预测值。

0.5

randSeed

随机数种子,整型。

featureImportanceType

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

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

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

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

gain

调优参数

coreNum

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

系统自动分配

memSizePerCore

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

系统自动分配

示例

  1. 使用开发ODPS SQL任务创建表smart_multiclass_input。以KV格式数据为例,命令如下。

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

    生成的数据如下。PS-smart输入数据

  2. 构建如下工作流,详情请参见算法建模image

  3. 配置组件参数。

    1. 单击读数据表-1组件,在右侧表选择页签中,配置表名smart_multiclass_input。

    2. 配置PS-SMART多分类-1组件的参数(配置如下表格中的参数,其余参数使用默认值)。

      页签

      参数

      描述

      字段设置

      特征列

      选择features列。

      标签列

      选择label列。

      是否稀疏格式

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

      参数设置

      类别数

      输入3

      评估指标类型

      选择multiclass negative log likelihood

      树数量

      输入5

    3. 配置预测-1组件的参数(配置如下表格中的参数,其余参数使用默认值)。

      页签

      参数

      描述

      字段设置

      特征列

      选择features列。

      原样输出列

      选择label列和features列。

      稀疏矩阵

      选中稀疏矩阵复选框。

      keyvalue分隔符

      输入半角冒号(:)。

      kv对间的分隔符

      使用空格作为分隔符,留空即可。

    4. 单击写数据表-1组件,在右侧表选择页签中,配置写入表表名smart_multiclass_output。

  4. 单击画布中的运行按钮image,运行工作流。

  5. 工作流执行成功后,右键单击预测-1组件,在快捷菜单中,选择查看数据 > 预测结果输出,查看统一预测组件的预测结果。image其中:

    • prediction_detail列中的012表示多分类的类别。

    • predict_result列表示预测的结果类别。

    • predict_score列表示预测为predict_result类别的概率。

  6. 右键单击PS-SMART多分类-1组件,在快捷菜单中,选择查看数据 > 输出特征重要性表,查看特征重要性。

    image其中:

    • id列表示传入的特征序号。因为该示例的输入数据是KV格式,所以id列表示KV对中的key

    • value列表示特征重要性类型,默认为gain,即该特征对模型带来的信息增益之和。

PS-SMART模型部署说明

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

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