特征工程之特征选择(3)----F检验和互信息法

文章目录

  • 前言
  • F检验法
    • 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
# 通过这个结果可以看出,标签属性之间的相关性还是很高的

特征工程之特征选择(3)----F检验和互信息法_第1张图片

你可能感兴趣的:(机器学习,#,sklearn,python,机器学习,人工智能,新星计划,特征工程)