本文为您介绍PAI-Studio提供的多分类算法,包括PS-SMART多分类、K近邻、逻辑回归多分类、随机森林及朴素贝叶斯。

PS-SMART多分类

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

PAI-Studio支持通过可视化或PAI命令方式,配置PS-SMART多分类组件的参数:
  • 可视化方式
    页签 参数 描述
    字段设置 是否稀疏格式 稀疏格式的KV之间使用空格分隔,keyvalue之间使用英文冒号(:)分隔。例如1:0.3 3:0.9
    选择特征列 输入表中,用于训练的特征列。如果输入数据是Dense格式,则只能选择数值(BIGINT或DOUBLE)类型。如果输入数据是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 -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格式,则只能选择数值(BIGINT或DOUBLE)类型。如果输入表是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
    featureImportanceType 计算特征重要性的类型,包括:
    • weight:在模型中,该特征作为分裂特征的次数。
    • gain:在模型中,该特征带来的信息增益。
    • cover:在模型中,该特征在分裂节点覆盖的样本数。
    gain
    调优参数 coreNum 核心数量,该参数值越大,算法运行越快。 系统自动分配
    memSizePerCore 每个核心使用的内存,单位为MB。 系统自动分配

PS-SMART多分类示例

  1. 使用如下SQL语句,生成输入数据(以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 from dual
        union all
    select 1 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 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 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 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 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 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 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 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 as label, '1:0.17 2:0.49 3:-1.50 4:-2.20 5:-0.35' as features from dual
    ) tmp;
    生成的数据如下。PS-smart输入数据
  2. 构建实验,详情请参见算法建模ps-smart多分类实验
  3. 配置PS-SMART多分类组件的参数(配置如下表格中的参数,其余参数使用默认值)。
    页签 参数 描述
    字段设置 特征列 选择features列。
    标签列 选择label列。
    是否稀疏格式 选中是否稀疏格式复选框。
    参数设置 类别数 输入3
    评估指标类型 选择multiclass negative log likelihood
    树数量 输入5
  4. 配置统一预测组件的参数(配置如下表格中的参数,其余参数使用默认值)。
    页签 参数 描述
    字段设置 特征列 默认全选,多余列不影响预测结果。
    原样输出列 选择label列。
    稀疏矩阵 选中稀疏矩阵复选框。
    key与value分隔符 输入英文冒号(:)。
    kv对间的分隔符 输入\u0020
  5. 配置PS-SMART预测组件的参数(配置如下表格中的参数,其余参数使用默认值)。
    页签 参数 描述
    字段设置 特征列 默认全选,多余列不影响预测结果。
    原样输出列 选择label列。
    稀疏矩阵 选中稀疏矩阵复选框。
    key与value分隔符 输入英文冒号(:)。
    kv对间的分隔符 输入\u0020
  6. 运行实验,查看统一预测组件的预测结果。PS-SMART通用预测组件预测结果其中:
    • prediction_detail列中的012表示多分类的类别。
    • predict_result列表示预测的结果类别。
    • predict_score列表示预测为predict_result类别的概率。
  7. 查看PS-Smart预测组件的预测结果。PS-Smart预测组件的预测结果其中:
    • score_class_k列表示预测为第K类别的概率。
    • leaf_index列表示预测的叶子节点编号。如果树数量为N,类别数量为M,则每个样本的leaf_index取值为N*M个数。例如,该示例的leaf_index取值为5*3=15。每棵树对应一个数字,该数字表示样本落在这棵树叶子节点的编号。
  8. 右键单击PS-SMART多分类组件,在快捷菜单,选择查看数据 > 查看输出桩3,查看特征重要性。
    PS-SMART特征重要性其中:
    • id列表示传入的特征序号。因为该示例的输入数据是KV格式,所以id列表示KV对中的key
    • value列表示特征重要性类型,默认为gain,即该特征对模型带来的信息增益之和。
相关说明:
  • 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算法需要所有服务器获得资源后,才能开始训练,所以集群忙碌时,申请较多资源会增加等待时间。

K近邻

K近邻算法进行分类的原理是针对预测表的每行数据,从训练表中选择与其距离最近的K条记录,将这K条记录中类别数量最多的类,作为该行的类别。

PAI-Studio支持通过可视化或PAI命令方式,配置K近邻算法组件的参数:
  • 可视化方式
    页签 参数 描述
    字段设置 选择训练表特征列 用于训练的特征列。
    选择训练表的标签列 训练的目标列。
    选择预测表特征列 如果未配置该参数,则表示其与训练表特征列相同。
    产出表附加ID列 用于标识该列的身份,从而获得某列对应的预测值。系统默认使用预测表特征列,作为附加ID列。
    输入表数据是稀疏格式 使用KV格式表示稀疏数据。
    kv间的分隔符 默认为英文逗号(,)。
    key和value的分隔符 默认为英文冒号(:)。
    参数设置 近邻个数 默认值为100。
    执行调优 核心数 默认系统自动分配。
    内存数 默认系统自动分配。
  • PAI命令方式
    PAI -name knn
        -DtrainTableName=pai_knn_test_input
        -DtrainFeatureColNames=f0,f1
        -DtrainLabelColName=class
        -DpredictTableName=pai_knn_test_input
        -DpredictFeatureColNames=f0,f1
        -DoutputTableName=pai_knn_test_output
        -Dk=2;
    参数 是否必选 描述 默认值
    trainTableName 训练表的表名。
    trainFeatureColNames 训练表的特征列名。
    trainLabelColName 训练表的标签列名。
    trainTablePartitions 训练表中,参与训练的分区。 所有分区
    predictTableName 预测表的表名。
    outputTableName 输出表的表名。
    predictFeatureColNames 预测表的特征列名。 trainFeatureColNames相同
    predictTablePartitions 预测表中,参与预测的分区。 所有分区
    appendColNames 输出表中,附加预测表的列名。 predictFeatureColNames相同
    outputTablePartition 输出表的分区。 全表
    k 最近邻的数量。取值范围为1~1000。 100
    enableSparse 输入表数据是否为稀疏格式。取值范围为{true,false} false
    itemDelimiter 如果输入表数据为稀疏格式,则KV对之间的分隔符。 英文逗号(,)
    kvDelimiter 如果输入表数据为稀疏格式,则keyvalue之间的分隔符。 英文冒号(:)
    coreNum 节点数量。与memSizePerCore搭配使用,取值范围为1~20000。 系统自动计算
    memSizePerCore 单个节点的内存,取值范围为1024 MB~64*1024 MB。 系统自动计算
    lifecycle 输出表的生命周期。

K近邻示例

  1. 生成训练数据。
    create table pai_knn_test_input as
    select * from
    (
      select 1 as f0,2 as f1, 'good' as class from dual
      union all
      select 1 as f0,3 as f1, 'good' as class from dual
      union all
      select 1 as f0,4 as f1, 'bad' as class from dual
      union all
      select 0 as f0,3 as f1, 'good' as class from dual
      union all
      select 0 as f0,4 as f1, 'bad' as class from dual
    )tmp;
  2. 使用PAI命令,提交K近邻算法组件参数。
    pai -name knn
        -DtrainTableName=pai_knn_test_input
        -DtrainFeatureColNames=f0,f1
        -DtrainLabelColName=class
        -DpredictTableName=pai_knn_test_input
        -DpredictFeatureColNames=f0,f1
        -DoutputTableName=pai_knn_test_output
        -Dk=2;
  3. 查看训练结果。K近邻示例结果其中:
    • f0f1表示结果附件列。
    • prediction_result表示分类结果。
    • prediction_score表示分类结果对应的概率。
    • prediction_detail表示最近的K个分类及其对应的概率。

逻辑回归多分类

逻辑回归多分类组件支持稀疏及稠密数据格式。PAI-Studio支持通过可视化或PAI命令的方式,配置该组件参数:
  • 可视化方式
    页签 参数 描述
    字段设置 训练特征列 输入数据源中,用于训练的特征列。支持DOUBLE及BIGINT类型。
    说明 特征数量不能超过两千万。
    目标列 输入数据源中,目标列名称。
    是否稀疏数据 输入数据是否为稀疏格式。
    参数设置 正则项类型 支持L1L2None类型。
    最大迭代次数 默认值为100。
    正则系数 如果 正则项None,则该参数失效。
    最小收敛误差 默认值为0.000001。
  • PAI命令方式
    PAI -name logisticregression_multi
        -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
    enableSparse 输入数据是否为稀疏格式,取值范围为{true,false} false
    itemDelimiter 输入表数据为稀疏格式时,KV对之间的分隔符。 英文逗号(,)
    kvDelimiter 输入表数据为稀疏格式时,keyvalue之间的分隔符。 英文冒号(:)
    coreNum 核心数量。 系统自动分配
    memSizePerCore 单个核心使用的内存数,单位为MB。 系统自动分配

逻辑回归多分类示例

  1. 使用SQL语句,生成训练数据。
    drop table if exists multi_lr_test_input;
    create table multi_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(2 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
    ) a;
    生成的训练数据(multi_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 2
    0.0 0.0 0.0 1.0 1
    0.0 1.0 0.0 0.0 0
  2. 使用PAI命令,提交逻辑回归多分类算法组件参数。
    drop offlinemodel if exists multi_lr_test_model;
    PAI -name logisticregression_multi
        -project algo_public
        -DmodelName="multi_lr_test_model"
        -DitemDelimiter=","
        -DregularizedLevel="1"
        -DmaxIter="100"
        -DregularizedType="None"
        -Depsilon="0.000001"
        -DkvDelimiter=":"
        -DlabelColName="label"
        -DfeatureColNames="f0,f1,f2,f3"
        -DenableSparse="false"
        -DinputTableName="multi_lr_test_input";
  3. 使用PAI命令,提交预测组件参数。
    drop table if exists multi_lr_test_prediction_result;
    PAI -name prediction
        -project algo_public
        -DdetailColName="prediction_detail"
        -DmodelName="multi_lr_test_model"
        -DitemDelimiter=","
        -DresultColName="prediction_result"
        -Dlifecycle="28"
        -DoutputTableName="multi_lr_test_prediction_result"
        -DscoreColName="prediction_score"
        -DkvDelimiter=":"
        -DinputTableName="multi_lr_test_input"
        -DenableSparse="false"
        -DappendColNames="label";
  4. 查看输出结果(multi_lr_test_prediction_result表)。
    label prediction_result prediction_score prediction_detail
    0 0 0.9999997274902165 {“0”: 0.9999997274902165, “1”: 2.324679066261573e-07, “2”: 2.324679066261569e-07}
    0 0 0.9999997274902165 {“0”: 0.9999997274902165, “1”: 2.324679066261573e-07, “2”: 2.324679066261569e-07}
    2 2 0.9999999155958832 {“0”: 2.018833979850994e-07, “1”: 2.324679066261573e-07, “2”: 0.9999999155958832}
    1 1 0.9999999155958832 {“0”: 2.018833979850994e-07, “1”: 0.9999999155958832, “2”: 2.324679066261569e-07}

随机森林

随机森林是一个包括多决策树的分类器,其分类结果由单棵树输出类别的众数决定。PAI-Studio支持通过可视化或PAI命令的方式,配置该组件参数:
  • 可视化方式
    页签 参数 描述
    字段设置 选择特征列 默认为除标签列和权重列外的所有列。
    排除列 不参与训练的列,不能与选择特征列同时使用。
    强制转换列 解析规则如下:
    • STRING、BOOLEAN及DATETIME类型的列,解析为离散类型。
    • DOUBLE和BIGINT类型的列,解析为连续类型。
    说明 如果需要将BIGINT类型的列解析为CATEGORICAL,则必须使用forceCategorical参数指定类型。
    权重列的列名 列可以对每行样本进行加权,支持数值类型。
    标签列 输入表的标签列,支持STRING及数值类型。
    参数设置 森林中树的个数 取值范围为1~1000。
    单颗树的算法在森林中的位置 如果有N棵树,且algorithmTypes=[a,b],则:
    • [0,a)为ID3算法。
    • [a,b)为CART算法。
    • [b,n]为C4.5算法。
    例如,在一个拥有5棵树的森林中,如果[2,4]表示0,则1为ID3算法,2,3为CART算法,4为C4.5算法。如果输入None,则算法在森林中均分。
    单棵树随机特征数 取值范围为[1,N],N表示Feature数量。
    叶节点数据的最小个数 取值范围为正整数,默认值为2。
    叶节点数据个数占父节点的最小比例 取值范围为[0,1],默认值为0。
    单颗树的最大深度 取值范围为[1,+∞),默认值为无穷。
    单颗树输入的随机数据个数 取值范围为(1000,1000000],默认值为100000。
  • PAI命令方式
     PAI -name randomforests
         -project algo_public
         -DinputTableName="pai_rf_test_input"
         -DmodelName="pai_rf_test_model"
         -DforceCategorical="f1"
         -DlabelColName="class"
         -DfeatureColNames="f0,f1"
         -DmaxRecordSize="100000"
         -DminNumPer="0"
         -DminNumObj="2"
         -DtreeNum="3";
    参数 是否必选 描述 默认值
    inputTableName 输入表。
    inputTablePartitions 输入表中,参与训练的分区。支持以下格式:
    • Partition_name=value
    • name1=value1/name2=value2:多级格式
    说明 如果指定多个分区,则使用英文逗号(,)分隔。
    所有分区
    labelColName 输入表中,标签列的列名。
    modelName 输出的模型名。
    treeNum 森林中树的数量,取值范围为1~1000。 100
    excludedColNames 不参与训练的列,不能与featureColNames同时使用。
    weightColName 输入表中的权重列名。
    featureColNames 输入表中,用于训练的特征列名。 labelColNameweightColName外的所有列
    forceCategorical 解析规则如下:
    • STRING、BOOLEAN及DATETIME类型的列,解析为离散类型。
    • DOUBLE和BIGINT类型的列,解析为连续类型。
    说明 如果需要将BIGINT类型的列解析为CATEGORICAL,则必须使用forceCategorical参数指定类型。
    INT为连续类型
    algorithmTypes 单棵树的算法在森林中的位置。如果有N棵树,且algorithmTypes=[a,b],则:
    • [0,a)为ID3算法。
    • [a,b)为CART算法。
    • [b,n]为C4.5算法。
    例如,在一个拥有5棵树的森林中,[2,4]表示0,则1为ID3算法,2,3为CART算法,4为C4.5算法。如果输入None,则算法在森林中均分。
    算法在森林中均分
    randomColNum 生成单棵树时,每次分裂选择的随机特征数量。取值范围为[1,N],N表示Feature数量。 log 2N
    minNumObj 叶节点数据的最小个数,取值范围为正整数。 2
    minNumPer 叶节点数据个数占父节点的最小比例,取值范围为[0,1] 0.0
    maxTreeDeep 单颗树的最大深度,取值范围为[1,+∞) 无穷
    maxRecordSize 单棵树输入的随机数据个数,取值范围为(1000,1000000] 100000

随机森林示例

  1. 使用SQL语句,生成训练数据。
    create table pai_rf_test_input as
    select * from
    (
      select 1 as f0,2 as f1, "good" as class from dual
      union all
      select 1 as f0,3 as f1, "good" as class from dual
      union all
      select 1 as f0,4 as f1, "bad" as class from dual
      union all
      select 0 as f0,3 as f1, "good" as class from dual
      union all
      select 0 as f0,4 as f1, "bad" as class from dual
    )tmp;
  2. 使用PAI命令,提交随机森林算法组件参数。
    PAI -name randomforests
         -project algo_public
         -DinputTableName="pai_rf_test_input"
         -Dmodelbashame="pai_rf_test_model"
         -DforceCategorical="f1"
         -DlabelColName="class"
         -DfeatureColNames="f0,f1"
         -DmaxRecordSize="100000"
         -DminNumPer="0"
         -DminNumObj="2"
         -DtreeNum="3";
  3. 查看模型PMML(Predictive Model Markup Language)。
    <?xml version="1.0" encoding="utf-8"?
    <PMML xmlns="http://www.dmg.org/PMML-4_2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="4.2" xsi:schemaLocation="http://www.dmg.org/PMML-4_2 http://www.dmg.org/v4-2/pmml-4-2.xsd"
      <Header copyright="Copyright (c) 2014, Alibaba Inc." description=""
        <Application name="ODPS/PMML" version="0.1.0"/
        <TimestampTue, 12 Jul 2016 07:04:48 GMT</Timestamp
      </Header
      <DataDictionary numberOfFields="2"
        <DataField name="f0" optype="continuous" dataType="integer"/
        <DataField name="f1" optype="continuous" dataType="integer"/
        <DataField name="class" optype="categorical" dataType="string"
          <Value value="bad"/
          <Value value="good"/
        </DataField
      </DataDictionary
      <MiningModel modelName="xlab_m_random_forests_1_75078_v0" functionName="classification" algorithmName="RandomForests"
        <MiningSchema
          <MiningField name="f0" usageType="active"/
          <MiningField name="f1" usageType="active"/
          <MiningField name="class" usageType="target"/
        </MiningSchema
        <Segmentation multipleModelMethod="majorityVote"
          <Segment id="0"
            <True/
            <TreeModel modelName="xlab_m_random_forests_1_75078_v0" functionName="classification" algorithmName="RandomForests"
              <MiningSchema
                <MiningField name="f0" usageType="active"/
                <MiningField name="f1" usageType="active"/
                <MiningField name="class" usageType="target"/
              </MiningSchema
              <Node id="1"
                <True/
                <ScoreDistribution value="bad" recordCount="2"/
                <ScoreDistribution value="good" recordCount="3"/
                <Node id="2" score="good"
                  <SimplePredicate field="f1" operator="equal" value="2"/
                  <ScoreDistribution value="good" recordCount="1"/
                </Node
                <Node id="3" score="good"
                  <SimplePredicate field="f1" operator="equal" value="3"/
                  <ScoreDistribution value="good" recordCount="2"/
                </Node
                <Node id="4" score="bad"
                  <SimplePredicate field="f1" operator="equal" value="4"/
                  <ScoreDistribution value="bad" recordCount="2"/
                </Node
              </Node
            </TreeModel
          </Segment
          <Segment id="1"
            <True/
            <TreeModel modelName="xlab_m_random_forests_1_75078_v0" functionName="classification" algorithmName="RandomForests"
              <MiningSchema
                <MiningField name="f0" usageType="active"/
                <MiningField name="f1" usageType="active"/
                <MiningField name="class" usageType="target"/
              </MiningSchema
              <Node id="1"
                <True/
                <ScoreDistribution value="bad" recordCount="2"/
                <ScoreDistribution value="good" recordCount="3"/
                <Node id="2" score="good"
                  <SimpleSetPredicate field="f1" booleanOperator="isIn"
                    <Array n="2" type="integer"2 3</Array
                  </SimpleSetPredicate
                  <ScoreDistribution value="good" recordCount="3"/
                </Node
                <Node id="3" score="bad"
                  <SimpleSetPredicate field="f1" booleanOperator="isNotIn"
                    <Array n="2" type="integer"2 3</Array
                  </SimpleSetPredicate
                  <ScoreDistribution value="bad" recordCount="2"/
                </Node
              </Node
            </TreeModel
          </Segment
          <Segment id="2"
            <True/
            <TreeModel modelName="xlab_m_random_forests_1_75078_v0" functionName="classification" algorithmName="RandomForests"
              <MiningSchema
                <MiningField name="f0" usageType="active"/
                <MiningField name="f1" usageType="active"/
                <MiningField name="class" usageType="target"/
              </MiningSchema
              <Node id="1"
                <True/
                <ScoreDistribution value="bad" recordCount="2"/
                <ScoreDistribution value="good" recordCount="3"/
                <Node id="2" score="bad"
                  <SimplePredicate field="f0" operator="lessOrEqual" value="0.5"/
                  <ScoreDistribution value="bad" recordCount="1"/
                  <ScoreDistribution value="good" recordCount="1"/
                </Node
                <Node id="3" score="good"
                  <SimplePredicate field="f0" operator="greaterThan" value="0.5"/
                  <ScoreDistribution value="bad" recordCount="1"/
                  <ScoreDistribution value="good" recordCount="2"/
                </Node
              </Node
            </TreeModel
          </Segment
        </Segmentation
      </MiningModel
    </PMML
  4. 查看模型可视化输出。随机森林可视化输出

朴素贝叶斯

朴素贝叶斯是一种基于独立假设的贝叶斯定理的概率分类算法。PAI-Studio支持通过可视化或PAI命令的方式,配置该组件参数:
  • 可视化方式
    页签 参数 描述
    字段设置 特征列 默认为除标签列外的所有列,支持DOUBLE、STRING及BIGINT数据类型。
    排除列 不参与训练的列,不能与选择特征列同时使用。
    强制转换列 解析规则如下:
    • STRING、BOOLEAN及DATETIME类型的列,解析为离散类型。
    • DOUBLE和BIGINT类型的列,解析为连续类型。
    说明 如果需要将BIGINT类型的列解析为CATEGORICAL,则必须使用forceCategorical参数指定类型。
    标签列 输入表的标签列,只能选择非特征列。支持STRING、DOUBLE及BIGINT类型。
    输入数据是否为稀疏格式 使用KV格式表示稀疏数据。
    当输入为稀疏时,K:V间的分隔符 默认为英文逗号(,)。
    当输入为稀疏时,key和value的分隔符 默认为英文冒号(:)。
    执行调优 计算核心数 默认为系统自动分配。
    每个核心内存数 默认为系统自动分配。
  • PAI命令方式
    PAI -name NaiveBayes -project algo_public
        -DinputTablePartitions="pt=20150501"
        -DmodelName="xlab_m_NaiveBayes_23772"
        -DlabelColName="poutcome"
        -DfeatureColNames="age,previous,cons_conf_idx,euribor3m"
        -DinputTableName="bank_data_partition";
    参数 是否必选 描述 默认值
    inputTableName 输入表的表名。
    inputTablePartitions 输入表中,参与训练的分区。 所有分区
    modelName 输出的模型名称。
    labelColName 输入表中,标签列的名称。
    featureColNames 输入表中,用于训练的特征列名。 除标签列外的所有列
    excludedColNames 用于反选特征列,该参数不能与featureColNames同时使用。
    forceCategorical 解析规则如下:
    • STRING、BOOLEAN及DATETIME类型的列,解析为离散类型。
    • DOUBLE和BIGINT类型的列,解析为连续类型。
    说明 如果需要将BIGINT类型的列解析为CATEGORICAL,则必须使用forceCategorical参数指定类型。
    INT为连续类型
    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. 配置朴素贝叶斯组件的参数(配置如下表格中的参数,其余参数使用默认值)。
    页签 参数 描述
    字段设置 特征列 在训练表中,选择f0f1f2f3f4f5f6f7列。
    标签列 在训练表中,选择y列。
  5. 运行实验,查看预测结果。朴素贝叶斯预测结果