本文为您介绍PAI-Studio提供的二分类算法,包括线性支持向量机、逻辑回归二分类、GBDT二分类、PS-SMART二分类及PS逻辑回归二分类。

线性支持向量机

支持向量机SVM(Support Vector Machine)是基于统计学习理论的一种机器学习方法,通过寻求结构风险最小化,提高学习机泛化能力,从而实现经验风险和置信范围最小化。该线性支持向量机算法不通过核函数方式实现,具体实现理论请参见算法原理中的Trust Region Method for L2-SVM部分。该算法仅支持二分类场景。

您可以通过以下任意一种方式,配置线性支持向量机组件参数:
  • 可视化方式
    页签 参数 描述
    字段设置 特征列 输入列,支持BIGINT和DOUBLE类型。
    标签列 支持BIGINT、DOUBLE及STRING类型。
    参数设置 正样本的标签值 目标基准值。如果未指定,则系统随机选定。如果正负例样本差异大,建议手动指定。
    正例惩罚因子 正例权重值。默认值为1.0,取值范围为(0, +∞)
    负例惩罚因子 负例权重值。默认值为1.0,取值范围为(0, +∞)
    收敛系数 收敛误差。默认值为0.001,取值范围为(0, 1)
    执行调优 计算的核心数 如果未配置,则系统自动分配。
    每个核心的内存 如果未配置,则系统自动分配。单位为MB。
  • PAI命令方式
    PAI -name LinearSVM -project algo_public
        -DinputTableName="bank_data"
        -DmodelName="xlab_m_LinearSVM_6143"
        -DfeatureColNames="pdays,emp_var_rate,cons_conf_idx"
        -DlabelColName="y"
        -DpositiveLabel="0";
        -DpositiveCost="1.0"
        -DnegativeCost="1.0"
        -Depsilon="0.001"
    参数名称 是否必选 描述 默认值
    inputTableName 输入表的名称。
    inputTableParitions 输入表中,参与训练的分区。系统支持以下格式:
    • Partition_name=value
    • name1=value1/name2=value2:多级分区
    说明 指定多个分区时,分区之间使用英文逗号(,)分隔。
    输入表的所有分区
    modelName 输出的模型名称。
    featureColNames 输入表中,用于训练的特征列名。
    labelColName 输入表中,标签列的名称。
    positiveLabel 正例的值。 label取值中,随机选择一个。
    positiveCost 正例权重值,即正例惩罚因子。取值范围为(0, +∞) 1.0
    negativeCost 负例权重值,即负例惩罚因子。取值范围为(0, +∞) 1.0
    epsilon 收敛系数,取值范围为(0,1) 0.001
    enableSparse 输入数据是否为稀疏格式,取值范围为{ture,false} false
    itemDelimiter 当输入表数据为稀疏格式时,KV对之间的分隔符。 英文逗号(,)
    kvDelimiter 当输入表数据为稀疏格式时,keyvalue之间的分隔符。 英文冒号(:)
    coreNum 计算的核心数,取值范围为正整数。 系统自动分配
    memSizePerCore 每个核心的内存,取值范围为1 MB~65536 MB。 系统自动分配

线性支持向量机示例

  1. 导入如下训练数据。
    id y f0 f1 f2 f3 f4 f5 f6 f7
    1 -1 -0.294118 0.487437 0.180328 -0.292929 -1 0.00149028 -0.53117 -0.0333333
    2 +1 -0.882353 -0.145729 0.0819672 -0.414141 -1 -0.207153 -0.766866 -0.666667
    3 -1 -0.0588235 0.839196 0.0491803 -1 -1 -0.305514 -0.492741 -0.633333
    4 +1 -0.882353 -0.105528 0.0819672 -0.535354 -0.777778 -0.162444 -0.923997 -1
    5 -1 -1 0.376884 -0.344262 -0.292929 -0.602837 0.28465 0.887276 -0.6
    6 +1 -0.411765 0.165829 0.213115 -1 -1 -0.23696 -0.894962 -0.7
    7 -1 -0.647059 -0.21608 -0.180328 -0.353535 -0.791962 -0.0760059 -0.854825 -0.833333
    8 +1 0.176471 0.155779 -1 -1 -1 0.052161 -0.952178 -0.733333
    9 -1 -0.764706 0.979899 0.147541 -0.0909091 0.283688 -0.0909091 -0.931682 0.0666667
    10 -1 -0.0588235 0.256281 0.57377 -1 -1 -1 -0.868488 0.1
  2. 导入如下测试数据。
    id y f0 f1 f2 f3 f4 f5 f6 f7
    1 +1 -0.882353 0.0854271 0.442623 -0.616162 -1 -0.19225 -0.725021 -0.9
    2 +1 -0.294118 -0.0351759 -1 -1 -1 -0.293592 -0.904355 -0.766667
    3 +1 -0.882353 0.246231 0.213115 -0.272727 -1 -0.171386 -0.981213 -0.7
    4 -1 -0.176471 0.507538 0.278689 -0.414141 -0.702128 0.0491804 -0.475662 0.1
    5 -1 -0.529412 0.839196 -1 -1 -1 -0.153502 -0.885568 -0.5
    6 +1 -0.882353 0.246231 -0.0163934 -0.353535 -1 0.0670641 -0.627669 -1
    7 -1 -0.882353 0.819095 0.278689 -0.151515 -0.307329 0.19225 0.00768574 -0.966667
    8 +1 -0.882353 -0.0753769 0.0163934 -0.494949 -0.903073 -0.418778 -0.654996 -0.866667
    9 +1 -1 0.527638 0.344262 -0.212121 -0.356974 0.23696 -0.836038 -0.8
    10 +1 -0.882353 0.115578 0.0163934 -0.737374 -0.56974 -0.28465 -0.948762 -0.933333
  3. 创建如下实验,详情请参见算法建模线性支持向量机实验
  4. 配置线性支持向量机组件的参数(配置如下表格中的参数,其余参数使用默认值)。
    页签 参数 描述
    字段设置 特征列 选择f0f1f2f3f4f5f6f7f8列。
    标签列 选择y列。
  5. 运行实验,查看预测结果。预测结果

逻辑回归二分类

逻辑回归二分类组件支持稀疏及稠密数据格式。PAI-Studio支持通过可视化或PAI命令的方式,配置该组件参数:
  • 可视化方式
    页签 参数 描述
    字段设置 训练特征列 输入数据源中,用于训练的特征列。支持DOUBLE及BIGINT类型。
    说明 特征数量不能超过两千万。
    目标列 输入数据源中,目标列名称。
    正类值 无。
    是否稀疏数据 输入数据是否为稀疏格式。
    参数设置 正则项 支持NoneL1L2类型。
    最大迭代次数 默认值为100。
    正则系数 如果 正则项None,则该参数失效。
    最小收敛误差 默认值为0.000001。
    执行调优 核数目 系统自动分配。
    每个核内存数 系统自动分配。
  • PAI命令方式
    PAI -name logisticregression_binary
        -project algo_public
        -DmodelName="xlab_m_logistic_regression_6096"
        -DregularizedLevel="1"
        -DmaxIter="100"
        -DregularizedType="l1"
        -Depsilon="0.000001"
        -DlabelColName="y"
        -DfeatureColNames="pdays,emp_var_rate"
        -DgoodValue="1"
        -DinputTableName="bank_data"
    参数名称 是否必选 参数描述 默认值
    inputTableName 输入表的表名。
    featureColNames 输入表中,用于训练的特征列名。
    说明 特征数量不能超过两千万。
    所有数值列
    labelColName 输入表的标签列名。
    inputTablePartitions 输入表中,参与训练的分区。系统支持的格式包括:
    • partition_name=value
    • name1=value1/name2=value2:多级分区
    说明 指定多个分区时,分区间使用英文逗号(,)分隔。
    全表
    modelName 输出的模型名。
    regularizedType 正则化类型,取值范围为{‘l1’,’l2’,’None’} l1
    regularizedLevel 正则化系数。如果 regularizedTypeNone,则该参数失效。 1.0
    maxIter L-BFGS的最大迭代次数。 100
    epsilon 收敛误差。该参数是L-BFGS算法的终止条件,即两次迭代的log-likelihood之差小于该值,迭代终止。 1.0e-06
    goodValue 目标基准值。二分类时,指定训练系数针对的 label值。如果为空,则系统随机分配。
    enableSparse 输入数据是否为稀疏格式,取值范围为{true,false} false
    itemDelimiter 输入表数据为稀疏格式时,KV对之间的分隔符。 英文逗号(,)
    kvDelimiter 输入表数据为稀疏格式时,keyvalue之间的分隔符。 英文冒号(:)
    coreNum 核心数量。 系统自动分配
    memSizePerCore 单个核心使用的内存数,单位为MB。 系统自动分配
    PAI使用KV格式表示稀疏数据,如下表所示。其中itemDelimiter表示KV对之间的分隔符,kvDelimiter表示keyvalue之间的分隔符。
    key_value
    1:100,4:200,5:300
    1:10,2:20,3:30
    说明 KV格式使用索引(从0开始)表示key。如果使用字符表示key,则系统报错。

逻辑回归二分类示例

  1. 使用SQL语句,生成训练数据。
    drop table if exists lr_test_input;
    create table lr_test_input
    as
    select
        *
    from
    (
    select
            cast(1 as double) as f0,
            cast(0 as double) as f1,
            cast(0 as double) as f2,
            cast(0 as double) as f3,
            cast(0 as bigint) as label
        from dual
        union all
            select
                cast(0 as double) as f0,
                cast(1 as double) as f1,
                cast(0 as double) as f2,
                cast(0 as double) as f3,
                cast(0 as bigint) as label
        from dual
        union all
            select
                cast(0 as double) as f0,
                cast(0 as double) as f1,
                cast(1 as double) as f2,
                cast(0 as double) as f3,
                cast(1 as bigint) as label
        from dual
        union all
            select
                cast(0 as double) as f0,
                cast(0 as double) as f1,
                cast(0 as double) as f2,
                cast(1 as double) as f3,
                cast(1 as bigint) as label
        from dual
        union all
            select
                cast(1 as double) as f0,
                cast(0 as double) as f1,
                cast(0 as double) as f2,
                cast(0 as double) as f3,
                cast(0 as bigint) as label
        from dual
        union all
            select
                cast(0 as double) as f0,
                cast(1 as double) as f1,
                cast(0 as double) as f2,
                cast(0 as double) as f3,
                cast(0 as bigint) as label
        from dual
    ) a;
    生成的训练数据表lr_test_input如下。
    f0 f1 f2 f3 label
    1.0 0.0 0.0 0.0 0
    0.0 0.0 1.0 0.0 1
    0.0 0.0 0.0 1.0 1
    0.0 1.0 0.0 0.0 0
    1.0 0.0 0.0 0.0 0
    0.0 1.0 0.0 0.0 0
  2. 使用PAI命令,提交逻辑回归二分类组件的训练参数。
    drop offlinemodel if exists lr_test_model;
    PAI -name logisticregression_binary
        -project algo_public
        -DmodelName="lr_test_model"
        -DitemDelimiter=","
        -DregularizedLevel="1"
        -DmaxIter="100"
        -DregularizedType="None"
        -Depsilon="0.000001"
        -DkvDelimiter=":"
        -DlabelColName="label"
        -DfeatureColNames="f0,f1,f2,f3"
        -DenableSparse="false"
        -DgoodValue="1"
        -DinputTableName="lr_test_input";
  3. 使用PAI命令,提交预测组件参数。
    drop table if exists lr_test_prediction_result;
    PAI -name prediction
        -project algo_public
        -DdetailColName="prediction_detail"
        -DmodelName="lr_test_model"
        -DitemDelimiter=","
        -DresultColName="prediction_result"
        -Dlifecycle="28"
        -DoutputTableName="lr_test_prediction_result"
        -DscoreColName="prediction_score"
        -DkvDelimiter=":"
        -DinputTableName="lr_test_input"
        -DenableSparse="false"
        -DappendColNames="label";
  4. 查看预测结果表lr_test_prediction_result
    label prediction_result prediction_score prediction_detail
    0 0 0.9999998793434426 {“0”: 0.9999998793434426, “1”: 1.206565574533681e-07}
    1 1 0.999999799574135 {“0”: 2.004258650156743e-07, “1”: 0.999999799574135}
    1 1 0.999999799574135 {“0”: 2.004258650156743e-07, “1”: 0.999999799574135}
    0 0 0.9999998793434426 {“0”: 0.9999998793434426, “1”: 1.206565574533681e-07}
    0 0 0.9999998793434426 {“0”: 0.9999998793434426, “1”: 1.206565574533681e-07}
    0 0 0.9999998793434426 {“0”: 0.9999998793434426, “1”: 1.206565574533681e-07}

GBDT二分类

GBDT(Gradient Boosting Decesion Tree)二分类算法的原理是设置阈值,如果特征值大于阈值,则为正例,反之为负例。

PAI-Studio支持通过可视化或PAI命令的方式,配置该组件参数:
  • 可视化方式
    页签 参数 描述
    字段设置 选择特征列 输入数据源中,参与训练的特征列。支持DOUBLE及BIGINT类型。
    说明 特征列数量不能超过800。
    选择标签列 仅支持BIGINT类型。
    选择分组列 支持DOUBLE及BIGINT类型,默认将全表作为一组。
    参数设置 metric类型 支持NDCGDCG类型。
    树的数目 取值范围为1~10000。
    学习速率 取值范围为(0,1)
    训练采集样本比例 取值范围为(0,1)
    训练采集特性比例 取值范围为(0,1)
    最大叶子数 取值范围为1~1000。
    测试数据比例 取值范围为[0,1)
    树最大深度 取值范围为1~100。
    叶子点最少样本数 取值范围为1~1000。
    随机数产生器种子 取值范围为[0,10]
    一个特征分裂的最大数量 取值范围为1~1000。
    执行调优 核数目 系统根据输入数据量,自动分配训练的实例数量。
    内存 系统根据输入数据量,自动分配内存。取值范围为1024 MB~64*1024 MB。
  • PAI命令方式
    PAI -name gbdt_lr
        -project algo_public
        -DfeatureSplitValueMaxSize="500"
        -DrandSeed="0"
        -Dshrinkage="0.5"
        -DmaxLeafCount="32"
        -DlabelColName="y"
        -DinputTableName="bank_data_partition"
        -DminLeafSampleCount="500"
        -DgroupIDColName="nr_employed"
        -DsampleRatio="0.6"
        -DmaxDepth="11"
        -DmodelName="xlab_m_GBDT_LR_21208"
        -DmetricType="2"
        -DfeatureRatio="0.6"
        -DinputTablePartitions="pt=20150501"
        -DtestRatio="0.0"
        -DfeatureColNames="age,previous,cons_conf_idx,euribor3m"
        -DtreeCount="500"
    参数 是否必选 描述 默认值
    inputTableName 输入表的名称。
    featureColNames 输入表中,用于训练的特征列名。 所有数值列
    labelColName 输入表中的标签列名。
    inputTablePartitions 输入表中,参与训练的分区。支持的格式包括:
    • Partition_name=value
    • name1=value1/name2=value2:多级分区
    说明 如果指定多个分区,则使用英文逗号(,)分隔。
    所有分区
    modelName 输出的模型名称。
    outputImportanceTableName 输出特征重要性的表名。
    groupIDColName 数据分组列。 全表
    lossType 损失函数包括以下类型:
    • 0:GBRANK
    • 1:LAMBDAMART_DCG
    • 2:LAMBDAMART_NDCG
    • 3:LEAST_SQUARE
    • 4:LOG_LIKELIHOOD
    0
    metricType Metric包括以下类型:
    • 0:NDCG(Normalized Discounted Cumulative Gain)
    • 1:DCG(Discounted Cumulative Gain)
    • 2:AUC,仅适用于label取值为0/1的场景
    0
    treeCount 树数量,取值范围为1~10000。 500
    shrinkage 学习速率,取值范围为(0,1) 0.05
    maxLeafCount 最大叶子数,取值范围为1~1000。 32
    maxDepth 树的最大深度,取值范围为1~100。 10
    minLeafSampleCount 叶子节点容纳的最少样本数,取值范围为1~1000。 500
    sampleRatio 训练采集的样本比例,取值范围为(0,1) 0.6
    featureRatio 训练采集的特征比例,取值范围为(0,1) 0.6
    tau GBRank Loss中的Tau参数,取值范围为[0,1] 0.6
    p GBRank Loss中的p参数,取值范围为[1,10] 1
    randSeed 随机数种子,取值范围为[0,10] 0
    newtonStep 使用Newton迭代法的开关,取值范围为{0,1} 1
    featureSplitValueMaxSize 特征分裂的最大数量,取值范围为1~1000。 500
    lifecycle 输出表的生命周期。
说明
  • GBDT与GBDT_LR默认的损失函数类型不同。因为GBDT默认为regression loss:mean squared error loss,GBDT_LR默认为logistic regression loss,所以GBDT_LR无需手动配置损失函数,系统会自动配置损失函数。
  • GBDT的特征列、标签列及分组列仅支持数值类型。
  • 连接ROC曲线时,预测组件需要选择目标基准值。

GBDT二分类示例

  1. 使用SQL语句,生成训练数据。
    drop table if exists gbdt_lr_test_input;
    create table gbdt_lr_test_input
    as
    select
        *
    from
    (
        select
            cast(1 as double) as f0,
            cast(0 as double) as f1,
            cast(0 as double) as f2,
            cast(0 as double) as f3,
            cast(0 as bigint) as label
        from dual
        union all
            select
                cast(0 as double) as f0,
                cast(1 as double) as f1,
                cast(0 as double) as f2,
                cast(0 as double) as f3,
                cast(0 as bigint) as label
        from dual
        union all
            select
                cast(0 as double) as f0,
                cast(0 as double) as f1,
                cast(1 as double) as f2,
                cast(0 as double) as f3,
                cast(1 as bigint) as label
        from dual
        union all
            select
                cast(0 as double) as f0,
                cast(0 as double) as f1,
                cast(0 as double) as f2,
                cast(1 as double) as f3,
                cast(1 as bigint) as label
        from dual
        union all
            select
                cast(1 as double) as f0,
                cast(0 as double) as f1,
                cast(0 as double) as f2,
                cast(0 as double) as f3,
                cast(0 as bigint) as label
        from dual
        union all
            select
                cast(0 as double) as f0,
                cast(1 as double) as f1,
                cast(0 as double) as f2,
                cast(0 as double) as f3,
                cast(0 as bigint) as label
        from dual
    ) a;
    生成的训练数据表gbdt_lr_test_input如下。
    f0 f1 f2 f3 label
    1.0 0.0 0.0 0.0 0
    0.0 0.0 1.0 0.0 1
    0.0 0.0 0.0 1.0 1
    0.0 1.0 0.0 0.0 0
    1.0 0.0 0.0 0.0 0
    0.0 1.0 0.0 0.0 0
  2. 使用PAI命令,提交GBDT二分类组件的训练参数。
    drop offlinemodel if exists gbdt_lr_test_model;
    PAI -name gbdt_lr
        -project algo_public
        -DfeatureSplitValueMaxSize="500"
        -DrandSeed="1"
        -Dshrinkage="1"
        -DmaxLeafCount="30"
        -DlabelColName="label"
        -DinputTableName="gbdt_lr_test_input"
        -DminLeafSampleCount="1"
        -DsampleRatio="1"
        -DmaxDepth="10"
        -DmodelName="gbdt_lr_test_model"
        -DmetricType="0"
        -DfeatureRatio="1"
        -DtestRatio="0"
        -DfeatureColNames="f0,f1,f2,f3"
        -DtreeCount="5"
  3. 使用PAI命令,提交预测组件参数。
    drop table if exists gbdt_lr_test_prediction_result;
    PAI -name prediction
        -project algo_public
        -DdetailColName="prediction_detail"
        -DmodelName="gbdt_lr_test_model"
        -DitemDelimiter=","
        -DresultColName="prediction_result"
        -Dlifecycle="28"
        -DoutputTableName="gbdt_lr_test_prediction_result"
        -DscoreColName="prediction_score"
        -DkvDelimiter=":"
        -DinputTableName="gbdt_lr_test_input"
        -DenableSparse="false"
        -DappendColNames="label";
  4. 查看预测结果表gbdt_lr_test_prediction_result
    label prediction_result prediction_score prediction_detail
    0 0 0.9984308925552831 {“0”: 0.9984308925552831, “1”: 0.001569107444716943}
    0 0 0.9984308925552831 {“0”: 0.9984308925552831, “1”: 0.001569107444716943}
    1 1 0.9982721832240973 {“0”: 0.001727816775902724, “1”: 0.9982721832240973}
    1 1 0.9982721832240973 {“0”: 0.001727816775902724, “1”: 0.9982721832240973}
    0 0 0.9984308925552831 {“0”: 0.9984308925552831, “1”: 0.001569107444716943}
    0 0 0.9984308925552831 {“0”: 0.9984308925552831, “1”: 0.001569107444716943}

PS-SMART二分类

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

PAI-Studio支持通过可视化或PAI命令的方式,配置该组件参数:
  • 可视化方式
    页签 参数 描述
    字段设置 是否稀疏格式 稀疏格式的KV之间使用空格分隔,keyvalue之间使用英文冒号(:)分隔。例如1:0.3 3:0.9
    选择特征列 输入表中,用于训练的特征列。如果输入数据是Dense格式,则只能选择数值(BIGINT或DOUBLE)类型。如果输入数据是Sparse KV格式,且keyvalue是数值类型,则只能选择STRING类型。
    选择标签列 输入表的标签列,支持STRING及数值类型。如果是内部存储,则仅支持数值类型。例如二分类中的01。
    选择权重列 列可以对每行样本进行加权,支持数值类型。
    参数设置 评估指标类型 支持negative loglikelihood for logistic regressionbinary classiffication errorArea under curve for classification类型。
    树数量 训练数据量与树数量成正比。
    树最大深度 默认值为5,即最多32个叶子节点。
    数据采样比例 构建每棵树时,采样部分数据进行学习,构建弱学习器,从而加快训练。
    特征采样比例 构建每棵树时,采样部分特征进行学习,构建弱学习器,从而加快训练。
    L1惩罚项系数 控制叶子节点大小。该参数值越大,叶子节点规模分布越均匀。如果过拟合,则增大该参数值。
    L2惩罚项系数 控制叶子节点大小。该参数值越大,叶子节点规模分布越均匀。如果过拟合,则增大该参数值。
    学习速率 取值范围为(0,1)
    近似Sketch精度 构造Sketch的切割分位点阈值。该参数值越小,获得的桶越多。一般使用默认值0.03,无需手动配置。
    最小分裂损失变化 分裂节点所需要的最小损失变化。该参数值越大,分裂越保守。
    特征数量 特征数量或最大特征ID。如果估计使用资源时,未配置该参数,则系统会启动SQL任务自动计算。
    全局偏置项 所有样本的初始预测值。
    特征重要性类型 支持模型中,该特征做为分裂特征的次数模型中,该特征带来的信息增益模型中,该特征在分裂节点覆盖的样本数类型。
    执行调优 计算核心数 默认为系统自动分配。
    每个核内存大小 单个核心使用的内存,单位为MB。通常无需手动配置,系统会自动分配。
  • PAI命令方式
    #训练。
    PAI -name ps_smart
        -project algo_public
        -DinputTableName="smart_binary_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="f0,f1,f2,f3,f4,f5"
        -DenableSparse="false"
        -Dobjective="binary:logistic"
        -Dmetric="error"
        -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_binary_input";
        -DmodelName="xlab_m_pai_ps_smart_bi_545859_v0"
        -DoutputTableName="pai_temp_24515_545860_1"
        -DfeatureColNames="f0,f1,f2,f3,f4,f5"
        -DappendColNames="label,qid,f0,f1,f2,f3,f4,f5"
        -DenableSparse="false"
        -Dlifecycle="28"
    模块 参数 是否必选 描述 默认值
    数据参数 featureColNames 输入表中,用于训练的特征列。如果输入表是Dense格式,则只能选择数值(BIGINT或DOUBLE)类型。如果输入表是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的表,二进制格式,不支持读取,只能通过SMART的预测组件获取。
    lifecycle 输出表的生命周期。 3
    算法参数 objective 目标函数类型。如果进行二分类训练,则选择binary:logistic
    metric 训练集的评估指标类型,输出在Logview文件Coordinator区域的stdout。支持以下类型:
    • logloss:对应可视化方式的negative loglikelihood for logistic regression类型。
    • error:对应可视化方式中的binary classification error类型。
    • auc:对应可视化方式中的Area under curve for classification类型。
    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
    featureImportanceType 计算特征重要性的类型,包括:
    • weight:在模型中,该特征作为分裂特征的次数。
    • gain:在模型中,该特征带来的信息增益。
    • cover:在模型中,该特征在分裂节点覆盖的样本数。
    gain
    调优参数 coreNum 核心数量,该参数值越大,算法运行越快。 系统自动分配
    memSizePerCore 每个核心使用的内存,单位为MB。 系统自动分配

PS-SMART二分类示例

  1. 使用SQL语句,生成训练数据(以Dense格式数据为例)。
    drop table if exists smart_binary_input;
    create table smart_binary_input lifecycle 3 as
    select
    *
    from
    (
    select 0.72 as f0, 0.42 as f1, 0.55 as f2, -0.09 as f3, 1.79 as f4, -1.2 as f5, 0 as label from dual
    union all
    select 1.23 as f0, -0.33 as f1, -1.55 as f2, 0.92 as f3, -0.04 as f4, -0.1 as f5, 1 as label from dual
    union all
    select -0.2 as f0, -0.55 as f1, -1.28 as f2, 0.48 as f3, -1.7 as f4, 1.13 as f5, 1 as label from dual
    union all
    select 1.24 as f0, -0.68 as f1, 1.82 as f2, 1.57 as f3, 1.18 as f4, 0.2 as f5, 0 as label from dual
    union all
    select -0.85 as f0, 0.19 as f1, -0.06 as f2, -0.55 as f3, 0.31 as f4, 0.08 as f5, 1 as label from dual
    union all
    select 0.58 as f0, -1.39 as f1, 0.05 as f2, 2.18 as f3, -0.02 as f4, 1.71 as f5, 0 as label from dual
    union all
    select -0.48 as f0, 0.79 as f1, 2.52 as f2, -1.19 as f3, 0.9 as f4, -1.04 as f5, 1 as label from dual
    union all
    select 1.02 as f0, -0.88 as f1, 0.82 as f2, 1.82 as f3, 1.55 as f4, 0.53 as f5, 0 as label from dual
    union all
    select 1.19 as f0, -1.18 as f1, -1.1 as f2, 2.26 as f3, 1.22 as f4, 0.92 as f5, 0 as label from dual
    union all
    select -2.78 as f0, 2.33 as f1, 1.18 as f2, -4.5 as f3, -1.31 as f4, -1.8 as f5, 1 as label from dual
    ) tmp;
    生成的训练数据如下。PS-SMART二分类输入数据
  2. 创建如下实验,详情请参见算法建模PS-SMART二分类实验
  3. 配置PS-SMART二分类组件的参数(配置如下表格中的参数,其余参数使用默认值)。
    页签 参数 描述
    字段设置 特征列 选择f0f1f2f3f4、及f5列。
    标签列 选择label列。
    参数设置 评估指标类型 选择Area under curve for classification
    树数量 输入5
  4. 查看统一预测组件的预测结果。1其中prediction_detail列的1表示正例,0表示负例。
  5. 查看PS-SMART预测组件的预测结果。2其中:
    • prediction_score:表示预测正例的概率。如果该值大于0.5,则表示预测结果为正例,反之预测结果为负例。
    • leaf_index:表示预测的叶子节点编号,每个样本有N(树数量)个,每棵树对应一个数字,该数字表示样本落在这棵树叶子节点的编号。
    说明 PS-Smart预测组件需要一列string类型数据作为label,且该列不能为空或者NULL,可以将某特征列通过类型转换组件转换为string类型。
  6. 右键单击PS-SMART二分类组件,在快捷菜单,选择查看数据 > 查看输出桩3,查看特征重要性表。3其中:
    • id:表示传入的特征序号。因为该示例传入的特征为f0f1f2f3f4f5,所以id列的0表示f0特征列,id列的4表示f4特征列。如果输入数据是KV格式,则id列表示KV中的key
    • value:表示特征重要性类型,默认为gain,即该特征对模型带来的信息增益之和。
    • 该特性重要性表中仅有3个特性,表示树在分裂过程中仅使用了这三个特性,可以认为其他特性的特征重要性为0。
相关说明:
  • PS-SMART二分类组件的目标列仅支持数值类型,且0表示负例,1表示正例。如果MaxCompute表数据是STRING类型,则需要进行类型转换。例如,分类目标是Good/Bad字符串,需要转换为1/0
  • 如果数据是KV格式,则特征ID必须为正整数,特征值必须为实数。如果特征ID为字符串类型,则需要使用序列化组件进行序列化。如果特征值为类别型字符串,需要进行特征离散化等特征工程处理。
  • 虽然PS-SMART二分类组件支持数十万特征任务,但是消耗资源大且运行速度慢,可以使用GBDT类算法进行训练。GBDT类算法适合直接使用连续特征进行训练,除需要对类别特征进行One-Hot编码(筛除低频特征)以外,不建议对其他连续型数值特征进行离散化。
  • PS-SMART算法会引入随机性。例如,data_sample_ratiofea_sample_ratio表示的数据和特征采样、算法使用的直方图近似优化及局部Sketch归并为全局Sketch的顺序随机性。虽然多个worker分布式执行时,树结构不同,但是从理论上可以保证模型效果相近。如果您在训练过程中,使用相同数据和参数,多次得到的结果不一致,属于正常现象。
  • 如果需要加速训练,可以增大计算核心数。因为PS-SMART算法需要所有服务器获得资源后,才能开始训练,所以集群忙碌时,申请较多资源会增加等待时间。

PS逻辑回归二分类

数服务器PS(Parameter Server)致力于解决大规模的离线及在线训练任务,逻辑回归(Logistic Regression)是经典的二分类算法,广泛应用于广告及搜索场景。PS逻辑回归支持千亿样本、十亿特征的二分类训练任务。

PAI-Studio支持通过可视化或PAI命令的方式,配置该组件参数:
  • 可视化方式
    页签 参数 描述
    字段设置 选择特征列 输入数据源中,用于训练的特征列。如果输入数据为Dense格式,则支持DOUBLE及BIGINT类型。如果输入数据为Sparse KV格式,则仅支持STRING类型。
    说明 特征数量不能超过两千万。
    选择标签列 输入数据源中,标签列的名称。
    是否稀疏格式 如果是否稀疏格式true,则特征ID不能使用0,建议特征从1开始编号。
    参数设置 L1 weight L1正则化系数。该参数值越大,模型非零元素越少。如果过拟合,则增大该参数值。
    L2 weight L2正则化系数。该参数值越大,模型参数绝对值越小。如果过拟合,则增大该参数值。
    最大迭代次数 算法的最大迭代次数,0表示迭代次数无限制。
    最小收敛误差 优化算法的终止条件,通常取值为10次迭代Loss相对变化率的平均值。该参数值越小,算法执行时间越长。
    最大特征ID 最大的特征ID或特征维度,取值可以大于实际值。该参数值越大,内存占用越大。如果未配置该参数,则系统启动SQL任务自动计算。
    执行调优 核心数 核心数量。
    每个核的内存大小 每个核心的内存,单位为MB。
  • PAI命令方式
    #训练
    PAI -name ps_lr
        -project algo_public
        -DinputTableName="lm_test_input"
        -DmodelName="logistic_regression_model"
        -DlabelColName="label"
        -DfeatureColNames="f0,f1,f2,f3,f4,f5"
        -Dl1Weight=1.0
        -Dl2Weight=0.0
        -DmaxIter=100
        -Depsilon=1e-6
        -DenableSparse=false
    #预测
    drop table if exists logistic_regression_predict;
    PAI -name prediction
        -DmodelName="logistic_regression_model"
        -DoutputTableName="logistic_regression_predict"
        -DinputTableName="lm_test_input"
        -DappendColNames=label
        -DfeatureColNames="f0,f1,f2,f3,f4,f5"
        -DenableSparse=false
    参数名称 是否必选 参数描述 默认值
    inputTableName 输入表的表名。
    featureColNames 输入表中,用于训练的特征列。 如果输入数据为Dense格式,则支持DOUBLE及BIGINT类型。如果输入数据为Sparse KV格式,则仅支持STRING类型。
    说明 特征数量不能超过两千万。
    labelColName 输入表的标签列名,支持DOUBLE及BIGINT类型。
    inputTablePartitions 输入表中,参与训练的分区。系统支持的格式包括:
    • partition_name=value
    • name1=value1/name2=value2:多级分区
    说明 指定多个分区时,分区间使用英文逗号(,)分隔。
    全表
    modelName 输出的模型名。默认输出至OfflineModel。如果enableModelIofalse,则输出至MaxCompute。
    enableModelIo 是否输出至OfflineModel,取值范围为{true,false}。如果enableModelIofalse,则输出至MaxCompute。 true
    l1Weight L1正则化系数。该参数值越大,模型非零元素越少。如果过拟合,则增大该参数值。 1.0
    l2Weight L2正则化系数。该参数值越大,模型参数绝对值越小。如果过拟合,则增大该参数值。 0
    maxIter 算法的最大迭代次数。 100
    epsilon 算法终止条件。 1.0e-06
    modelSize 最大的特征ID或特征维度,取值可以大于实际值。该参数值越大,内存占用越大。如果未配置该参数,则系统启动SQL任务自动计算。 0
    enableSparse 输入数据是否为稀疏格式,取值范围为{true,false} false
    itemDelimiter 输入表数据为稀疏格式时,KV对之间的分隔符。 英文逗号(,)
    kvDelimiter 输入表数据为稀疏格式时,keyvalue之间的分隔符。 英文冒号(:)
    coreNum 核心数量。 系统自动分配
    memSizePerCore 单个核心使用的内存数,单位为MB。 系统自动分配

PS逻辑回归二分类示例

  1. 使用SQL语句,生成训练数据(以Dense格式数据为例)。
    drop table if exists lm_test_input;
    create table lm_test_input as
    select
    *
    from
    (
    select 0.72 as f0, 0.42 as f1, 0.55 as f2, -0.09 as f3, 1.79 as f4, -1.2 as f5, 0 as label from dual
    union all
    select 1.23 as f0, -0.33 as f1, -1.55 as f2, 0.92 as f3, -0.04 as f4, -0.1 as f5, 1 as label from dual
    union all
    select -0.2 as f0, -0.55 as f1, -1.28 as f2, 0.48 as f3, -1.7 as f4, 1.13 as f5, 1 as label from dual
    union all
    select 1.24 as f0, -0.68 as f1, 1.82 as f2, 1.57 as f3, 1.18 as f4, 0.2 as f5, 0 as label from dual
    union all
    select -0.85 as f0, 0.19 as f1, -0.06 as f2, -0.55 as f3, 0.31 as f4, 0.08 as f5, 1 as label from dual
    union all
    select 0.58 as f0, -1.39 as f1, 0.05 as f2, 2.18 as f3, -0.02 as f4, 1.71 as f5, 0 as label from dual
    union all
    select -0.48 as f0, 0.79 as f1, 2.52 as f2, -1.19 as f3, 0.9 as f4, -1.04 as f5, 1 as label from dual
    union all
    select 1.02 as f0, -0.88 as f1, 0.82 as f2, 1.82 as f3, 1.55 as f4, 0.53 as f5, 0 as label from dual
    union all
    select 1.19 as f0, -1.18 as f1, -1.1 as f2, 2.26 as f3, 1.22 as f4, 0.92 as f5, 0 as label from dual
    union all
    select -2.78 as f0, 2.33 as f1, 1.18 as f2, -4.5 as f3, -1.31 as f4, -1.8 as f5, 1 as label from dual
    ) tmp;
    生成的训练数据如下。PS逻辑回归二分类示例数据
  2. 构建如下实验,详情请参见算法建模PS逻辑回归二分类实验
  3. 配置PS逻辑回归二分类组件的参数(配置如下表格中的参数,其余参数使用默认值)。
    页签 参数 描述
    字段设置 选择特征列 选择f0f1f2f3f4f5列。
    选择标签列 选择label列。
    执行调优 核心数 输入3
    每个核的内存大小 输入1024
  4. 配置预测组件的参数(配置如下表格中的参数,其余参数使用默认值)。
    页签 参数 描述
    字段设置 特征列 选择f0f1f2f3f4f5列。
    原样输出列 选择f0f1f2f3f4f5label列。
  5. 运行实验,查看预测结果。PS逻辑回归二分类示例结果其中prediction_detail列的1表示正例,0表示负例。
相关说明:
  • PS逻辑回归二分类组件的目标列仅支持数值类型,且0表示负例,1表示正例。如果MaxCompute表数据是STRING类型,则需要进行类型转换。例如,分类目标是Good/Bad字符串,需要转换为1/0
  • 如果数据是KV格式,则特征ID必须为正整数,特征值必须为实数。如果特征ID为字符串类型,则需要使用序列化组件进行序列化。如果特征值为类别型字符串,需要进行特征离散化等特征工程处理。