本文为您介绍PAI-Studio提供的特征变换算法,包括主成分分析、特征尺度变换、特征离散、奇异值分解和特征异常平滑。

主成分分析

主成分分析(PCA)是研究如何通过少数主成分揭示多个变量间的内部结构,考察多个变量间相关性的一种多元统计方法。

PCA从原始变量中导出少数主成分,使它们尽可能多地保留原始变量的信息,并且彼此间互不相关,作为新的综合指标。

PCA使用主成分分析算法,实现了降维和降噪的功能。
说明 PCA目前仅支持稠密数据格式。
PAI-Studio支持通过可视化或PAI命令的方式,配置该组件参数,如下所示:
  • 可视化方式
    页签 参数 描述
    字段设置 选择特征列 输入表中用于分析的列名称。
    附加列 附加在降维数据表后的列。
    参数设置 信息量比例 降维后数据信息占原来的比例。
    特征分解方式 分解特征的方式,取值如下:
    • CORR
    • COVAR_SAMP
    • COVAR_POP
    数据转换方式 转换为新数据的处理方式,取值如下:
    • Simple
    • Sub-Mean
    • Normalization
    执行调优 生命周期 指定输出表的生命周期,取值为正整数。
    节点个数 单个节点内存大小参数配对使用。取值为[1, 9999]的正整数。
    单个节点内存大小 单位为兆。取值范围为[1024, 64*1024]的正整数。
  • PAI命令方式
    PAI -name PrinCompAnalysis
        -project algo_public
        -DinputTableName=bank_data
        -DeigOutputTableName=pai_temp_2032_17900_2
        -DprincompOutputTableName=pai_temp_2032_17900_1
        -DselectedColNames=pdays,previous,emp_var_rate,cons_price_idx,cons_conf_idx,euribor3m,nr_employed
        -DtransType=Simple
        -DcalcuType=CORR
        -DcontriRate=0.9;
    参数名称 是否必选 参数描述 默认值
    inputTableName 进行主成分分析的输入表。
    selectedColNames 输入表中用于分析的列名称。

    使用逗号分隔,支持INT和DOUBLE类型。

    eigOutputTableName 特征向量与特征值的输出表。
    princompOutputTableName 进行主成分降维降噪后的结果输出表。
    transType 转换原表为主成分分析表的方式,取值如下:
    • Simple
    • Sub-Mean
    • Normalization
    Simple
    calcuType 对原表进行特征分解的方式,取值如下:
    • CORR
    • COVAR_SAMP
    • COVAR_POP
    CORR
    contriRate 数据信息降维后保留的百分比。取值范围为(0,1) 0.9
    remainColumns 降维表保留原表的字段。
    coreNum 节点个数,与memSizePerCore参数配对使用。取值范围为[1, 9999]的正整数。 系统自动分配。
    memSizePerCore 单个节点的内存大小,单位为兆。取值范围为[1024, 64*1024]的正整数。 系统自动分配。
    lifecycle 指定输出表的生命周期,取值为正整数。
PCA输出示例
  • 降维后的数据表降为数据表
  • 特征值和特征向量表特征值和特征向量表

特征尺度变换

特征尺度变换的功能如下:
  • 支持常见的log2log10lnabssqrt等尺度变化函数。
  • 支持稠密及稀疏数据格式。
PAI-Studio支持通过可视化或PAI命令的方式,配置该组件参数,如下所示:
  • 可视化方式
    页签 参数 描述
    字段设置 尺度变换特征 需要缩放的特征。
    选择标签列 如果您设置了该字段,则可以通过可视化方式查看特征到目标变量的x-y分布直方图。
    参数设置 尺度变化函数 特征尺度变换组件支持如下尺度变化函数:
    • log2
    • log10
    • ln
    • abs
    • sqrt
  • PAI命令方式
    PAI -name fe_scale_runner -project algo_public
        -Dlifecycle=28
        -DscaleMethod=log2
        -DscaleCols=nr_employed
        -DinputTable=pai_dense_10_1
        -DoutputTable=pai_temp_2262_20380_1;
    参数名称 是否必选 参数描述 默认值
    inputTable 输入表的表名称。
    inputTablePartitions 输入表中指定参与训练的分区,格式为Partition_name=value

    如果是多级分区,格式为name1=value1/name2=value2;

    如果指定多个分区,则需要使用,隔开。

    输入表的所有分区。
    outputTable 缩放尺度后的结果表。
    scaleCols 勾选需要缩放的特征。

    系统会自动筛选稀疏特征。您只能勾选数值类特征。

    labelCol 标签字段。

    如果您设置了该字段,则可以通过可视化方式查看特征到目标变量的x-y分布直方图。

    categoryCols 将勾选的字段作为枚举特征处理,并且不支持缩放。 “”
    scaleMethod 缩放方法,取值如下:
    • log2
    • log10
    • ln
    • abs
    • sqrt
    log2
    scaleTopN 当未勾选scaleCols参数时,系统自动挑选TopN个需要缩放的特征。 10
    isSparse 是否为k:v的稀疏特征。 稠密数据
    itemSpliter 稀疏特征item的分隔符。 ,
    kvSpliter 稀疏特征item的分隔符。 :
    lifecycle 结果表的生命周期。 7
    coreNum 节点个数。取值范围为[1, 9999]的正整数。与memSizePerCore参数配对使用。 系统自动分配。
    memSizePerCore 单个节点的内存大小,单位为兆。取值范围为[2048, 64 * 1024]的正整数。 系统自动分配。
示例
  • 输入数据
    create table if not exists pai_dense_10_1 as
    select
        nr_employed
    from bank_data limit 10;
  • 参数配置
    勾选nr_employed作为尺度变化特征,并且仅支持数值类特征。尺度变化函数选择log2,如下图所示。参数配置
  • 运行结果
    nr_employed
    12.352071021075528
    12.34313018339218
    12.285286613666395
    12.316026916036957
    12.309533196497519
    12.352071021075528
    12.316026916036957
    12.316026916036957
    12.309533196497519
    12.316026916036957

特征离散

离散模块的功能如下:
  • 支持稠密数值类特征离散。
  • 支持等频离散和等距离离散等无监督离散。
    说明 无监督离散的特征离散默认为等距离离散。
  • 支持基于Gini增益离散和基于熵增益离散等有监督离散。
    说明 标签类特征离散必须是枚举类型STRING或BIGINT类型。
特征离散预测可以使用特征工程目录下的特征模型预测组件。详细的建模DAG图如下所示。特征预测
说明
  • 您必须使用相同的离散模型做特征离散预测,才能保证特征对齐。
  • 有监督离散是根据熵增益不断遍历寻找切分断点,运行时间可能比较久。切分得到的分区数不受指定的maxBins参数限制。
PAI-Studio支持通过可视化或PAI命令的方式,配置该组件参数,如下所示:
  • 可视化方式
    页签 参数 描述
    字段设置 离散的特征 选择需要离散的特征。如果选择的是稀疏特征,则系统会自动筛选。
    标签列 如果您设置了该字段,则可以通过可视化方式查看特征到目标变量的x-y分布直方图。
    参数设置 离散方法 离散方法。取值如下:
    • Isometric Discretization(等距离散)
    • Isofrequecy Discretization(等频离散)
    • Gini-gain-based Discretization(基于Gini增益离散)
    • Entropy-gain-based Discretization(基于熵增益离散)
    离散区间 离散区间大小。取值为大于1的正整数。
    执行调优 计算核心数 计算的核心数目,取值为正整数。
    每个核心内存 每个CPU分配的内存大小。
  • PAI命令方式
    PAI -name fe_discrete_runner_1 -project algo_public
       -DdiscreteMethod=SameFrequecy
       -Dlifecycle=28
       -DmaxBins=5
       -DinputTable=pai_dense_10_1
       -DdiscreteCols=nr_employed
       -DoutputTable=pai_temp_2262_20382_1
       -DmodelTable=pai_temp_2262_20382_2;
    参数名称 是否必选 参数描述 默认值
    inputTable 输入表的表名称。
    inputTablePartitions 输入表中指定参与训练的分区,格式为Partition_name=value

    如果是多级分区,格式为name1=value1/name2=value2;

    如果指定多个分区,则需要使用,隔开。

    输入表的所有分区。
    outputTable 离散后的结果表。
    discreteCols 选择需要离散的特征。如果选择的是稀疏特征,则系统会自动筛选。 “”
    labelCol 标签字段。如果您设置了该字段,则可以通过可视化方式查看特征到目标变量的x-y分布直方图。
    categoryCols 将勾选的字段作为枚举特征处理,并且不支持离散。 默认为空
    discreteMethod 离散方法。取值如下:
    • Isometric Discretization(等距离散)
    • Isofrequecy Discretization(等频离散)
    • Gini-gain-based Discretization(基于Gini增益离散)
    • Entropy-gain-based Discretization(基于熵增益离散)
    Isometric Discretization
    discreteTopN 当未勾选discreteCols参数时,系统自动挑选TopN个需要离散的特征。取值为正整数。 10
    maxBins 离散区间大小。取值为大于1的正整数。 100
    isSparse 是否为k:v的稀疏特征,取值如下:
    • true
    • false

    默认为稠密数据。

    false
    itemSpliter 稀疏特征item的分隔符。 ,
    kvSpliter 稀疏特征item的分隔符。
    lifecycle 结果表生命周期。取值为正整数。 7
    coreNum 节点个数。与memSizePerCore参数配对使用,取值为正整数。 系统自动分配。
    memSizePerCore 单个节点内存大小,单位为兆。取值为正整数。 系统自动分配。
示例
  • 输入数据
    create table if not exists pai_dense_10_1 as
    select
        nr_employed
    from bank_data limit 10;
  • 参数配置
    输入数据为pai_dense_10_1离散特征选择nr_employed离散方法选择等距离散离散区间配置为5,如下图所示。离散特征
  • 运行结果
    nr_employed
    4.0
    3.0
    1.0
    3.0
    2.0
    4.0
    3.0
    3.0
    2.0
    3.0

特征异常平滑

特征平滑组件可以将输入特征中包含异常的数据平滑到一定区间,支持稀疏和稠密数据格式。
说明 特征平滑组件只是将异常取值的特征值修正为正常值,本身不过滤或删除任何记录,输入数据维度和条数均不变。
平滑方法如下:
  • ZScore平滑

    如果特征分布遵循正态分布,则噪音一般集中在-3×alpha3×alpha之外,ZScore是将该范围的数据平滑到[-3×alpha,3×alpha]之间。

    例如,某个特征遵循正态分布,均值为0,标准差为3。因此,-10的特征值会被识别为异常而修正为-3×3+0,即为-9。同理10会被修正为3×3+0,即为9,如下图所示。Zscore平滑
  • 百分位平滑

    用于将分布不在[minPer, maxPer]的数据平滑到minPermaxPer这两个分位点。

    例如,age特征取值0~200,设置minPer0maxPer50%,则不在0~100的特征取值都会被修正成0100

  • 阈值平滑

    用于将分布不在[minThresh, maxThresh]的数据平滑到minThreshmaxThresh这两个数据点。

    例如,age特征取值0~200,设置minThresh10maxThresh80,则不在0~80的特征取值都会被修正成080

PAI-Studio支持通过可视化或PAI命令的方式,配置该组件参数,如下所示:
  • 可视化方式
    页签 参数 描述
    字段设置 选择平滑特征列 需要平滑处理的特征列。
    标签列 如果您设置了该字段,则可以通过可视化方式查看特征到目标变量的x-y分布直方图。
    参数设置 平滑方法 平滑方法如下:
    • ZScore平滑
    • 百分位平滑
    • 阈值平滑
    • 箱线图平滑
    置信范围 置信水平。当平滑方法为ZScore平滑时需要配置该参数。
    阈值下限 阈值最小值,默认为-9999,表示不设置。

    当平滑方法为阈值平滑时需要配置该参数。

    阈值上限 阈值最大值,默认为-9999,表示不设置。

    当平滑方法为阈值平滑时需要配置该参数。

    百分位下限 最低百分位。

    当平滑方法为百分位平滑箱线图平滑时需要配置该参数。

    百分位上限 最高百分位。

    当平滑方法为百分位平滑箱线图平滑时需要配置该参数。

  • PAI命令方式
    PAI -name fe_soften_runner -project algo_public
        -DminThresh=5000
        -Dlifecycle=28
        -DsoftenMethod=min-max-thresh
        -DsoftenCols=nr_employed
        -DmaxThresh=6000
        -DinputTable=pai_dense_10_1
        -DoutputTable=pai_temp_2262_20381_1;
    参数名称 是否必选 参数描述 默认值
    inputTable 输入表的表名
    inputTablePartitions 输入表中指定参与训练的分区,格式为Partition_name=value

    如果是多级分区,格式为name1=value1/name2=value2;

    如果指定多个分区,则需要使用,隔开。

    输入表的所有分区。
    outputTable 平滑后的结果表。
    labelCol 标签字段。如果您设置了该字段,则可以通过可视化方式查看特征到目标变量的x-y分布直方图。 默认为空
    categoryCols 将勾选的字段作为枚举特征处理。 默认为空
    softenCols 选择需要平滑的特征。如果特征为稀疏特征时,系统会自动化筛选。
    softenMethod 平滑方法如下:
    • ZScore平滑
    • 百分位平滑
    • 阈值平滑
    • 箱线图平滑
    ZScore平滑
    softenTopN 当未勾选softenCols参数时,系统自动挑选TopN个需要平滑的特征。取值为正整数。 10
    cl 置信水平。当平滑方法为ZScore平滑时需要配置该参数。 10
    minPer 最低百分位。当平滑方法为百分位平滑箱线图平滑时需要配置该参数。 0.0
    maxPer 最高百分位。当平滑方法为百分位平滑箱线图平滑时需要配置该参数。 1.0
    minThresh 阈值最小值。当平滑方法为阈值平滑时需要配置该参数。 -9999
    maxThresh 阈值最大值。当平滑方法为阈值平滑时需要配置该参数。 -9999
    isSparse 是否为k:v的稀疏特征,取值如下:
    • true
    • false

    默认为稠密数据。

    false
    itemSpliter 稀疏特征item的分隔符。 ,
    kvSpliter 稀疏特征item的分隔符。
    lifecycle 结果表生命周期。取值为正整数。 7
    coreNum 节点个数。与memSizePerCore参数配对使用,取值为[1, 9999]的正整数。 系统自动分配。
    memSizePerCore 单个节点内存大小,单位为兆。取值为[2048, 64 *1024]的正整数。 系统自动分配。
示例
  • 输入数据
    create table if not exists pai_dense_10_1 as
    select
        nr_employed
    from bank_data limit 10;
    nr_employed
    5228.1
    5195.8
    4991.6
    5099.1
    5076.2
    5228.1
    5099.1
    5099.1
    5076.2
    5099.1
  • 参数配置
    平滑特征选择nr_employed参数设置平滑方法选择阈值平滑阈值下限5000阈值上限6000,如下图所示。平滑特征
  • 运行结果
    nr_employed
    5228.1
    5195.8
    5000.0
    5099.1
    5076.2
    5228.1
    5099.1
    5099.1
    5076.2
    5099.1

奇异值分解

奇异值分解(Singular Value Decomposition)是线性代数中一种重要的矩阵分解,是矩阵分析中正规矩阵求对角化的推广。在信号处理、统计学等领域有重要应用。

奇异值分解的公式为X = U S V’

PAI-Studio支持通过可视化或PAI命令的方式,配置该组件参数,如下所示:
  • 可视化方式
    页签 参数 描述
    字段设置 选择特征列 存放k:v,k:v格式的列。
    参数设置 保留奇异值个数 期望求解的top奇异组个数。默认求解全部奇异组。
    精度误差 允许的期望的误差精度。
    执行调优 单个节点内存大小 单位为兆,与memSizePerCore参数配对使用,取值为[1, 9999]的正整数。
    节点个数 取值为[1024, 64*1024]的正整数。
    生命周期 指定输出表的生命周期。
  • PAI命令方式
    PAI -name svd
        -project algo_public
        -DinputTableName=bank_data
        -DselectedColNames=col0
        -DenableSparse=true
        -Dk=5
        -DoutputUTableName=u_table
        -DoutputVTableName=v_table
        -DoutputSTableName=s_table;
    参数名称 是否必选 参数描述 默认值
    inputTableName 进行主成分分析的输入表。
    selectedColNames 输入表中用于分析的列名称,使用逗号分隔。

    如果是稀疏矩阵,支持STRING类型。如果是表,支持INT和DOUBLE类型。

    默认选择所有列。
    inputTablePartitions 输入表中指定参与分析的分区,格式为Partition_name=value

    如果是多级分区,格式为name1=value1/name2=value2,

    如果指定多个分区,则需要使用,隔开。

    默认选择所有分区。
    outputUTableName U矩阵的输出表,维度是m * sgNum。其中,m为数据表的行数,sgNum为计算出的奇异值个数。
    outputSTableName S矩阵的输出表,维度是sgNum * sgNum。其中,sgNum为计算出的奇异值个数。
    outputVTableName V矩阵的输出表,维度是n * sgNum。其中,n是矩阵的列数,sgNum是计算出的奇异值个数。
    k 期望的奇异值个数。

    输出的结果为可能比K值小的正整数。

    tol 收敛误差 1.0e~06
    enableSparse 输入数据是否为稀疏格式:
    • true
    • false
    false
    itemDelimiter 指当输入表数据为稀疏格式时,kv间的分隔符。 空格
    kvDelimiter 指当输入表数据为稀疏格式时,key和value的分隔符。 冒号
    coreNum 节点个数。与memSizePerCore参数配对使用,取值为[1, 9999]的正整数。 系统自动分配。
    memSizePerCore 单个节点内存大小,单位为兆。取值为[1024, 64*1024]的正整数。 系统自动分配。
    lifecycle 指定输出表的生命周期。取值为正整数。
示例
  • 数据生成
    drop table if exists svd_test_input;
    create table svd_test_input
    as
    select
        *
    from
    (
      select
            '0:3.9079 2:0.0009 3:0.0416 4:0.17664 6:0.36460 8:0.091330' as col0
        from dual
        union all
      select
            '0:0.09229 2:0.4872172 5:0.5267 8:0.4544 9:0.23317' as col0
        from dual
        union all
        select
        '1:0.8312 3:0.9317 5:0.5680 7:0.5560 9:0.0508' as col0
        from dual
        union all
        select
        '2:0.767 5:0.01891 8:0.25235 ' as col0
        from dual
        union all
        select
        '0:0.29819 2:0.87598086 6:0.5315568 ' as col0
        from dual
        union all
        select
        '0:0.920260 2:0.5154311513 4:0.8104 5:0.188420 8:0.88' as col0
        from dual
    ) a;
  • PAI命令
    PAI -name svd
        -project algo_public
        -DinputTableName=svd_test_input
        -DselectedColNames=col0
        -DenableSparse=true
        -Dk=5
        -DoutputUTableName=u_table
        -DoutputVTableName=v_table
        -DoutputSTableName=s_table;
  • 算法规模:10万列。