参数服务器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_ratio及fea_sample_ratio表示的数据和特征采样、算法使用的直方图近似优化及局部Sketch归并为全局Sketch的顺序随机性。虽然多个Worker分布式执行时,树结构不同,但是从理论上可以保证模型效果相近。如果您在训练过程中,使用相同数据和参数,多次得到的结果不一致,属于正常现象。
-
如果需要加速训练,可以增大计算核心数。因为PS-SMART算法需要所有服务器获得资源后,才能开始训练,所以集群忙碌时,申请较多资源会增加等待时间。
注意事项
使用PS-SMART回归组件时,您需要注意以下事宜:
-
虽然PS-SMART回归组件支持数十万特征任务,但是消耗资源大且运行速度慢,可以使用GBDT类算法进行训练。GBDT类算法适合直接使用连续特征进行训练,除需要对类别特征进行One-Hot编码(筛除低频特征)外,不建议对其他连续型数值特征进行离散化。
-
PS-SMART算法会引入随机性。例如,data_sample_ratio及fea_sample_ratio表示的数据和特征采样、算法使用的直方图近似优化及局部Sketch归并为全局Sketch的顺序随机性。虽然多个Worker分布式执行时,树结构不同,但是从理论上可以保证模型效果相近。如果您在训练过程中,使用相同数据和参数,多次得到的结果不一致,属于正常现象。
-
如果需要加速训练,可以增大计算核心数。因为PS-SMART算法需要所有服务器获得资源后,才能开始训练,所以集群忙碌时,申请较多资源会增加等待时间。
组件配置
您可以使用以下任意一种方式,配置PS-SMART回归组件参数。
方式一:可视化方式
在Designer(原PAI-Studio)工作流页面配置组件参数。
页签 |
参数 |
描述 |
字段设置 |
是否稀疏格式 |
稀疏格式的KV之间使用空格分隔,key与value之间使用英文冒号(:)分隔。例如1:0.3 3:0.9。 |
选择特征列 |
输入表中,用于训练的特征列。如果输入数据是Dense格式,则只能选择数值(BIGINT或DOUBLE)类型。如果输入数据是Sparse KV格式,且key和value是数值类型,则只能选择STRING类型。 |
|
选择标签列 |
输入表的标签列,支持STRING及数值类型。如果是内部存储,则仅支持数值类型。例如二分类中的0和1。 |
|
选择权重列 |
列可以对每行样本进行加权,支持数值类型。 |
|
参数设置 |
目标函数类型 |
支持Linear regression、Logistic regression、Poisson regression、Gamma regression及Tweedie regression类型。 |
Tweedie分布指数 |
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格式,则只能选择数值(BIGINT或DOUBLE)类型。如果输入表是Sparse KV格式,且KV格式中key和value是数值类型,则只能选择STRING类型。 |
无 |
labelColName |
是 |
输入表的标签列,支持STRING及数值类型。如果是内部存储,则仅支持数值类型。例如二分类中的0和1。 |
无 |
|
weightCol |
否 |
列可以对每行样本进行加权,支持数值类型。 |
无 |
|
enableSparse |
否 |
是否为稀疏格式,取值范围为{true,false}。稀疏格式的KV之间使用空格分隔,key与value之间使用英文冒号(:)分隔。例如1:0.3 3:0.9。 |
false |
|
inputTableName |
是 |
输入表的名称。 |
无 |
|
modelName |
是 |
输出的模型名称。 |
无 |
|
outputImportanceTableName |
否 |
输出特征重要性的表名。 |
无 |
|
inputTablePartitions |
否 |
格式为ds=1/pt=1。 |
无 |
|
outputTableName |
否 |
输出至MaxCompute的表,二进制格式。 |
无 |
|
lifecycle |
否 |
输出表的生命周期,单位为天。 |
3 |
|
算法参数 |
objective |
是 |
目标函数类型。支持以下类型:
|
reg:linear |
metric |
否 |
训练集的评估指标类型,输出在logview文件coordinator区域的stdout。支持以下类型:
|
无 |
|
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 |
否 |
计算特征重要性的类型,包括:
|
gain |
|
tweedieVarPower |
否 |
Tweedie分布的方差和均值关系指数。 |
1.5 |
|
调优参数 |
coreNum |
否 |
核心数量,该参数值越大,算法运行越快。 |
系统自动分配 |
memSizePerCore |
否 |
每个核心使用的内存,单位为MB。 |
系统自动分配 |
示例
-
使用如下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 from dual union all select 1.0 as label, '1:-1.26 2:1.36 3:-0.13 4:-2.82 5:-0.41' as features from dual union all select 1.0 as label, '1:-0.77 2:0.91 3:-0.23 4:-4.46 5:0.91' as features from dual union all select 2.0 as label, '1:0.86 2:-0.22 3:-0.46 4:0.08 5:-0.60' as features from dual union all select 1.0 as label, '1:-0.76 2:0.89 3:1.02 4:-0.78 5:-0.86' as features from dual union all select 1.0 as label, '1:2.22 2:-0.46 3:0.49 4:0.31 5:-1.84' as features from dual union all select 0.0 as label, '1:-1.21 2:0.09 3:0.23 4:2.04 5:0.30' as features from dual union all select 1.0 as label, '1:2.17 2:-0.45 3:-1.22 4:-0.48 5:-1.41' as features from dual union all select 0.0 as label, '1:-0.40 2:0.63 3:0.56 4:0.74 5:-1.44' as features from dual union all select 1.0 as label, '1:0.17 2:0.49 3:-1.50 4:-2.20 5:-0.35' as features from dual ) tmp;
生成的数据如下。
-
构建实验,详情请参见算法建模。
-
配置PS-SMART回归组件的参数(配置如下表格中的参数,其余参数使用默认值)。
页签
参数
描述
字段设置
是否稀疏格式
选中是否稀疏格式复选框。
特征列
选择features列。
标签列
选择label列。
参数设置
目标函数类别
配置为Linear regression。
评估指标类型
选择rooted mean square error。
树数量
配置为5。
-
配置统一预测组件的参数(配置如下表格中的参数,其余参数使用默认值)。
页签
参数
描述
字段设置
特征列
默认全选,多余列不影响预测结果。
原样输出列
选择为label列。
稀疏矩阵
选中稀疏矩阵复选框。
key与value分隔符
配置为英文冒号(:)。
kv对间的分隔符
配置为空格或 。
-
配置PS-SMART预测组件的参数(配置如下表格中的参数,其余参数使用默认值)。
页签
参数
描述
字段设置
特征列
默认全选,多余列不影响预测结果。
原样输出列
选择label列。
稀疏矩阵
选中稀疏矩阵复选框。
key与value分隔符
配置为英文冒号(:)。
kv对间的分隔符
配置为空格或 。
-
运行实验,查看统一预测组件的预测结果。
-
查看PS-Smart预测组件的预测结果。
其中prediction_score列表示预测值,leaf_index列表示预测的叶子节点编号。
-
右键单击PS-SMART回归组件,在快捷菜单,选择查看数据 > 查看输出桩3,查看特征重要性。
其中id列表示传入的特征序号。因为该示例的输入数据是KV格式,所以id列表示KV对中的key。该特性重要性表中仅有2个特性,表示树在分裂过程中仅使用了这两个特性,可以认为其他特性的特征重要性为0。value列表示特征重要性类型,默认为gain,即该特征对模型带来的信息增益之和。
PS-SMART模型部署说明
如果您需要将PS-SMART组件生成的模型部署为在线服务,您需要在该组件的下游接入通用模型导出组件,并按照PS系列组件的使用方式配置组件参数,详情请参见通用模型导出。
组件运行成功后,您可以前往PAI EAS模型在线服务页面,部署模型服务,详情请参见服务部署:控制台。
内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家
阿里云企业补贴进行中: 马上申请
腾讯云限时活动1折起,即将结束: 马上收藏
同尘科技为腾讯云授权服务中心。
购买腾讯云产品享受折上折,更有现金返利:同意关联,立享优惠
转转请注明出处:https://www.yunxiaoer.com/162813.html