特征选择是指在众多特征中选择有意义的特征,采用机器学习算法和模型进行训练。
特征选择有三个目的:
- 简化模型,是模型更易于研究人员和用户理解。
- 可解释性不仅让我们对模型效果的稳定性有更多把握,也能为业务运营等工作提供指引和决策支持。
- 改善性能,节约存储和计算开销。
- 改善通用性、降低过拟合风险。
- 特征的增多会大大提高模型的搜索空间,大多数模型需要的样本数目随着特征数量的增加而显著增加,特征的增加虽然能更好地拟合训练数据,但也可能增加方差。
特征选择的前提是:训练数据中包含许多冗余或者无关的特征,移除这些特征并不会导致信息丢失。其中冗余和无关是两个概念,一个特征本身有用,但其与其他有用特征强相关,那么就会显得冗余。
通常来说会从以下两个方面来选择特征:
- 特征是否发散:如果一个特征不发散,例如方差接近于零,也就是说样本在这个特征上基本上没有差异,这个特征对区分样本并没有什么用。
- 特征与目标的相关性:优先选择与目标相关性高的特征。
根据特征选择的形式又可以将特征选择方法分为3种:
- Filter(过滤法):按照发散性或者相关性对各个特征进行评分,设定阈值或者待选择阈值的个数来选择特征。
- Wrapper(封装法):根据目标函数(通常是预测效果评分),每次选择若干个特征,或者排除若干个特征。
- Embedded(嵌入法):先使用某些机器学习的算法和模型进行训练,得到各个特征的权值系数,根据系数从大到小选择特征。
1. Filter (过滤方法)
过滤方法不依赖机器学习算法,一般分为单变量和多变量两类。
单变量过滤方法不需要考虑特征之间的相互关系,常用的单变量过滤方法是基于特征变量和目标变量之间的相关性或互信息排序,过滤掉不相关的特征信息。优点:计算效率高,不易过拟合。缺点:不太能去掉冗余特征,所以长用于预处理。
多变量考虑特征变量之间的相互关系,常用的是基于相关性和一致性的特征选择。
常见的过滤方法:
- 覆盖率
- 皮尔森相关系数(衡量变量间的线性相关性)
- Fisher 得分
- 假设检验
- 互信息
- 最小冗余最大相关性
- 相关特征选择
- 最大信息系数(MIC):画热力图,取相关性小的用于模型融合
- 正则化方法(L1,L2)
- 基于模型的特征排序方法(这种比较高效:模型学习的过程和特征选择的过程是同时进行的)
2. Wrapper(封装方法)
由于过滤方法与具体的机器学习算法相互独立,因此其没有考虑选择的特征集合在机器学习算法上的效果。封装方法直接用机器学习算法评估特征子集的效果,选择的特征子集能够让模型的效果达到最优,而且它可以检测出两个或者多个特征之间的交互关系。 封装方法是特征子集搜索和评估指标相结合的方法,特征子集搜索提供候选新特征子集,根据评估指标给每一组新特征子集打分。最简单的方法是在每一个特征子集上训练并评估模型,找出最优特征子集。 特征子集搜索算法有如下几类:
- 完全搜索
- 启发式搜索
- 序列向前选择
- 序列向后选择
- 双向搜索选择
- 序列浮动选择
- 随机搜索
封装方法的优点是选择的特征子集相对更有效;缺点是样本不够充分的情况下容易过拟合,特征变量较多时计算复杂度较高。
3. Embedded(嵌入方法)
封装方法使用预先定义的机器学习算法来评估特征子集的质量,需要多次训练模型,计算效率较低。嵌入方法将特征选择嵌入到模型的构造过程中,具有同封装方法与机器学习相结合的优点,同时还具有过滤方法计算效率高的优点,因此在实践中得到广泛应用。 嵌入式方法:
- LASSO(Least Absolute Shrinkage and Selection Operator)