特征工程

数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已!

数据描述

  • 统计值:max, min, mean, std等
  • 集中趋势
  • 分布形状

特征处理

数据预处理

缺失值处理

  1. 缺失值删除
    • 删除样本
    • 删除特征
  2. 缺失值填充
    • 固定值填充,如0,999,-999
    • 均值填充
    • 众数填充
    • 上下数据填充
    • 插值法填充
    • KNN填充
    • random forest填充
    • 不填充: LightGBM和XGBoost都能对NaN数据进行学习,不需要处理缺失值

异常值处理

  1. 基于统计的异常点检测算法 例如极差,四分位数间距,均差,标准差等,这种方法适合于挖掘单变量的数值型数据。
  2. 基于距离的异常点检测算法 主要通过距离方法来检测异常点,将数据集中与大多数点之间距离大于某个阈值的点视为异常点,主要使用的距离度量方法有绝对距离(曼哈顿距离)、欧氏距离和马氏距离等方法。
  3. 基于密度的异常点检测算法 考察当前点周围密度,可以发现局部异常点。

特征转换

连续型特征

  1. 函数转换:有时我们的模型的假设条件是要求自变量或因变量服从某特殊分布(如正太分布),或者说自变量或因变量服从该分布时,模型的表现较好。

  2. 特征缩放:某些模型(像岭回归)要求你必须将特征值缩放到相同的范围值内。通过缩放可以避免某些特征比其他特征获得大小非常悬殊的权重值。

  3. 无量纲化:无量纲化使不同规格的数据转换到同一规格。

    • 标准化

      • 均值方差法
      • z-score标准化
      • StandardScaler标准化
    • 归一化

      • 最大最小归一化
      • 对数函数转化(log)
      • 反余切转化
    • 区间缩放法:区间缩放法的思路有多种,常见的一种为利用两个最值进行缩放。
      $$
      x^{\prime}=\frac{x-Min}{Max-Min}
      $$

  4. 二值化(定量特征):特征的二值化处理是将数值型数据输出为布尔类型。其核心在于设定一个阈值,当样本书籍大于该阈值时,输出为1,小于等于该阈值时输出为0。

  5. 离散化分箱处理:将数值型属性转换成类别型更有意义,同时将一定范围内的数值划分成确定的块,使算法减少噪声的干扰,避免过拟合。

    • 等值划分

    • 等频划分

离散化特征

  1. 数值化处理:将类别属性转换成一个标量,最有效的场景应该就是二分类的情况。这种情况下,并不需要排序,并且你可以将属性的值理解成属于类别1或类别2的概率。 多分类问题:选取多分类,编码到[0,classnum)。

    该方法局限性较大:

    • 不适用于建立预测具体数值的模型,比如线性回归,只能用于分类,
    • 即使用于分类,也有一些模型不适合,
    • 可能结果的精度不如one-hot编码。
  2. 哑编码

    • 独热编码(one-hot):数据集中的每个实例,只有一个是1(其他的为0)

      • 优点:简单,且保证无共线性。
      • 缺点:太稀(稀疏矩阵)
    • 顺序性哑变量:将一个变量的k个值生成k个哑变量,保护了特征的顺序关系。

      status 向量表示
      bad (1,0,0)
      normal (1,1,0)
      good (1,1,1)

特征选择

特征检验

单变量

  1. 正态性检验
  2. 显著性分析

多变量

  1. 一致性检验
  2. 多重共线性

特征选择

Filter:过滤法

按照发散性或者相关性对各个特征进行评分,设定阈值或者待选择阈值的个数,选择特征。过滤式特征选择的评价标准分为四种,即距离度量、信息度量、关联度度量以及一致性度量。

**优点:**算法的通用性强;省去了分类器的训练步骤,算法复杂性低,因而适用于大规模数据集;可以快速去除大量不相关的特征,作为特征的预筛选器非常合适。

缺点:由于算法的评价标准独立于特定的学习算法,所选的特征子集在分类准确率方面通常低于Wrapper方法。

  1. 方差选择法

    计算各个特征的方差,选择方差大于阈值的特征 。

  2. 相关系数法

    计算各个特征对目标值的相关系数以及相关系数的P值。
    $$
    \rho_{\boldsymbol{x},\boldsymbol{y}}=\frac{\text{cov}(\boldsymbol{x},\boldsymbol{y})}{\sigma_\boldsymbol{x}\sigma_\boldsymbol{y}}=\frac{E[(\boldsymbol{x}-\mu_\boldsymbol{x},\boldsymbol{y}-\mu_\boldsymbol{y})]}{\sigma_\boldsymbol{x}\sigma_\boldsymbol{y}}
    $$
    使用条件:

    1. 两个变量间有线性关系;
    2. 变量是连续变量;
    3. 变量均符合正态分布,且二元分布也符合正态分布;
    4. 两变量独立;
    5. 两变量的方差不为 0;
  3. 互信息法

    互信息(mutual information)是用来评价一个事件的出现对于另一个事件的出现所贡献的信息量。
    $$
    I(X;Y) = \sum\limits_{y \in \mathcal{Y}}\sum\limits_{x \in \mathcal{X}} p(x,y) ,\text{log}\left(\frac{p(x,y)}{p(x)p(y)}\right)
    $$
    而如果 𝑥 和 𝑦 是相互独立的随机变量,则 𝑝(𝑥,𝑦)=𝑝(𝑥)𝑝(𝑦) ,那么上式为 0。因此若 𝐼(𝑋;𝑌)越大,则表示两个变量相关性越大,于是就可以用互信息来筛选特征。

  4. 卡方检验(Chi-Square)

    卡方检验恰好可以进行独立性检验,所以其适用于特征选择。

    卡方分布,其定义如下:

    设随机变量$x_1, x_2 … x_n ,,\quad \text{i.i.d} \sim N(0,1)$,即独立同分布于标准正态分布,那么这 𝑛个随机变量的平方和:
    $$
    X = \sum\limits_{i=1}^n x_i^2
    $$
    构成一个新的随机变量,其服从自由度为 𝑛 的卡方分布 ( 𝜒2 分布) ,记为 $X \sim \chi^2_n$。

    计算检验统计量 𝜒2 ( 𝜒2χ表示卡方值) ,𝜒2 越大,表示观测值和理论值相差越大,当 𝜒2 大于某一个临界值时,就能获得统计显著性的结论。
    $$
    \chi^2 = \sum\frac{(观测频数 - 期望频数)^2}{期望频数}= \sum_{i=1}^{r} \sum_{j=1}^{c} {(O_{i,j} - E_{i,j})^2 \over E_{i,j}}
    $$

Wrapper:包装法

根据目标函数(通常是预测效果评分),每次选择若干特征,或者排除若干特征。

Embedded:嵌入法

先使用某些机器学习的算法和模型进行训练,得到各个特征的权值系数,根据系数从大到小选择特征。类似于Filter方法,但是是通过训练来确定特征的优劣。

参考文献

  1. 深度了解特征工程
  2. 常用的特征选择方法之 Pearson 相关系数
  3. [特征选择: 卡方检验、F 检验和互信息](https://www.cnblogs.com/massquantity/p/10486904.html)