Fire15 +

特征工程学习笔记

特征工程学习笔记

Fire 2018.5

hotel

1.探索性数据分析(EDA,Exploratory Data Analysis)

画图:

2.数据预处理

2.1.1 基础方法

2.1.2 实例

3.特征构造

但是,并不是特征构造越多就效果越好。参见维度灾难。分类效果一开始会随着特征数量增加而提升,但到达顶峰后便会一直下降。有两个原因:

  1. 特征越多,越容易过拟合;
  2. 特征越多,数据越稀疏,需要相应增加的训练数据成指数级增长。

且在高维空间数据都分布在边角,中间几乎没有数据。因此,在高维空间用距离来衡量样本相似性的方法已经渐渐失效。

4.特征选择

特征选择的的一般流程就是, 找一个集合,然后针对某个学习算法, 测试效果如何, 一直循环直到找到最优集合为止。但时间花费很大。

一般需要考虑两点:

  1. 特征是否发散:如果一个特征不发散,就是说这个特征大家都有或者非常相似,说明这个特征不需要。
  2. 特征和目标是否相关:与目标的相关性越高,越应该优先选择。

按照特征评价标准分类:

4.1特征选择 特征选择, 经典三刀

  1. 过滤法Filter
    • 方差选择法:计算各个特征方差,选择方差大于阈值的特征 (Analysis of Variance:ANOVA,方差分析,通过分析研究不同来源的变异对总变异的贡献大小,从而确定可控因素对研究结果影响力的大小)。
    • 相关系数法:计算各个特征的Pearson相关系数

      皮尔逊系数只能衡量线性相关性而互信息系数能够很好地度量各种相关性,但是计算相对复杂一些,好在很多toolkit里边都包含了这个工具(如sklearn的MINE),得到相关性之后就可以排序选择特征了 (皮尔逊相关系数,更多反应两个服从正态分布的随机变量的相关性,取值范围在 [-1,+1] 之间。)

    • 互信息法:计算各个特征的信息增益
    • Linear Discriminant Analysis(LDA,线性判别分析):更 像一种特征抽取方式,基本思想是将高维的特征影到最佳鉴别矢量空间,这样就可以抽取分类信息和达到压缩特征空间维数的效果。投影后的样本在子空间有最大可分离性。
    • Chi-Square:卡方检验,就是统计样本的实际观测值与理论推断值之间的偏离程度,实际观测值与理论推断值之间的偏离程度就决定卡方值的大小,卡方值越大,越不符合;卡方值越小,偏差越小,越趋于符合。

    优点: 快速, 只需要基础统计知识。缺点:特征之间的组合效应难以挖掘。

  2. 封装法Wrapper
    • 递归消除法:使用基模型(如LR)在训练中进行迭代,选择不同 特征
    • 构建单个特征的模型,通过模型的准确性为特征排序,借此来选择特征
    • 前向选择法:从0开始不断向模型加能最大限度提升模型效果的特征数据用以训练,直到任何训练数据都无法提升模型表现。
    • 后向剃除法:先用所有特征数据进行建模,再逐一丢弃贡献最低的特征来提升模型效果,直到模型效果收敛。

    优点: 直接面向算法优化, 不需要太多知识。缺点: 庞大的搜索空间, 需要定义启发式策略。

  3. 嵌入法Embedded(效果最好速度最快,模式单调,快速并且效果明显, 但是如何参数设置, 需要深厚的背景知识。)
    • 使用带惩罚项的基模型进行特征选择

      比如LR加入正则。通过L1正则项来选择特征:L1正则方法具有稀疏解的特性,因此天然具备特征选择的特性,但是要注意,L1没有选到的特征不代表不重要,原因是两个具有高相关性的特征可能只保留了一个,如果要确定哪个特征重要应再通过L2正则方法交叉检验

    • 树模型的特征选择(随机森林、决策树)

      训练能够对特征打分的预选模型:RandomForest和Logistic Regression等都能对模型的特征打分,通过打分获得相关性后再训练最终模型;

    • Lasso
    • Elastic Net
    • Ridge Regression

    优点: 快速, 并且面向算法。缺点: 需要调整结构和参数配置, 而这需要深入的知识和经验。

此外还可以通过深度学习来进行特征选择:目前这种手段正在随着深度学习的流行而成为一种手段,尤其是在计算机视觉领域,原因是深度学习具有自动学习特征的能力,这也是深度学习又叫unsupervised feature learning的原因。从深度学习模型中选择某一神经层的特征后就可以用来进行最终目标模型的训练了。

4.2 特征降维

特征选择是在原本特征集合中取一部分出来,是特征集合的子集,特征降维做特征的计算组合后构成新特征。

  1. 线性降维
    • 主成分分析(PCA):选择方差最大的K个特征[无监督]
    • 线性判别分析(LDA):选择分类性能最好的特征[有监督]
  2. 非线性降维(大多是流行学习)
    • 核主成分分析(KPCA):带核函数的PCA
    • 局部线性嵌入(LLE):利用流形结构进行降维
    • 还有拉普拉斯图、MDS等
  3. 迁移成分分析(TCA):不同领域之间迁移学习降维
    • 使用带惩罚项的基模型进行特征选择(比如LR加入正则)
    • 树模型的特征选择(随机森林、决策树)

工具:Scikit-learn,可以特征选择、降维

参考资料

Coding

Writing

Living