学习自 Feat_select(corr,rfe,rfecv,PCA)Seaborn,RandForest
概述
特征选择之前要先观察特征和label之间、特征与特征之间的相关性,sklearn中也封装有特征选择的包供使用,但是使用时仍然有一些需要注意的事项。
步骤
观察数据
- 确定label,找到不太适合做特征的列,如ID类和缺失值较多(15%)的列
- 大致观察数据的分布,可直接在dataframe上调用describe()
- 对数据归一化,为了特征选择时方便观察和对比
-
做出每一列的值与label的关系图,可以用sns.violinplot(),可以观察得到相关性较高的特征(变化趋势相同)和label区分度较高的特征(不同label分布不同)
或者用sns.swarmplot(),可以更加直观的观察
-
可以用sns.jointplot()比较两两特征的相关性,相关性高的(如高于80%)只留一个,构建多个特征的相关性矩阵会更直观。
特征选择
有多种选择方法
利用相关性
特征间相关性较高的只保留其一单一特征选择
比较特征与label之间的相关性,选择最高的topk个,可调用sklearn中的SelectKBest方法递归缩减特征
利用分类方法,会给每个特征指定一个权值,谁的权值绝对值最小,就将那个特征剔除,这样递归直到缩减到设定的特征数。可调用sklearn中的RFE-
带交叉验证的递归缩减特征
可以在递归缩减特征的过程中得到最优的特征个数。可调用sklearn中的FRECV
利用树模型
gbdt、xgb、randomforeset都自带有特征评价功能,但是用之前必须保证特征间相关性较低
特征提取
文章使用PCA做特征提取,需要注意的是,做之前必须归一化,可绘图得到最优的维度,如下图找到变化突然变慢的拐点
总结
- 观察数据前对数据进行归一化,便于观察和对比
- seaborn,可以用作数据可视化,非常直观
- 特征选择时,特征间如果相关性较高,则只能保留一个,尤其是利用树模型找重要性的时候