Skip to content

Serving特征工程组件介绍

zazd edited this page Feb 20, 2020 · 3 revisions

特征工程组件介绍

目前FATE-serving提供了以下特征工程组件,下面将会一一介绍。

纵向特征分箱(Hetero Feature Binning)

该模块利用训练得到的模型,根据训练时输入的不同参数,将数据转化为数据所在分箱的index。

文件结构

该模块由三个文件组成,分别是HeteroFeatureBinning.java, HeteroFeatureBinningGuest.java以及HeteroFeatureBinningHost.java。其中HeteroFeatureBinning是HeteroFeatureBinningGuest和HeteroFeatureBinningHost的基类。而HeterFeatureBinning继承了ModelBase。ModelBase是所有模型组件的基类。

参数和方法说明

  1. initModel: 将模型的参数和结果,也就是Meta和param文件,反序列化从而对Serving模型初始化。其中从离线模型中继承的参数有:

    • need_run:是否需要执行,如果为否,这个组件在后续预测时将被跳过
    • transformCols: 需要对哪些列做转化
    • featureBinningResult: 特征分箱后的结果。其中,包含每个特征的,分箱点,woe等
  2. handlePredict: 进行转化功能,将数据和模型结果中的splitPoint比较,确定属于哪个分箱后,用分箱的index代替原值。

纵向特征选择(Hetero Feature Selection)

根据训练所得的模型,直接选取在模型中保留的特征,其余特征被过滤掉。

文件结构

该模块由三个文件组成,分别是FeatureSelection.java, HeteroFeatureSelectionGuest.java以及HeteroFeatureSelectionHost.java。其中FeatureSelection是HeteroFeatureSelectionGuest和HeteroFeatureSelectionHost的基类。而FeatureSelection继承了ModelBase。ModelBase是所有模型组件的基类。

参数和方法说明

  1. initModel: 将模型的参数和结果,也就是Meta和param文件,反序列化从而对Serving模型初始化。其中从离线模型中继承的参数有:

    • need_run:是否需要执行,如果为否,这个组件在后续预测时将被跳过
    • finalLeftCols: 经过特征选择后,需要保留的列名。
  2. handlePredict: 进行转化功能,将输入数据中,属于最终需要保留的变量留下,其余变量被过滤掉。

One-Hot组件

利用训练得到的模型,将预测数据转成one-hot模式。请注意,该组件目前只支持整形数的输入,如果原始数据不是整数,可以配合Feature-binning组件使用。

该组件的文件为OneHotEncoder.java。

参数和方法说明

  1. initModel: 将模型的参数和结果,也就是Meta和param文件,反序列化从而对Serving模型初始化。其中从离线模型中继承的参数有:

    • need_run:是否需要执行,如果为否,这个组件在后续预测时将被跳过
    • cols: 需要做转化的列名
    • colsMapMap: 每个需要转化的列,各种可能的值对应的新列名
  2. handlePredict: 进行转化功能,对每个需要转化的输入数据,和colsMapMap中的key做对比,当相等时,将对应的新列名的值设定为1,其余值均设定为0.如果其中没有值与输入数据相等,则所有新列名对应的值均为0.

Scale组件

利用训练得到的模型,对预测数据进行归一化。目前之前的归一化包括min-max-scale和standard-scale 该组件的文件包括Scale.java, MinMaxScale.java, StandardScale.java

参数和方法说明

  1. initModel: 将模型的参数和结果,也就是Meta和param文件,反序列化从而对Serving模型初始化。其中从离线模型中继承的参数有:
    • need_run:布尔类型,是否需要执行,如果为否,这个组件在后续预测时将被跳过
    • method: 字符串类型,离线归一化的方法,包括min-max-scale和standards-scale
    • mode:字符串类型,归一化对应的模式,包括"normal"和"cap"
    • area: 字符串类型,归一化的范围,"all"表示全部列都归一化,"col"表示只对参数"scale_column"对应的列进行归一化
    • scale_column: 字符串数组,参见"area"
    • feat_upper: 字符串数组,未归一化前,每一列特征数据的上限,当数据值超过上限,则用上限值代替原来的值
    • feat_lower: 字符串数组,未归一化前,每一列特征数据的下限,当数据值低于下限,则用下限值代替原来的值
    • with_mean: 布尔类型,standard-scale方法对应的参数,当为True时候,原始数值会减去均值
    • with_std: 布尔类型,standard-scale方法对应的参数,当为True时候,数值会除以标准差
    • column_upper: 浮点数数组,表示每一列的上限,参见"feat_upper"
    • column_lower: 浮点数数组,表示每一列的下限,参见"feat_lower"
    • mean: 浮点数数组,表示每一列的均值,参见"with_mean"
    • std: 浮点数数组,表示每一列的标准差,参见"with_std"
  2. transform: 利用离线训练产生的数据,对在线数据做同样处理。根据归一化方法的不同,处理方法分别对应min-max-scale和standard-scale

Imputer组件

缺失值在线处理模块,若离线建模,dataio有应用到缺失值处理,则在线推理也会经过相应处理,和dataio一样,缺失值模块会优先于其他在线推理组件。缺失值组件对应的文件为Imputer.java

参数和方法说明

  1. Imputer: 初始化模型参数,包括:
    • missingValueSet: 离线训练时,包含异常值的每一列的列名,即变量名
    • missingReplaceValues: key-value格式,离线训练时,每一列的异常值和对应的替换值
  2. transform: 异常值替换功能,具体逻辑为: a.搜索变量是否在离线训练时候进行过异常值处理 b.对进行过异常值处理的变量对应的值,搜索是否在missingReplaceValues中,若在,用替换值替代

Outlier组件

异常值在线处理模块,若离线建模,dataio有应用到异常值处理,则在线推理也会经过相应处理,和dataio一样,异常值模块会优先于其他在线推理组件,在缺失值组件后面。异常值对应的文件为Outlier.java。

参数和方法说明

  1. Outlier: 初始化模型参数,包括:
    • outlierValueSet: 离线训练时,包含缺失值的每一列的列名,即变量名
    • outlierReplaceValues: key-value格式,离线训练时,每一列的缺失值和对应的替换值
  2. transform: 缺失值替换功能,具体逻辑为: a.搜索变量是否在离线训练时候进行过缺失值处理 b.对进行过缺失值处理的变量对应的值,搜索是否在missingReplaceValues中,若在,用替换值替代

以上模块在在线推理阶段,皆是单边运行,不涉及多方交互的流程。

Clone this wiki locally