全部产品
机器学习PAI

特征工程

更新时间:2017-07-17 16:57:53   分享:   


特征工程


目录


主成分分析

  • PCA 利用主成分分析方法,实现降维和降维的功能. PCA算法原理见wiki
  • 目前支持稠密数据格式

PAI 命令

  1. PAI -name PrinCompAnalysis
  2. -project algo_public
  3. -DinputTableName=bank_data
  4. -DeigOutputTableName=pai_temp_2032_17900_2
  5. -DprincompOutputTableName=pai_temp_2032_17900_1
  6. -DselectedColNames=pdays,previous,emp_var_rate,cons_price_idx,cons_conf_idx,euribor3m,nr_employed
  7. -DtransType=Simple
  8. -DcalcuType=CORR
  9. -DcontriRate=0.9;

算法参数说明

参数名称 参数描述 参数值可选项 默认值
inputTableName 必选,进行主成分分析的输入表 - -
eigOutputTableName 必选,特征向量与特征值的输出表 - -
princompOutputTableName 必选,进行主成分降维降噪后的结果输出表 - -
selectedColNames 必选,参与主成分分析运算的特征列 - -
transType 可选,原表转换为主成分表的方式,支持Simple, Sub-Mean, Normalization - Simple
calcuType 可选,对原表进行特征分解的方式,支持 CORR/COVAR_SAMP/COVAR_POP - CORR
contriRate 可选,降维后数据信息保留的百分比 - 0.9
remainColumns 可选,降维表保留原表的字段 - -

PCA输出示例

  1. 降维后的数据表image

  2. 特征值和特征向量表image


特征尺度变换

功能说明

  • 支持常见的 尺度变化函数 log2,log10,ln,abs,sqrt。支持 稠密或稀疏

PAI 命令

  1. PAI -name fe_scale_runner -project algo_public
  2. -Dlifecycle=28
  3. -DscaleMethod=log2
  4. -DscaleCols=nr_employed
  5. -DinputTable=pai_dense_10_1
  6. -DoutputTable=pai_temp_2262_20380_1;

算法参数

参数名称 参数描述 参数值可选项 默认值
inputTable 必选,输入表的表名 - -
inputTablePartitions 可选,输入表中指定哪些分区参与训练,格式为: partition_name=value。如果是多级,格式为name1=value1/name2=value2;如果指定多个分区,中间用’,’分开 - 输入表的所有partition
outputTable 必选,尺度缩放后结果表 - -
scaleCols 必选,勾选需要缩放的特征,稀疏特征自动化筛选,只能勾选数值类特征 -
labelCol 可选, 标签字段,如果设该签列,可视化特征到目标变量的x-y分布直方图 - -
categoryCols 可选,将勾选的字段视作枚举特征处理,不支持缩放 “”
scaleMethod 可选,缩放方法,默认log2, 支持 log2,log10,ln,abs,sqrt SameDistance
scaleTopN 当scaleCols没有勾选时,自动挑选的TopN个需要缩放特征特征,默认10 10
isSparse 是否是k:v的稀疏特征,可选,默认稠密数据 100
itemSpliter 稀疏特征item分隔符,可选,默认逗号 “,”
kvSpliter 稀疏特征item分隔符,可选,默认冒号 “:”
lifecycle 结果表生命周期,可选,默认7 7

实例

输入数据

  1. create table if not exists pai_dense_10_1 as
  2. select
  3. nr_employed
  4. from bank_data limit 10;

参数配置

勾选nr_employed 做特征尺度变化的特征,只支持数值类特征尺度变化函数,勾选log2

image

运行结果
nr_employed
12.352071021075528
12.34313018339218
12.285286613666395
12.316026916036957
12.309533196497519
12.352071021075528
12.316026916036957
12.316026916036957
12.309533196497519
12.316026916036957

特征离散

离散模块功能介绍

  • 支持 稠密或稀疏的 数值类特征 离散
  • 支持 等频离散 和 等距离离散(默认)

pai 命令

  1. PAI -name fe_discrete_runner -project algo_public
  2. -DdiscreteMethod=SameFrequecy
  3. -Dlifecycle=28
  4. -DmaxBins=5
  5. -DinputTable=pai_dense_10_1
  6. -DdiscreteCols=nr_employed
  7. -DoutputTable=pai_temp_2262_20382_1;

算法参数

参数名称 参数描述 参数值可选项 默认值
inputTable 必选,输入表的表名 - -
inputTablePartitions 可选,输入表中指定哪些分区参与训练,格式为: partition_name=value。如果是多级,格式为name1=value1/name2=value2;如果指定多个分区,中间用’,’分开 - 输入表的所有partition
outputTable 必选,离散后结果表 - -
discreteCols 必选,勾选需要离散的特征,如果是稀疏特征自动化筛选 “”
labelCol 可选, 标签字段,如果设该签列,可视化特征到目标变量的x-y分布直方图 - -
categoryCols 可选,将勾选的字段视作枚举特征处理,不支持离散 “”
discreteMethod 可选,离散方法,默认SameDistance 目前支持:SameDistance(等距离散), SameFrequecy(等频离散) SameDistance
discreteTopN 当discreteCols没有勾选时,自动挑选的TopN个需要离散特征特征,默认10 10
maxBins 离散区间大小,默认100 100
isSparse 是否是k:v的稀疏特征,可选,默认稠密数据 100
itemSpliter 稀疏特征item分隔符,可选,默认逗号 “,”
kvSpliter 稀疏特征item分隔符,可选,默认冒号 “:”
lifecycle 结果表生命周期,可选,默认7 7

建模示例

输入数据

  1. create table if not exists pai_dense_10_1 as
  2. select
  3. nr_employed
  4. from bank_data limit 10;

参数配置

输入数据为pai_dense_10_1离散特征勾选 nr_employed,用 等距离离散 方法离散成5个区间, 结果如下

image

运行结果

nr_employed
4.0
3.0
1.0
3.0
2.0
4.0
3.0
3.0
2.0
3.0

特征异常平滑

组件功能介绍

  • 功能:将输入特征中含有异常的数据平滑到一定区间,支持稀疏和稠密

ps: 特征平滑组件只是将异常取值的特征值修正成正常值,本身不过滤或删除任何记录,输入数据维度和条数都不变.

平滑方法介绍

  • Zscore平滑:如果特征分布遵循正态分布,考虑噪音一般集在-3xalpha 和 3xalpha 之外,ZScore是将该范围数据平滑到[-3xalpha,3xalpha]。

eg: 某个特征遵循特征分布,均值为0,标准差为3,因此-10的特征值会被识别为异常而修正为-3x3+0=-9,同理,10会被修正为3x3+0

image

  • 百分位平滑: 将数据分布在[minPer, maxPer]分位之外的数据平滑平滑到minPer/maxPer这两个分位点

eg: age特征取值0-200,设置minPer为0,maxPer为50%,那么在0-100之外的特征取值都会被修正成0或者100

  • 阈值平滑: 将数据分布在[minThresh, maxThresh]之外的数据平滑到minThresh和maxThresh这两个数据点.

eg: age特征取值0-200,设置minThresh=10,maxThresh=80,那么在0-80之外的特征取值都会被修正成0或者80

三 pai 命令

  1. PAI -name fe_soften_runner -project algo_public
  2. -DminThresh=5000 -Dlifecycle=28
  3. -DsoftenMethod=min-max-thresh
  4. -DsoftenCols=nr_employed
  5. -DmaxThresh=6000
  6. -DinputTable=pai_dense_10_1
  7. -DoutputTable=pai_temp_2262_20381_1;

四 算法参数

参数名称 参数描述 参数值可选项 默认值
inputTable 必选,输入表的表名 - -
inputTablePartitions 可选,输入表中指定哪些分区参与训练,格式为: partition_name=value。如果是多级,格式为name1=value1/name2=value2;如果指定多个分区,中间用’,’分开 - 输入表的所有partition
outputTable 必选,平滑后结果表 - -
labelCol 可选, 标签字段,如果设该签列,可视化特征到目标变量的x-y分布直方图 - -
categoryCols 可选,将勾选的字段视作枚举特征处理 “”
softenCols 必选,勾选需要平滑的特征,但特征是稀疏特征时自动化筛选 -
softenMethod 可选,平滑方法,默认zscore 目前支持:min-max-thresh(阈值平滑), min-max-per(百分位平滑) zscore
softenTopN 当softenCols没有勾选时,自动挑选的TopN个需要的平滑特征特征,默认10 10
cl 置信水平,当平滑方法是zscore方生效 10
minPer 最低百分位,当平滑方法是min-max-thresh方生效 0.0
maxPer 最高百分位,当平滑方法是min-max-thresh方生效 1.0
minThresh 阈值最小值,默认-9999,表示不设置, 当平滑方法是min-max-per方生效 -9999
maxThresh 阈值最大值,默认-9999,表示不设置,当平滑方法是min-max-per方生效 -9999
isSparse 是否是k:v的稀疏特征,可选,默认稠密数据 100
itemSpliter 稀疏特征item分隔符,可选,默认逗号 “,”
kvSpliter 稀疏特征item分隔符,可选,默认冒号 “:”
lifecycle 结果表生命周期,可选,默认7 7

五 实例

1. 输入数据

输入数据

  1. create table if not exists pai_dense_10_1 as
  2. select
  3. nr_employed
  4. 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

image

运行结果

nr_employed
5228.1
5195.8
5000.0
5099.1
5076.2
5228.1
5099.1
5099.1
5076.2
5099.1

随机森林特征重要性

组件功能

使用原始数据和随机森林模型,计算特征重要性.

PAI 命令

  1. pai -name feature_importance -project algo_public
  2. -DinputTableName=pai_dense_10_10
  3. -DmodelName=xlab_m_random_forests_1_20318_v0
  4. -DoutputTableName=erkang_test_dev.pai_temp_2252_20319_1
  5. -DlabelColName=y
  6. - DfeatureColNames="pdays,previous,emp_var_rate,cons_price_idx,cons_conf_idx,euribor3m,nr_employed,age,campaign,poutcome"
  7. -Dlifecycle=28 ;

算法参数

参数名称 参数描述 参数值可选项 默认值
inputTableName 必选,输入表 - -
outputTableName 必选,输出表 - -
labelColName 必选,label所在的列 - -
modelName 必选,输入的模型名 - -
featureColNames 可选,输入表选择的特征 - 默认除label外的其他列
inputTablePartitions 可选,输入表选择的分区 - 默认选择全表
lifecycle 可选,输出表的生命周期 - 默认不设置
coreNum 可选,核心数 - 默认自动计算
memSizePerCore 可选,内存数 - 默认自动计算

实例

训练数据

  1. drop table if exists pai_dense_10_10;
  2. creat table if not exists pai_dense_10_10 as
  3. select
  4. age,campaign,pdays, previous, poutcome, emp_var_rate, cons_price_idx, cons_conf_idx, euribor3m, nr_employed, y
  5. from bank_data limit 10;

参数配置

实例流程图如下,数据源为pai_dense_10_10, y列为随机森林的标签列,其他列为特征列,强制转换列勾选age和campaign,表示这两个特征当做枚举特征处理,其他采用默认参数。 运行成功如下

image

运行结果

colname gini entropy
age 0.06625000000000003 0.13978726292803723
campaign 0.0017500000000000003 0.004348515545596772
cons_conf_idx 0.013999999999999999 0.02908409497018851
cons_price_idx 0.002 0.0049804499913461255
emp_var_rate 0.014700000000000003 0.026786360680260933
euribor3m 0.06300000000000003 0.1321936348846039
nr_employed 0.10499999999999998 0.2203227248076733
pdays 0.0845 0.17750329234397513
poutcome 0.03360000000000001 0.07050327193845542
previous 0.017700000000000004 0.03810381005801592

随机森林特征重要性组件上 右键查看可视化分析,效果如下所示

image


GBDT特征重要性

组件功能

计算梯度渐进决策树(GBDT)特征重要性

PAI 命令

  1. pai -name gbdt_importance -project algo_public
  2. -DmodelName=xlab_m_GBDT_LR_1_20307_v0
  3. -Dlifecycle=28 -DoutputTableName=pai_temp_2252_20308_1 -DlabelColName=y
  4. -DfeatureColNames=pdays,previous,emp_var_rate,cons_price_idx,cons_conf_idx,euribor3m,nr_employed,age,campaign
  5. -DinputTableName=pai_dense_10_9;

算法参数

参数名称 参数描述 参数值可选项 默认值
inputTableName 必选,输入表 - -
outputTableName 必选,输出表 - -
labelColName 必选,label所在的列 - -
modelName 必选,输入的模型名 - -
featureColNames 可选,输入表选择的特征 - 默认除label外的其他列
inputTablePartitions 可选,输入表选择的分区 - 默认选择全表
lifecycle 可选,输出表的生命周期 - 默认不设置
coreNum 可选,核心数 - 默认自动计算
memSizePerCore 可选,内存数 - 默认自动计算

实例

输入数据

  1. drop table if exists pai_dense_10_9;
  2. create table if not exists pai_dense_10_9 as
  3. select
  4. age,campaign,pdays, previous, emp_var_rate, cons_price_idx, cons_conf_idx, euribor3m, nr_employed, y
  5. from bank_data limit 10;

参数配置

实例流程图如下,输入数据为pai_dense_10_9, GBDT二分类组件选择标签列y,其他字段作为特征列,组件参数配置中叶节点最小样本数配置为1,运行

image

运行结果

colname feature_importance
age 0.004667214954427797
campaign 0.001962038566773853
cons_conf_idx 0.04857761873887033
cons_price_idx 0.01925292649801252
emp_var_rate 0.044881269590771274
euribor3m 0.025034606434306696
nr_employed 0.036085457464908766
pdays 0.639121250405536
previous 0.18041761734639272

右键查看可视化分析报告

image


线性模型特征重要性

组件功能

计算线性模型的特征重要性,包括线性回归和二分类逻辑回归。 支持稀疏和稠密。

PAI 命令

  1. PAI -name regression_feature_importance -project algo_public
  2. -DmodelName=xlab_m_logisticregressi_20317_v0
  3. -DoutputTableName=pai_temp_2252_20321_1
  4. -DlabelColName=y
  5. -DfeatureColNames=pdays,previous,emp_var_rate,cons_price_idx,cons_conf_idx,euribor3m,nr_employed,age,campaign
  6. -DenableSparse=false -DinputTableName=pai_dense_10_9;

算法参数

参数名称 参数描述 参数值可选项 默认值
inputTableName 必选,输入表 - -
outputTableName 必选,输出表 - -
modelName 必选,输入的模型名 - -
labelColName 必选,label所在列 - -
feaureColNames 可选,输入表选择的特征 - 默认除label外的其他列
inputTablePartitions 可选,输入表选择的分区 - 默认选全表
enableSparse 可选,输入表数据是否为稀疏格式 true, false false
itemDelimiter 可选,当输入表数据为稀疏格式时,kv间的分割符 - 空格
kvDelimiter 可选,当输入表数据为稀疏格式时,key和value的分割符 - 冒号
lifecycle 可选,输出表的生命周期 - 默认不设置
coreNum 可选,核心数 - 默认自动计算
memSizePerCore 可选,内存数 - 默认自动计算

实例

输入数据

  1. create table if not exists pai_dense_10_9 as
  2. select
  3. age,campaign,pdays, previous, emp_var_rate, cons_price_idx, cons_conf_idx, euribor3m, nr_employed, y
  4. from bank_data limit 10;
参数配置

建模流程如下图示, 逻辑回归多分类组件选择标签列为y,其他字段为特征列,其他参数默认,运行

image

运行效果
colname weight importance
pdays 0.033942600256583334 16.31387797440866
previous 0.00004248130342485344 0.000030038817725357177
emp_var_rate 0.00006720242617694611 0.00010554561260753949
cons_price_idx 0.00012311047229142307 0.00006581255124425219
cons_conf_idx 0.00017227965471819213 0.0008918770542818432
euribor3m 0.00006113758212679113 0.00010427128177450988
nr_employed 0.0034541377310490697 0.26048098230126043
age 0.00009618162708080744 0.0009267659744232966
campaign 0.000019142551785274455 0.000041793353660529855

指标计算公式

列名 公式
weight abs(w_)
importance abs(w_j) * STD(f_i)

在线性模型特征重要性组件上,右键查看可视化分析

image


偏好计算

功能介绍

  • 给定用户的明细行为特征数据,自动计算用户对特征值的偏好得分.
  • 输入表包含用户id和用户明细行为特征输入,假设在口碑到店场景,某用户2088xxx1在3个月内吃了两次川菜,一次西式快餐,那么输入表形式如下:
user_id cate
2088xxx1 川菜
2088xxx1 川菜
2088xxx1 西式快餐
  • 输出表为用户对川菜和西式快餐的偏好得分,形式如下:
user_id cate
2088xxx1 川菜:0.0544694,西式快餐:0.0272347

PAI命令示例

  1. pai -name=preference
  2. -project=algo_public
  3. -DInputTableName=preference_input_table
  4. -DIdColumnName=user_id
  5. -DFeatureColNames=cate
  6. -DOutputTableName=preference_output_table
  7. -DmapInstanceNum=2
  8. -DreduceInstanceNum=1;

算法参数

参数key名称 参数描述 必/选填 默认值
InputTableName 输入表名 必填 -
IdColumnName 用户id列 必填 -
FeatureColNames 用户特征列 必填 -
OutputTableName 输出表名 必填 -
OutputTablePartitions 输出表分区 选填 -
mapInstanceNum mapper数量 选填 2
reduceInstanceNum reducer数量 选填 1

实例

测试数据

新建数据SQL

  1. drop table if exists preference_input_table;
  2. create table preference_input_table as
  3. select
  4. *
  5. from
  6. (
  7. select '2088xxx1' as user_id, '川菜' as cate from alipaydw.dual
  8. union all
  9. select '2088xxx1' as user_id, '川菜' as cate from alipaydw.dual
  10. union all
  11. select '2088xxx1' as user_id, '西式快餐' cate from alipaydw.dual
  12. union all
  13. select '2088xxx3' as user_id, '川菜' as cate from alipaydw.dual
  14. union all
  15. select '2088xxx3' as user_id, '川菜' as cate from alipaydw.dual
  16. union all
  17. select '2088xxx3' as user_id, '西式快餐' as cate from alipaydw.dual
  18. ) tmp;

运行结果

  1. +------------+------------+
  2. | user_id | cate |
  3. +------------+------------+
  4. | 2088xxx1 | 川菜:0.0544694,西式快餐:0.0272347 |
  5. | 2088xxx3 | 川菜:0.0544694,西式快餐:0.0272347 |
  6. +------------+------------+

基于GBDT的过滤式特征选择

组件功能

根据用户不同的特征选择方法,选择并过滤出TopN的特征数据,同时保存所有特征重要性表(右输出)。支持稀疏和稠密数据

PAI 命令

  1. PAI -name fe_select_runner -project algo_public
  2. -DfeatImportanceTable=pai_temp_2260_22603_2
  3. -DselectMethod=iv
  4. -DselectedCols=pdays,previous,emp_var_rate,cons_price_idx,cons_conf_idx,euribor3m,nr_employed,age,campaign
  5. -DtopN=5
  6. -DlabelCol=y
  7. -DmaxBins=100
  8. -DinputTable=pai_dense_10_9
  9. -DoutputTable=pai_temp_2260_22603_1;

算法参数

参数名称 参数描述 参数值可选项 默认值
inputTable 必选,输入表的表名 - -
inputTablePartitions 可选,输入表中指定哪些分区参与训练,格式为: partition_name=value。如果是多级,格式为name1=value1/name2=value2;如果指定多个分区,中间用’,’分开 - 输入表的所有partition
outputTable 必选,过滤后的特征结果表 - -
featImportanceTable 必选,存放所有输入特征的重要性权重值 - -
selectedCols 必选,特征列 - -
labelCol 必选,标签列/目标列 - -
categoryCols 存在在Int或者Double字符的枚举特征,可选 “”
maxBins 连续类特征划分最大区间数,可选 100
selectMethod 特征选择方法,可选,默认iv 目前支持:iv(Information Value),Gini增益,信息增益,Lasso iv,GiniGain,InfoGain,Lasso iv
topN 挑选的TopN个特征,如果topN答应输入特征数,则输出所有特征,可选,默认10 10
isSparse 是否是k:v的稀疏特征,可选,默认稠密数据 100
itemSpliter 稀疏特征item分隔符,可选,默认逗号 “,”
kvSpliter 稀疏特征item分隔符,可选,默认冒号 “:”
lifecycle 结果表生命周期,可选,默认7 7

实例

输入数据

  1. create table if not exists pai_dense_10_9 as
  2. select
  3. age,campaign,pdays, previous, emp_var_rate, cons_price_idx, cons_conf_idx, euribor3m, nr_employed, y
  4. from bank_data limit 10;

参数配置

标签列勾选y字段,其他字段勾选为特征列, 特征选择方法选IV,topN特征为5,表示过滤top5的特征

imageimage

运行结果

左输出是过滤后的数据

pdays nr_employed emp_var_rate cons_conf_idx cons_price_idx y
999.0 5228.1 1.4 -36.1 93.444 0.0
999.0 5195.8 -0.1 -42.0 93.2 0.0
6.0 4991.6 -1.7 -39.8 94.055 1.0
999.0 5099.1 -1.8 -47.1 93.075 0.0
3.0 5076.2 -2.9 -31.4 92.201 1.0
999.0 5228.1 1.4 -42.7 93.918 0.0
999.0 5099.1 -1.8 -46.2 92.893 0.0
999.0 5099.1 -1.8 -46.2 92.893 0.0
3.0 5076.2 -2.9 -40.8 92.963 1.0
999.0 5099.1 -1.8 -47.1 93.075 0.0

右输出是特征重要性表

特征重要性表字段结构如下,featureName存放特征名称,weight表示特征选择方法计算出来的权重。

featname weight
pdays 30.675544191232486
nr_employed 29.08332850085075
emp_var_rate 29.08332850085075
cons_conf_idx 28.02710269740324
cons_price_idx 28.02710269740324
euribor3m 27.829058450563718
age 27.829058450563714
previous 14.319325030742775
campaign 10.658129656314467

weight计算公式

选择方法 weght含有
IV 信息价值
GiniGain Gini增益
InfoGain 信息熵增益
Lasso 线性模型权重绝对值

窗口变量统计

功能介绍

  • 给定时间窗口,计算相应用户在相应时间窗内的行为次数和金额。如时间窗口为’1,7,30,90,180’,则计算用户相应天数内的行为次数和金额。

PAI命令示例

  1. pai -name=rfm
  2. -project=algo_public
  3. -DinputTableName=window_input_table
  4. -DuserName=user_id
  5. -DdtName=dt
  6. -DcntName=cnt
  7. -DamtName=amt
  8. -Dwindow=1,7,30,90
  9. -DoutputTableName=window_output_table
  10. -DmapInstanceNum=2
  11. -DreduceInstanceNum=2;

算法参数

参数key名称 参数描述 必/选填 默认值
inputTableName 输入表名 必填 -
userName 用户id列 必填 -
dtName 时间列(格式’20160101’) 必填 -
cntName 次数列 必填 -
amtName 金额列 必填 -
window 时间窗口(格式为1,7,30,90…) 必填 -
outputTableName 输出表名 必填 -
outputTablePartitions 输出表分区 选填 -
mapInstanceNum mapper数量 选填 2
reduceInstanceNum reducer数量 选填 2

实例

测试数据

新建数据SQL

  1. drop table if exists window_input_table;
  2. create table window_input_table as
  3. select
  4. *
  5. from
  6. (
  7. select 'a' as user_id, '20151201' as dt, 2 as cnt, 32.0 as amt from dual
  8. union all
  9. select 'a' as user_id, '20160201' as dt, 3 as cnt, 37.0 as amt from dual
  10. union all
  11. select 'a' as user_id, '20160223' as dt, 1 as cnt, 22.0 as amt from dual
  12. union all
  13. select 'b' as user_id, '20151212' as dt, 1 as cnt, 12.0 as amt from dual
  14. union all
  15. select 'b' as user_id, '20160110' as dt, 2 as cnt, 30.0 as amt from dual
  16. union all
  17. select 'c' as user_id, '20151001' as dt, 3 as cnt, 60.0 as amt from dual
  18. union all
  19. select 'c' as user_id, '20151201' as dt, 2 as cnt, 39.0 as amt from dual
  20. ) tmp;

运行结果

  1. +------------+------------+------------+------------+------------+-------------+-------------+-------------+-------------+
  2. | user_id | cnt_1d_sum | amt_1d_sum | cnt_7d_sum | amt_7d_sum | cnt_30d_sum | amt_30d_sum | cnt_90d_sum | amt_90d_sum |
  3. +------------+------------+------------+------------+------------+-------------+-------------+-------------+-------------+
  4. | a | 1 | 22.0 | 1 | 22.0 | 4 | 59.0 | 6 | 91.0 |
  5. | c | 0 | 0.0 | 0 | 0.0 | 0 | 0.0 | 2 | 39.0 |
  6. | b | 0 | 0.0 | 0 | 0.0 | 0 | 0.0 | 3 | 42.0 |
  7. +------------+------------+------------+------------+------------+-------------+-------------+-------------+-------------+

特征编码

一 特征编码概念

  1. 由决策树和Ensemble算法挖掘新特征的一种策略. 特征来自一个或多个特征组成的决策树分支,比如下图左边树的分支 节点1->节点2->节点4 形成一个特征. 很明显,该编码策略可以有效的将 非线性特征 转换为 线性特征.

image

二 pai 命令

  1. PAI -name fe_encode_runner -project algo_public
  2. -DinputTable="pai_temp_2159_19087_1"
  3. -DencodeModel="xlab_m_GBDT_LR_1_19064"
  4. -DselectedCols="pdays,previous,emp_var_rate,cons_price_idx,cons_conf_idx,euribor3m,nr_employed,age,campaign"
  5. -DlabelCol="y"
  6. -DoutputTable="pai_temp_2159_19061_1";

三 参数说明

参数名称 参数描述 参数值可选项 默认值
inputTable 必选,输入表的表名 - -
inputTablePartitions 可选,输入表中指定哪些分区参与训练,格式为: partition_name=value。如果是多级,格式为name1=value1/name2=value2;如果指定多个分区,中间用’,’分开 - 输入表的所有partition
encodeModel 必选,编码的输入GBDT二分类模型 - -
outputTable 必选,尺度缩放后结果表 - -
selectedCols 必选,勾选GBDT参与编码的特征,一般是GBDT组件的训练特征 -
labelCol 必选, 标签字段 - -
lifecycle 结果表生命周期,可选,默认7 7

实例

输入数据

  1. create table if not exists pai_dense_10_9 as
  2. select
  3. age,campaign,pdays, previous, emp_var_rate, cons_price_idx, cons_conf_idx, euribor3m, nr_employed, y
  4. from bank_data limit 10;

参数说明

建模流程如下,一般配合GBDT二分类组件使用

image

出于演示方便,GBDT二分类树棵数设置为5,深度设置为3,y字段为标签列,其他字段为特征列,运行如下.

运行结果

kv y
2:1,5:1,8:1,8:1,12:1,15:1,18:1,18:1,28:1,34:1,34:1,41:1,50:1,53:1,53:1,63:1,72:1,72:1 0.0
2:1,5:1,6:1,6:1,12:1,15:1,16:1,16:1,28:1,34:1,34:1,41:1,50:1,51:1,51:1,63:1,72:1,72:1 0.0
2:1,3:1,3:1,12:1,13:1,13:1,28:1,34:1,34:1,36:1,39:1,39:1,55:1,61:1,61:1 1.0
2:1,3:1,3:1,12:1,13:1,13:1,20:1,21:1,22:1,22:1,41:1,42:1,43:1,46:1,46:1,63:1,64:1,67:1,68:1,68:1 0.0
0:1,0:1,10:1,10:1,28:1,29:1,32:1,32:1,36:1,37:1,37:1,55:1,56:1,59:1,59:1 1.0
2:1,5:1,8:1,8:1,12:1,15:1,18:1,18:1,20:1,26:1,26:1,41:1,42:1,48:1,48:1,63:1,64:1,67:1,70:1,70:1 0.0
2:1,3:1,3:1,12:1,13:1,13:1,20:1,21:1,24:1,24:1,41:1,42:1,43:1,44:1,44:1,63:1,64:1,65:1,65:1 0.0
2:1,3:1,3:1,12:1,13:1,13:1,20:1,21:1,24:1,24:1,41:1,42:1,43:1,44:1,44:1,63:1,64:1,65:1,65:1 0.0
0:1,0:1,10:1,10:1,28:1,29:1,30:1,30:1,36:1,37:1,37:1,55:1,56:1,57:1,57:1 1.0
2:1,3:1,3:1,12:1,13:1,13:1,20:1,21:1,22:1,22:1,41:1,42:1,43:1,46:1,46:1,63:1,64:1,67:1,68:1,68:1 0.0

one-hot编码

一 功能组件

one-hot编码,也称独热编码,对于每一个特征,如果它有m个可能值,那么经过独热编码后,就变成了m个二元特征。并且,这些特征互斥,每次只有一个激活。因此,数据会变成稀疏的,输出结果也是k:v的稀疏结构。

二 PAI命令

  1. PAI -name fe_binary_runner -project algo_public
  2. -DinputTable=one_hot
  3. -DbinaryCols=edu_num
  4. -DlabelCol=income
  5. -DbinaryReserve=false
  6. -DbinStrategy=noDealStrategy
  7. -DbinaryIndexTable=pai_temp_2458_23436_3
  8. -DmodelTable=pai_temp_2458_23436_2
  9. -DoutputTable=pai_temp_2458_23436_1
  10. -Dlifecycle=28;

三 参数说明

参数名称 参数描述 参数值可选项 默认值
inputTable 必选,输入表的表名 - -
inputTablePartitions 可选,输入表中指定哪些分区参与训练,格式为: partition_name=value。如果是多级,格式为name1=value1/name2=value2;如果指定多个分区,中间用’,’分开 - 输入表的所有partition
binaryCols 必选 one-hot编码字段,必须是枚举类特征,字段类型可以是任意类型 -
binStrategy 必选,编码策略,本组件提供2种编码策略:简单二值化(noDealStrategy),自动二值化(autoStrategy),分类标签必须设置 -
labelCol 分类标签类. 按纯度二值化策略下必选,其他策略下可选 - -
impurityMergeThresh 可选,按纯度二值化策略中,前后二值化特征合并,纯度提升阈值 0.1
densityMergeThresh 可选,按密度二值化策略中,二值化特征密度(占比)合并的阈值 0.1
binaryReserve 可选, 是否输出表中保留原独热编码特征 - -
outputTable 必选,one-hot后的结果表,编码结果保存在kv字段里 - -
binaryIndexTable 必选, kv序列化表,编码特征名与kv中Key的映射关系 - -
modelTable 必选, one-hot编码的映射逻辑,Json格式存放 - -
lifecycle 结果表生命周期,可选,默认7 7

编码策略

  • noDealStrategy: 简单二值化,比如sex特征取值 Female|Male|Unknowed. 那么二值化出来特征是sex_female, sex_male 和 sex_Unknowed
  • autoStrategy:自动二值化. 在简单二值化的基础上,利用逻辑回归算法计算每个one-hot特征,将one-hot特征权重为0的特征合并成独立一项,命名other

实例

1 输入数据

edu_num income
13 <=50K
13 <=50K
9 <=50K
7 <=50K
13 <=50K
14 <=50K
5 <=50K
9 >50K
14 >50K
13 >50K

2. 组件参数

勾选edu_num作为二值化特征, 其他全部采用默认参数,即简单二值化策略,

3. 结果

编码后结果(outputTable)

income kv
<=50K 0:1
<=50K 0:1
<=50K 4:1
<=50K 3:1
<=50K 0:1
<=50K 1:1
<=50K 2:1
>50K 4:1
>50K 1:1
>50K 0:1

kv的序列列表(binaryIndexTable)

featname featindex
edu_num 0
13 0
14 1
5 2
7 3
9 4

异常检测

一 组件功能

支持一下功能

  • 针对连续值特征: 按箱线图最大值和最小值检测异常特征.image

  • 针对枚举值特征: 按照枚举特征的取值频率,按照阈值过滤异常特征

二 PAI 参数

  1. PAI -name fe_detect_runner -project algo_public
  2. -DselectedCols="emp_var_rate,cons_price_rate,cons_conf_idx,euribor3m,nr_employed" \
  3. -Dlifecycle="28"
  4. -DdetectStrategy="boxPlot"
  5. -DmodelTable="pai_temp_2458_23565_2"
  6. -DinputTable="pai_bank_data"
  7. -DoutputTable="pai_temp_2458_23565_1";

三 参数说明

参数名称 参数描述 参数值可选项 默认值
inputTable 必选,输入表的表名 - -
inputTablePartitions 可选,输入表中指定哪些分区参与训练,格式为: partition_name=value。如果是多级,格式为name1=value1/name2=value2;如果指定多个分区,中间用’,’分开 - 输入表的所有partition
selectedCols 必选 输入特征,字段类型可以是任意类型 -
detectStrategy 必选,支持boxPlot和avf 选项,boxPlot是针对连续特征做检测,avf针对枚举类特征做检测 boxPlot
outputTable 必选,过滤检测到的异常特征后数据集 - -
modelTable 必选, 异常检测模型 - -
lifecycle 结果表生命周期,可选,默认7 7

特征重要性过滤

一 组件功能

为线性特征重要性/GBDT 特征重要性/ 随机森林特征重要性等重要性评估组件提供过滤功能.支持过滤topN的特征

二 PAI 命令

  1. PAI -name fe_filter_runner -project algo_public -DselectedCols=pdays,previous,emp_var_rate,cons_price_idx,cons_conf_idx,euribor3m,nr_employed,age,campaign,poutcome
  2. -DinputTable=pai_dense_10_10
  3. -DweightTable=pai_temp_2252_20319_1
  4. -DtopN=5
  5. -DmodelTable=pai_temp_2252_20320_2
  6. -DoutputTable=pai_temp_2252_20320_1;

三 组件参数说明

参数名称 参数描述 参数值可选项 默认值
inputTable 必选,输入原始数据表 - -
inputTablePartitions 可选,输入表中指定哪些分区参与训练,格式为: partition_name=value。如果是多级,格式为name1=value1/name2=value2;如果指定多个分区,中间用’,’分开 - 输入表的所有partition
weightTable 必选,特征重要性的权重表(即线性特征重要性/GBDT特征重要性/随机森林特征重要性的输出表) - -
outputTable 必选, 过滤出TopN个特征的输出表 - -
modelTable 必选,特征过滤产出的模型文件 - -
selectedCols 可选, 默认输入表的所有字段 - -
topN 挑选的TopN个特征,默认10 10
lifecycle 输出表生命周期,可选,默认7 7

四 建模示例

输入数据

特征重要性过滤组件左边输入数据是原始数据表,右边是特征重要性表输出是过滤后的TopN特征数据

ps: 特征重要性表有一定格式要求: 第一字段存储特征名称,第二字段存储该特征对应的权重值,一般为double类型,比如随机森林特征重要性的输出表

Field Type Label Comment
colname string
gini double
entropy double

原始输入数据

  1. creat table if not exists pai_dense_10_10 as
  2. select
  3. age,campaign,pdays, previous, poutcome, emp_var_rate, cons_price_idx, cons_conf_idx, euribor3m, nr_employed, y
  4. from bank_data limit 10;

特征重要性表为随机森林特征重要性组件的输出表.

参数配置

建模流程图( 该组件一般是配合特征重要性组件使用,比如线性特征重要性/GBDT 特征重要性/ 随机森林特征重要性)

image

输入数据为pai_dense_10_10

随机森林和随机森林重要性组件都是勾选y字段为标签类,其他字段为特征列

特征重要性过滤组件参数配置topN为5,表示只过滤top5的特征

image

运行结果

左输出数据结果

nr_employed pdays age euribor3m poutcome
5228.1 999.0 44 4.963 nonexistent
5195.8 999.0 53 4.021 nonexistent
4991.6 6.0 28 0.729 success
5099.1 999.0 39 1.405 nonexistent
5076.2 3.0 55 0.869 success
5228.1 999.0 30 4.961 nonexistent
5099.1 999.0 37 1.327 nonexistent
5099.1 999.0 39 1.313 nonexistent
5076.2 3.0 36 1.266 success
5099.1 999.0 27 1.41 failure

右输出数据为过滤模型,暂无数据

本文导读目录
本文导读目录
以上内容是否对您有帮助?