> 文章列表 > 使用 sklearn 的特征工程

使用 sklearn 的特征工程

使用 sklearn 的特征工程

文章目录

  • 特征工程
    • 数据预处理
    • 特征处理
    • 特征降维
      • 特征选择
      • 线性降维

特征工程

特征工程的处理流程为:

  • 去掉无用特征、去掉冗余特征(如共线性特征)
  • 利用存在的特征、转换特征、内容中的特征以及其他数据源生成新特征
  • 对特征进行转换:数值化、类别转换、归一化
  • 对特征进行处理,以符合模型使用:异常值、最大值、最小值、缺失值

数据预处理

数据采集:需要明确,哪些数据对最后的预测结果有帮助、是否需要采集这一类数据、在线上实时计算时数据获取是否快捷;

数据清洗:去除“脏”数据:

  • 简单属性判定:不符合常理的,例如身高3米多的人;
  • 组合或统计属性判定:如号称在美国却一直都是国内的新闻阅读用户
  • 补齐可对应的缺省值:将不可信的样本丢掉,不用缺省值极多的字段

数据采样:数据经过采集、清洗过后,正负样本往往不均衡,故要进行数据采样。采样有随机采样和分层采样。随机采样存在隐患,往往根据特征使用分层采样。正负样本不均衡的处理方法:

  • 正样本 > 负样本,且样本量都特别大的情况,采用下采样的方法,即随机删除正样本中的数据,使得正负样本量相等;
  • 正样本 > 负样本,且样本量不大的情况,可以用以下方法采集更多的数据:上采样(如图像识别中的镜像和旋转、SMOTE、随机复制)、修改损失函数设置样本权重

特征处理

特征处理 功能 说明
标准化 StandardScaler 无量纲化 基于特征矩阵的列,将特征值转换为服从标准正态分布的z值
区间缩放 MinMaxScaler 无量纲化 基于特征矩阵的列的最大最小值,将特征转换到[0, 1]区间
归一化 Normalizer 归一化 基于特征矩阵的行,将样本向量转换为单位向量
定量特征二值化 Binarizer 定量特征二值化 基于给定阈值,将定量特征按照阈值划分为 0/1 二值变量
定性特征哑变量 OneHotEncoder 定性特征哑变量 将n种处理的定性特征编码为n-1个二值变量
缺失值处理 Imputer 缺失值处理 缺失值可填充为均值、中位数等
多项式数据转换 PolynomialFeatures 多项式数据转换 多项式数据转换
自定义单元数据转换 FunctionTransformer 自定义单元数据转换 使用单变量函数转换数据,例如进行开方变换、对数变量、指数变换等

归一化与标准化的适用场景:

  • 如果对输出结果范围有要求,则使用归一化;
  • 如果数据较为稳定,不存在极端的最大值或最小值,则用归一化;
  • 如果数据存在异常值和较多噪声,则使用标准化,这样可以通过中心化简介避免异常值和极端值的影响;
  • SVM、KNN、PCA 等模型都必须进行归一化或标准化操作。

特征降维

特征选择

特征选择的方法:

  • 过滤法(Filter):按照发散性或者相关性对各个特征进行评分(例如相关系数、卡方检验、信息增益、互信息等),通过设定阈值或者待选择特征数来选择特征;
  • 包装法(Wrapper):根据目标函数(通常是预测效果评分,如 AUC、MSE)每次选择若干特征,或排除若干特征。可以通过完全搜索、启发搜索、随即搜索(如遗传算法 GA、模拟退火算法 SA)实现;
  • 嵌入法(Embeded):使用机器学习的某些算法和模型进行训练,得到各个特征的权值系数,并根据系数从大到小选择特征。类似于过滤法,区别在于得分是通过训练来确定的,如正则化、决策树、深度学习等。
所属方法 描述
VarianceThreashHold Filter 方差选择法,根据阈值选择方差大于阈值的特征
SelectKBest Filter 将可选相关系数、卡方检验或最大信息系数作为得分计算的方法
RFE Wrapper 递归消除特征法,使用一个基模型进行多轮训练
SelectFromModel Embeded 基于模型的特征选择法,可以选择带惩罚项的基模型,也可以选择树模型

线性降维

线性降维常用方法:主成分分析法和线性判别分析法

主成分分析法(PCA):无监督,通过某种线性投影,将高位的数据映射到低维空间中,并期望在所投影的维度上数据方差最大,即保留较多的原数据点特性的效果。sklearn 类为 sklearn.decomposition.PCA,其参数 n_components 大于一时代表目标维度,小于一时代表保留的信息数据百分比。

线性判别分析法(LDA):也成为 Fisher 线性判别(FLD),有监督,相比于 PCA,我们希望映射过后:① 同类的数据点尽可能地接近;② 不同类的数据点尽可能地分开;sklearn 类为 sklearn.disciminant_analysis.LinearDiscriminantAnalysis,其参数 n_components 代表目标维度。