特征选择

学习自 Feat_select(corr,rfe,rfecv,PCA)Seaborn,RandForest

概述

特征选择之前要先观察特征和label之间、特征与特征之间的相关性,sklearn中也封装有特征选择的包供使用,但是使用时仍然有一些需要注意的事项。

步骤

观察数据

  1. 确定label,找到不太适合做特征的列,如ID类和缺失值较多(15%)的列
  2. 大致观察数据的分布,可直接在dataframe上调用describe()
  3. 对数据归一化,为了特征选择时方便观察和对比
  4. 做出每一列的值与label的关系图,可以用sns.violinplot(),可以观察得到相关性较高的特征(变化趋势相同)和label区分度较高的特征(不同label分布不同)



    或者用sns.swarmplot(),可以更加直观的观察


  5. 可以用sns.jointplot()比较两两特征的相关性,相关性高的(如高于80%)只留一个,构建多个特征的相关性矩阵会更直观。


特征选择

有多种选择方法

  1. 利用相关性
    特征间相关性较高的只保留其一

  2. 单一特征选择
    比较特征与label之间的相关性,选择最高的topk个,可调用sklearn中的SelectKBest方法

  3. 递归缩减特征
    利用分类方法,会给每个特征指定一个权值,谁的权值绝对值最小,就将那个特征剔除,这样递归直到缩减到设定的特征数。可调用sklearn中的RFE

  4. 带交叉验证的递归缩减特征
    可以在递归缩减特征的过程中得到最优的特征个数。可调用sklearn中的FRECV

  5. 利用树模型
    gbdt、xgb、randomforeset都自带有特征评价功能,但是用之前必须保证特征间相关性较低

特征提取

文章使用PCA做特征提取,需要注意的是,做之前必须归一化,可绘图得到最优的维度,如下图找到变化突然变慢的拐点


总结

  1. 观察数据前对数据进行归一化,便于观察和对比
  2. seaborn,可以用作数据可视化,非常直观
  3. 特征选择时,特征间如果相关性较高,则只能保留一个,尤其是利用树模型找重要性的时候

推荐阅读更多精彩内容