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

1.特征提取

复杂的模型在一定程度上减少了特征工程需要做的工作
1 理解业务数据和业务逻辑,特征提取的目标是对业务进行精确,全面的描述
2 理解模型和算法,什么样的特征输入才能有较精确的预测结果

1.1探索性数据分析(EDA)

当没有足够专业领域知识的情况下,通过探索性数据分析往往能够发现不错的特征。

  • EDA的目的是尽可能地洞察数据集,发现数据的内部结构,提取重要的特征,检测异常值,检验基本假设,建立初步模型
  • EDA技术:可视化(eg 直方图)& 定量(均值,方差,分位数,丰度)

    1.2 数值特征

主要考虑他们的大小和分布,对特征进行变换以满足模型的假设。

  • 截断:eg. 0.31415926 —> 0.314, 或先进行对数转换,然后进行截断
  • 二值化:指将输入转化为仅有两种可能结果的输出
  • 分桶
  • 缩放:eg. 标准化
  • 缺失值处理 (XGBoost模型可以直接处理缺失特征)
  • 特征交叉:两个数值变量加减乘除,可以通过特征选择方法来选择游泳的交叉组合
  • 非线性编码:可以通过非线性编码来提升线性模型的效果,eg 多核式,高斯核
  • 行统计量

    1.3 类别特征

离散化

  • 自然数编码 [type1,type2,type3] —> [1,2,3],无法直接喂给线性模型
  • 独热编码 [type1,type2,type3] —> [001,010,100]
  • 分层编码
  • 散列编码 对于取值特别多的类别特征,使用独热编码之前先对类别进行散列编码,避免特征矩阵过于稀疏
  • 计数编码
  • 计数排名编码
  • 目标编码

2.特征选择

2.1 过滤方法

单变量过滤:不需要考虑特征之间的相互关系。按照特征变量和目标变量之间的相关性对特征进行排序,过滤掉最不相关的特征变量。计算效率高,不易过拟合,但是可能选择出冗余的特征。

多变量过滤:考虑特征变量之间的相互关系

  • 覆盖率:10000个样本,某个特征只出现了5次,覆盖率很小,剔除
  • 皮尔森相关系数:度量两个变量X,Y之间的线性相关性
  • Fisher得分:对于分类问题,好的特征应该是在同一类别中的取值比较相似,而在不同类别之间之间的取值差异比较大
  • 假设检验:假设特征变量和目标变量之间相互独立,将其作为H0假设,选择适当检验方法计算统计量,然后根据统计量确定P值做出统计推断。(对于特征变量为类别变量,目标变量为连续数值变量时,可以使用方差分析ANOVA;对于特征变量和目标变量都为连续数值变量时,可以使用皮尔斯卡方检验)
  • 互信息:度量两个随机变量之间共享的信息,即相关性
  • 最小冗余最大相关性(mRMR):跟已选择特征的相关性较高的冗余特征进行惩罚。mRMR方法可以使用多种相关性的度量指标
  • 相关特征选择(CFS):

    2.2 封装方法

过滤方法与具体的机器学习算法相互独立,因此过滤方法没有考虑选择的特征在具体机器学习算法上的效果。而封装方法直接使用机器学习算法评估特征子集的效果,它可以检测出两个或者多个特征之间的交互关系,而且选择的特征子集让模型的效果达到最优。

缺点:样本不够充分的情况下容易过拟合;特征变量较多时计算复杂度高

  • 完全搜索(穷举 & 非穷举)
  • 启发式搜索
  • 随机搜索

2.3 嵌入方法

嵌入方法将特征选择嵌入到模型的构建过程中,具有封装方法与机器学习算法相结合的有点,而且具有过滤方法计算效率高的优点。是实际应用中最常见的方法。

  • LASSO(在此之前是 岭回归)
  • 基于树模型的特征选择方法