特征工程

转自:

https://www.alibabacloud.com/help/zh/doc-detail/69558.htm#%E7%89%B9%E5%BE%81%E5%BC%82%E5%B8%B8%E5%B9%B3%E6%BB%91

特征工程

更新时间: 2018-05-02

目录

主成分分析

  • 主成分分析算法(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必选,进行主成分分析的输入表NANA
eigOutputTableName必选,特征向量与特征值的输出表NANA
princompOutputTableName必选,进行主成分降维降噪后的结果输出表NANA
selectedColNames必选,参与主成分分析运算的特征列NANA
transType可选,原表转换为主成分表的方式支持Simple、Sub-Mean、NormalizationSimple
calcuType可选,对原表进行特征分解的方式支持CORR、COVAR_SAMP、COVAR_POPCORR
contriRate可选,降维后数据信息保留的百分比(0,1)0.9
remainColumns可选,降维表保留原表的字段NANA

输出示例

  • 降维后的数据表,如下图所示。
    image

  • 特征值和特征向量表,如下图所示。
    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必选,输入表的表名NANA
inputTablePartitions可选,输入表中指定哪些分区参与训练,格式为partition_name=value。如果是多级,格式为name1=value1/name2=value2。如果指定多个分区,中间用“,”分开NA输入表的所有partition
outputTable必选,尺度缩放后结果表NANA
scaleCols必选,勾选需要缩放的特征,稀疏特征自动化筛选,只能勾选数值类特征NANA
labelCol可选,标签字段。如果设置了该参数,可视化特征到目标变量的x-y分布直方图NANA
categoryCols可选,将勾选的字段视作枚举特征处理,不支持缩放NANA
scaleMethod可选,缩放方法支持log2、log10、ln、abs、sqrtlog2
scaleTopN当scaleCols没有勾选时,自动挑选的TopN个需要缩放特征特征,默认10正整数10
isSparse是否是k:v的稀疏特征,可选,默认稠密数据ture/falsefalse
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

特征离散

  • 支持等距离散、等频离散、基于Gini增益离散、基于熵增益离散,默认为等距离散。
  • 支持稠密或稀疏数据格式。

PAI 命令

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

算法参数

参数名称参数描述参数值可选项默认值
inputTable必选,输入表的表名NANA
inputTablePartitions可选,输入表中指定哪些分区参与训练,格式为partition_name=value。如果是多级,格式为name1=value1/name2=value2,如果指定多个分区,中间用“,”分开NA输入表的所有partition
outputTable必选,离散后结果表NANA
discreteCols必选,勾选需要离散的特征,如果是稀疏特征会自动化筛选NA“”
labelCol可选,标签字段,如果设置了该标签列,可视化特征到目标变量的x-y分布直方图NANA
categoryCols可选,将勾选的字段视作枚举特征处理,不支持离散NA默认为空
discreteMethod可选,离散方法目前支持Isometric Discretization(等距离散)、Isofrequecy Discretization(等频离散)、Gini-gain-based Discretization(基于Gini增益离散)、Entropy-gain-based Discretization(基于熵增益离散)Isometric Discretization
discreteTopN当discreteCols没有勾选时,自动挑选的TopN个需要离散特征特征,默认10正整数10
maxBins离散区间大小,默认100大于1的正整数100
isSparse是否是k:v的稀疏特征,可选,默认稠密数据true/falsefalse
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

特征异常平滑

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

平滑方法包括Zscore平滑、百分位平滑和阈值平滑,功能如下:

  • Zscore平滑:如果特征分布遵循正态分布,那么噪音一般集中在-3×alpha和3×alpha之外,ZScore是将该范围的数据平滑到[-3×alpha,3×alpha]之间。
    例如某个特征遵循正态分布,均值为0,标准差为3,因此-10的特征值会被识别为异常而修正为-3×3+0,即为-9。同理10会被修正为3×3+0,即为9,如下图所示。
    image

  • 百分位平滑: 将分布在[minPer, maxPer]分位之外的数据平滑到minPer和maxPer这两个分位点。
    例如age特征取值0~200,设置minPer为0,maxPer为50%,那么在0~100之外的特征取值都会被修正成0或100。

  • 阈值平滑: 将分布在[minThresh, maxThresh]之外的数据平滑到minThresh和maxThresh这两个数据点。
    例如age特征取值0~200,设置minThresh为10,maxThresh为80,那么在0~80之外的特征取值都会被修正成0或80。

PAI 命令

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

算法参数

参数名称参数描述参数值可选项默认值
inputTable必选,输入表的表名NANA
inputTablePartitions可选,输入表中指定哪些分区参与训练,格式为partition_name=value。如果是多级,格式为name1=value1/name2=value2,如果指定多个分区,中间用“,”分开NA输入表的所有partition
outputTable必选,平滑后结果表NANA
labelCol可选,标签字段,如果设置了该标签列,可视化特征到目标变量的x-y分布直方图NA默认为空
categoryCols可选,将勾选的字段视作枚举特征处理NA默认为空
softenCols必选,勾选需要平滑的特征,但特征是稀疏特征时会自动化筛选NANA
softenMethod可选,平滑方法支持ZScore平滑、min-max-thresh(阈值平滑)、min-max-per(百分位平滑)ZScore
softenTopN当softenCols没有勾选时,自动挑选TopN个需要平滑的特征正整数10
cl置信水平,当平滑方法是ZScore时生效NA10
minPer最低百分位,当平滑方法是min-max-per时生效NA0.0
maxPer最高百分位,当平滑方法是min-max-per时生效NA1.0
minThresh阈值最小值,默认-9999,表示不设置,当平滑方法是min-max-thresh时生效NA-9999
maxThresh阈值最大值,默认-9999,表示不设置,当平滑方法是min-max-thresh时生效NA-9999
isSparse是否是k:v的稀疏特征,可选,默认稠密数据true/falsefalse
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
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必选,输入表NANA
outputTableName必选,输出表NANA
labelColName必选,label所在的列NANA
modelName必选,输入的模型名NANA
featureColNames可选,输入表选择的特征NA默认除label外的其他列
inputTablePartitions可选,输入表选择的分区NA默认选择全表
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为随机森林的标签列,其他列为特征列。强制转换列选择agecampaign,表示将这两列作为枚举特征处理,其他采用默认参数。
image

运行结果

colnameginientropy
age0.066250000000000030.13978726292803723
campaign0.00175000000000000030.004348515545596772
cons_conf_idx0.0139999999999999990.02908409497018851
cons_price_idx0.0020.0049804499913461255
emp_var_rate0.0147000000000000030.026786360680260933
euribor3m0.063000000000000030.1321936348846039
nr_employed0.104999999999999980.2203227248076733
pdays0.08450.17750329234397513
poutcome0.033600000000000010.07050327193845542
previous0.0177000000000000040.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
  4. -DoutputTableName=pai_temp_2252_20308_1
  5. -DlabelColName=y
  6. -DfeatureColNames=pdays,previous,emp_var_rate,cons_price_idx,cons_conf_idx,euribor3m,nr_employed,age,campaign
  7. -DinputTableName=pai_dense_10_9;

算法参数

参数名称参数描述参数值可选项默认值
inputTableName必选,输入表NANA
outputTableName必选,输出表NANA
labelColName必选,label所在的列NANA
modelName必选,输入的模型名NANA
featureColNames可选,输入表选择的特征NA默认除label外的其他列
inputTablePartitions可选,输入表选择的分区NA默认选择全表
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。y为GBDT二分类组件的标签列,其他字段作为特征列,组件参数配置中叶节点最小样本数配置为1

image

运行结果

colnamefeature_importance
age0.004667214954427797
campaign0.001962038566773853
cons_conf_idx0.04857761873887033
cons_price_idx0.01925292649801252
emp_var_rate0.044881269590771274
euribor3m0.025034606434306696
nr_employed0.036085457464908766
pdays0.639121250405536
previous0.18041761734639272

运行完成后,在GBDT特征重要性组件上右键单击,选择查看分析报告,结果如下图所示。

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必选,输入表NANA
outputTableName必选,输出表NANA
modelName必选,输入的模型名NANA
labelColName必选,label所在列NANA
feaureColNames可选,输入表选择的特征NA默认除label外的其他列
inputTablePartitions可选,输入表选择的分区NA默认选全表
enableSparse可选,输入表数据是否为稀疏格式true/falsefalse
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

运行结果

colnameweightimportance
pdays0.03394260025658333416.31387797440866
previous0.000042481303424853440.000030038817725357177
emp_var_rate0.000067202426176946110.00010554561260753949
cons_price_idx0.000123110472291423070.00006581255124425219
cons_conf_idx0.000172279654718192130.0008918770542818432
euribor3m0.000061137582126791130.00010427128177450988
nr_employed0.00345413773104906970.26048098230126043
age0.000096181627080807440.0009267659744232966
campaign0.0000191425517852744550.000041793353660529855

指标计算公式

列名公式
weightabs(w_)
importanceabs(w_j) * STD(f_i)

运行完成后,在线性模型特征重要性组件上右键单击,选择查看分析报告,结果如下图所示。

image

偏好计算

给定用户明细行为特征数据,自动计算用户对特征值的偏好得分。

  • 输入表包含用户id和用户明细行为特征输入。假设在口碑到店场景,某用户2088xxx1在3个月内吃了两次川菜,一次西式快餐,那么输入表形式如下:

    user_idcate
    2088xxx1川菜
    2088xxx1川菜
    2088xxx1西式快餐
  • 输出表为用户对川菜和西式快餐的偏好得分,形式如下:

    user_idcate
    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输入表名必填NA
IdColumnName用户id列必填NA
FeatureColNames用户特征列必填NA
OutputTableName输出表名必填NA
OutputTablePartitions输出表分区选填NA
mapInstanceNummapper数量选填2
reduceInstanceNumreducer数量选填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. +------------+------------+

过滤式特征选择

根据用户不同的特征选择方法,选择并过滤出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必选,输入表的表名NANA
inputTablePartitions可选,输入表中指定哪些分区参与训练,格式为partition_name=value。如果是多级,格式为name1=value1/name2=value2,如果指定多个分区,中间用“,”分开NA输入表的所有partition
outputTable必选,过滤后的特征结果表NANA
featImportanceTable必选,存放所有输入特征的重要性权重值NANA
selectedCols必选,特征列NANA
labelCol必选,标签列/目标列NANA
categoryColsInt或者Double字符的枚举特征,可选NA默认为空
maxBins连续类特征划分最大区间数,可选大于1的正整数100
selectMethod特征选择方法,可选目前支持IV(Information Value),Gini增益,信息增益,LassoIV
topN挑选的TopN个特征,如果TopN大于输入特征数,则输出所有特征,可选正整数10
isSparse是否是k:v的稀疏特征,可选,默认稠密数据true/falsefalse
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

运行结果

左输出是过滤后的数据,如下表所示。

pdaysnr_employedemp_var_ratecons_conf_idxcons_price_idxy
999.05228.11.4-36.193.4440.0
999.05195.8-0.1-42.093.20.0
6.04991.6-1.7-39.894.0551.0
999.05099.1-1.8-47.193.0750.0
3.05076.2-2.9-31.492.2011.0
999.05228.11.4-42.793.9180.0
999.05099.1-1.8-46.292.8930.0
999.05099.1-1.8-46.292.8930.0
3.05076.2-2.9-40.892.9631.0
999.05099.1-1.8-47.193.0750.0

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

featureNameweight
pdays30.675544191232486
nr_employed29.08332850085075
emp_var_rate29.08332850085075
cons_conf_idx28.02710269740324
cons_price_idx28.02710269740324
euribor3m27.829058450563718
age27.829058450563714
previous14.319325030742775
campaign10.658129656314467

weight计算公式如下:

选择方法weight含有
IV信息价值
GiniGainGini增益
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输入表名必填NA
userName用户id列必填NA
dtName时间列(格式“20160101”)必填NA
cntName次数列必填NA
amtName金额列必填NA
window时间窗口(格式为“1,7,30,90…”)必填NA
outputTableName输出表名必填NA
outputTablePartitions输出表分区选填NA
mapInstanceNummapper数量选填2
reduceInstanceNumreducer数量选填2

实例

输入数据

 
  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. +------------+------------+------------+------------+------------+-------------+-------------+-------------+-------------+

特征编码

由决策树和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必选,输入表的表名NANA
inputTablePartitions可选,输入表中指定哪些分区参与训练,格式为partition_name=value。如果是多级,格式为name1=value1/name2=value2,如果指定多个分区,中间用“,”分开NA输入表的所有partition
encodeModel必选,编码输入的GBDT二分类模型NANA
outputTable必选,尺度缩放后结果表NANA
selectedCols必选,勾选GBDT参与编码的特征,一般是GBDT组件的训练特征NANA
labelCol必选,标签字段NANA
lifecycle可选,结果表生命周期正整数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树最大深度3y字段为标签列,其他字段为特征列,运行结果如下。

运行结果

kvy
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:10.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:10.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:11.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:10.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:11.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:10.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:10.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:10.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:11.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:10.0

one-hot编码

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

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

编码策略说明:

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

实例

输入数据

edu_numincome
13<=50K
13<=50K
9<=50K
7<=50K
13<=50K
14<=50K
5<=50K
9>50K
14>50K
13>50K

参数配置

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

运行结果

编码结果(outputTable)如下所示:

incomekv
<=50K0:1
<=50K0:1
<=50K4:1
<=50K3:1
<=50K0:1
<=50K1:1
<=50K2:1
>50K4:1
>50K1:1
>50K0:1

kv的序列列表(binaryIndexTable)如下所示:

featnamefeatindex
edu_num0
130
141
52
73
94

异常检测

  • 针对连续值特征:按照箱线图最大值和最小值检测异常特征,如下图所示。
    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必选,输入表的表名NANA
inputTablePartitions可选,输入表中指定哪些分区参与训练,格式为partition_name=value。如果是多级,格式为name1=value1/name2=value2,如果指定多个分区,中间用“,”分开NA输入表的所有partition
selectedCols必选 输入特征,字段类型可以是任意类型NANA
detectStrategy必选,支持boxPlot和avf选项,boxPlot是针对连续特征做检测,avf针对枚举类特征做检测boxPlot/avfboxPlot
outputTable必选,过滤检测到的异常特征数据集NANA
modelTable必选,异常检测模型NANA
lifecycle结果表生命周期,可选,默认7正整数7

特征重要性过滤

该组件为线性特征重要性、GBDT特征重要性、随机森林特征重要性等重要性评估组件提供过滤功能,支持过滤TopN的特征。

PAI 命令

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

算法参数

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

实例

输入数据

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

 
  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;

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

参数配置

建模流程图如下图所示。

image

输入数据为pai_dense_10_10。勾选随机森林和随机森林重要性组件,选择y字段为标签列,其他字段为特征列。
设置特征重要性过滤组件TopN 特征5,表示只过滤top5的特征,如下图所示。

image

运行结果

特征重要性过滤组件的输出结果是过滤后的TopN特征数据。

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

FieldTypeLabelComment
colnamestring  
ginidouble  
entropydouble  

左输出数据结果:

nr_employedpdaysageeuribor3mpoutcome
5228.1999.0444.963nonexistent
5195.8999.0534.021nonexistent
4991.66.0280.729success
5099.1999.0391.405nonexistent
5076.23.0550.869success
5228.1999.0304.961nonexistent
5099.1999.0371.327nonexistent
5099.1999.0391.313nonexistent
5076.23.0361.266success
5099.1999.0271.41failure

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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
特征工程是指从原始数据中提取特征以供机器学习算法和模型使用的一项工程活动。在Matlab中进行特征工程时,可以使用不同的方法来处理特征。 其中,对于定性特征(也称为分类特征),需要将其转换为定量特征(也称为数值特征),因为某些机器学习算法和模型只接受定量特征的输入。一种常用的方法是使用OneHot编码,即为每一种定性值指定一个定量值。这种方式避免了手动调参的工作,并且对于线性模型来说,使用OneHot编码后的特征可以达到非线性的效果。 另外,在特征工程中还需要注意数值问题。例如,如果输入的数值很大,而有效权值很小,可能导致数值精度问题。在Matlab中,可以通过合适的数值处理方式来解决这个问题,确保数值计算的准确性。 总结起来,在Matlab中进行特征工程包括从原始数据中提取特征,并使用合适的方法处理定性特征和数值精度问题,以提高机器学习算法和模型的性能。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [特征工程系列(一):特征工程的概念/特征的处理](https://blog.csdn.net/Myordry/article/details/105347182)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值