数据和特征决定了机器学习算法的上限,而模型和算法只是不断逼近这个上限。
1.特征提取
复杂的模型在一定程度上减少了特征工程需要做的工作
1 理解业务数据和业务逻辑,特征提取的目标是对业务进行精确,全面的描述
2 理解模型和算法,什么样的特征输入才能有较精确的预测结果
1.1探索性数据分析(EDA)
当没有足够专业领域知识的情况下,通过探索性数据分析往往能够发现不错的特征。
主要考虑他们的大小和分布,对特征进行变换以满足模型的假设。
- 截断: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(在此之前是 岭回归)
- 基于树模型的特征选择方法
