上一篇文章中讲到相关性判断的的卡方过滤法,本文介绍另外两种:F检验、互信息法。使用方法和作用,都与卡方过滤类似,目的都是用来探索合适的有效特征K值。

F检验

F检验,又称ANOVA,方差齐性检验,是用来捕捉每个特征与标签之间的线性关系的过滤方法。它即可以做回归也可以做分类,因此包含feature_selection.f_classif(F检验分类)和feature_selection.f_regression(F检验回归)两个类。其中F检验分类用于标签是离散型变量的数据,而F检验回归用于标签是连续型变量的数据。

和卡方过滤一样,我们希望选取p值小于0.05或者0.01的特征,这些特征和标签是显著线性相关的。而大于特定值的,我们认为没有显著线性关系,应该被删除。

from sklearn.feature_selection import f_classif

F, p = f_classif(x, y)
k = F.shape[0] - (p >= 0.05).sum()
print(k)  # 696

互信息法

互信息法,是用来捕捉特征和标签之间的任意关系(包括线性和非线性关系)的过滤方法,和F检验相似,它既可以做回归也可以做分类,并且包含两个类feature_selection.mutual_info_classif(互信息分类)和feature_selection.mutual_info_regression(互信息回归)。

不同的是,互信息法不返回p值或F值类似的统计量,它返回“每个特征与目标之间的互信息量的估计”,这个估计量在[0,1]之间取值,为0则表示两个变量独立,为1则表示两个变量完全相关。

from sklearn.feature_selection import mutual_info_classif

h = mutual_info_classif(x, y)
k = h.shape[0] - (h<=0).sum()
print(k)  # 615

本文为 陈华 原创,欢迎转载,但请注明出处:http://www.ichenhua.cn/read/269