特征异常平滑是机器学习中的一种预处理技术,用于处理输入特征中存在的异常值。该技术通过将异常数据平滑到一定区间内,使得数据分布更为均匀,从而提高模型的稳定性和预测性能。特征异常平滑支持处理稀疏和稠密数据格式,确保在不同类型的数据集上都能有效应用。
算法说明
平滑方法如下:
ZScore平滑
如果特征分布遵循正态分布,则噪音一般集中在-3×alpha和3×alpha之外,ZScore是将该范围的数据平滑到[-3×alpha,3×alpha]之间。
例如,某个特征遵循正态分布,均值为0,标准差为3。因此,-10的特征值会被识别为异常而修正为-3×3+0,即为-9。同理10会被修正为3×3+0,即为9。
百分位平滑
用于将分布不在[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。
箱线图平滑
通过数据的4分位线构造光滑的上下界阈值,构造方式为:minThresh=q1-1.5(q3-q1),maxThresh=q3+1.5(q3-q1)。
特征平滑算法组件只是将异常取值的特征值修正为正常值,本身不过滤或删除任何记录,输入数据维度和条数均不变。
组件配置
方式一:可视化方式
在Designer工作流页面添加特征异常平滑组件,并在界面右侧配置相关参数:
参数类型 | 参数 | 描述 |
字段设置 | 选择平滑特征列 | 需要平滑处理的特征列。 |
标签列 | 如果您设置了该字段,则可以通过可视化方式查看特征到目标变量的x-y分布直方图。 | |
参数设置 | 平滑方法 | 平滑方法如下:
|
置信范围 | 置信水平。当平滑方法为ZScore平滑时需要配置该参数。 | |
阈值下限 | 阈值最小值,默认为-9999,表示不设置。 当平滑方法为阈值平滑时需要配置该参数。 | |
阈值上限 | 阈值最大值,默认为-9999,表示不设置。 当平滑方法为阈值平滑时需要配置该参数。 | |
百分位下限 | 最低百分位。 当平滑方法为百分位平滑或箱线图平滑时需要配置该参数。 | |
百分位上限 | 最高百分位。 当平滑方法为百分位平滑或箱线图平滑时需要配置该参数。 |
方式二:PAI命令方式
使用PAI命令配置特征异常平滑组件参数。您可以使用SQL脚本组件进行PAI命令调用,详情请参见SQL脚本。
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 | 否 | 输入表的所有分区。 | 输入表中指定参与训练的分区,格式为 如果是多级分区,格式为 如果指定多个分区,则需要使用,隔开。 |
outputTable | 是 | 无 | 平滑后的结果表。 |
labelCol | 否 | 默认为空 | 标签字段。如果您设置了该字段,则可以通过可视化方式查看特征到目标变量的x-y分布直方图。 |
categoryCols | 否 | 默认为空 | 将勾选的字段作为枚举特征处理。 |
softenCols | 是 | 无 | 选择需要平滑的特征。如果特征为稀疏特征时,系统会自动化筛选。 |
softenMethod | 否 | ZScore | 平滑方法如下:
|
softenTopN | 否 | 10 | 当未勾选softenCols参数时,系统自动挑选TopN个需要平滑的特征。取值为正整数。 |
cl | 否 | 10 | 置信水平。当平滑方法为ZScore平滑时需要配置该参数。 |
minPer | 否 | 0.0 | 最低百分位。当平滑方法为百分位平滑或箱线图平滑时需要配置该参数。 |
maxPer | 否 | 1.0 | 最高百分位。当平滑方法为百分位平滑或箱线图平滑时需要配置该参数。 |
minThresh | 否 | -9999 | 阈值最小值。当平滑方法为阈值平滑时需要配置该参数。 |
maxThresh | 否 | -9999 | 阈值最大值。当平滑方法为阈值平滑时需要配置该参数。 |
isSparse | 否 | false | 是否为k:v的稀疏特征,取值如下:
默认为稠密数据。 |
itemSpliter | 否 | , | 稀疏特征item的分隔符。 |
kvSpliter | 否 | : | 稀疏特征item的分隔符。 |
lifecycle | 否 | 结果表生命周期。取值为正整数。 | |
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