特征工程之特征选择----F检验和互信息法
Posted iostreamzl
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了特征工程之特征选择----F检验和互信息法相关的知识,希望对你有一定的参考价值。
前言
前面已经讲了方差过滤和卡方过滤,如果这两种方法过滤后的数据还是不能令人满意,就可考虑这篇文章要将的F检验法,和互信息法。
F检验法
F检验概述
F检验又称为ANOVA,方差齐性检验,是用来捕捉标签与每个特征之间线性关系的过滤方法。F检验即可做分类也可以做回归
- 分类:feature_selection.f_classif(标签离散)
- 回归:feature_selection.f_regression(标签连续)
与卡方检验一样,这两个方法都要和SelectKBest连用
注意点:F检验对于正态分布的数据表现很好,所以再进行F检验之前我们可以考虑将数据归一化或标准化,标准化,归一化看这里
K值可以设定,也可以通过p值计算出来,方法与卡方检验一样。
示例
这里使用的数据还是前面两篇博文使用的数据,这里直接使用方差过滤后的数据,关于方差过滤,可以看前面的博文。
from sklearn.feature_selection import f_classif
f_values, f_pvalues = f_classif(X_var_median_filter, y)
f_values.shape # (392,)
k = f_values.shape[0] - (f_pvalues > 0.01).sum()
k # 392
# 可以看到最佳的k值为392,说明我们的数据已经不能再删除了
互信息法
F检验只能捕捉特征和标签之间的线性关系,但是如果标签与属性之间存在非线性关系是无法捕捉到的,这里就需要用到互信息法了。
互信息法概述
互信息法是用来捕捉每个特征和标签之间的任意关系(包括线性和非线性)
和F检验相似,互信息既可以做回归也可以做分类
- feature_selection.mutual_info_classif:用于分类标签
- feature_selection.mutual_info_regression:用于连续性标签
用法参数和F检验一样
互信息比F检验强大,F检验只能捕捉线性关系,互信息可以找出任意关系
互信息不返回p值或F值类似的统计量,他返回每个特征与标签之间的互信息量的统计
返回值再0-1之间,0表示完全不想管,1表是完全相关
互信息也是要与SelectKBest相结合使用
示例
from sklearn.feature_selection import mutual_info_classif
res = mutual_info_classif(X_var_median_filter, y)
# 返回结果全是大于0的。表明了每个特征都是和标签相关的
# k值的计算
# 我这里假设互信息小于0.005就人为标签属性是无关的
k = res.shape[0] - (res < 0.005).sum()
k # 392
# 通过这个结果可以看出,标签属性之间的相关性还是很高的
以上是关于特征工程之特征选择----F检验和互信息法的主要内容,如果未能解决你的问题,请参考以下文章
特征选择过滤法之方差选择双样本t检验方差分析相关系数法卡方检验互信息法
机器学习实战基础(十六):sklearn中的数据预处理和特征工程特征选择 之 Filter过滤法 总结