特征与目标值相关性的评价方法及对应的检验方法
sklearn与特征筛选
sklearn.feature_selection
子模块顾名思义, 是对特征进行选择, 也就是特征筛选的模块. 常用的方法根据具体的情况分为:
分类任务
该特征是二值特征或类别特征:
chi2
该特征是数值型特征, 包括连续特征和离散特征, 只要值的大小有意义即可
f_classif
任何类型的特征, 需要注明特征的类型
mutual_info_classif
回归任务
特征是数值型特征, 包括连续特征和离散特征, 只要值的大小有意义即可
f_regression
任何类型的特征, 需要注明特征的类型
mutual_info_regression
基于检验方法的特征筛选
这类方法都是基于统计学的检验方法: chi2
, f_classif
, f_regression
. 分别说明.
chi2
chi2(X, y)
首先要求目标y
是分类标签, 然后要求进行检验的特征必须是二值特征, 即特征值非0即1. 因为chi2
是通过卡方检验来不同的目标标签对应的特征表现是否相同, 从而说明该特征对目标标签的区分能力强不强. 如果目标标签的每类中对应特征的期望频数和观测频数接近, 说明没有区别能力, 这个特征可能不能起到很好的作用. 具体的原理参考0x01 分类数据分析基础.
如果一个特征是类别特征, 则需要通过One-Hot
进行编码后使用.
f_classif
f_classif(X, y)
使用ANOVA, 单变量的F检验来进行计算. 该检验方法将样本按分类标签分组, 原假设认为所有组对应的特征的均值相等, 这种情况下该特征对样本的分类就没有作用了. 因此得到的F统计量越大, 说明该特征的区别能力越强.
使用与分类标签和数值型特征. 这里的数值型指的是数值有意义的特征, 并不区分离散还是连续. 与之对应的是类别型特征, 即不同的数值代表不同的类别, 数值大小没有意义.
具体原理参考0x02 单因素方差分析
f_regression
f_regression(X, y, center=True)
这是针对回归问题, 对回归值和数值型特征进行检验.
使用的是Univariate linear regression tests, 即单变量回归检验. 检验的线性相关性. 因此如果一个特征与回归值的关系是非线性的, 则不能真实的表现这种关系, 这也是这种方法的局限性.
具体原理参考0x01 一元线性回归基础.
mutual_info_classif与mutual_info_regression
mutual_info_classif(X, y, discrete_features='auto', n_neighbors=3, copy=True, random_state=None)
mutual_info_regression(X, y, discrete_features='auto', n_neighbors=3, copy=True, random_state=None)
这两种方法都是基于互信息的方法. 具体的原理涉及到四篇论文, 在sklearn
中这两个方法对应代码的注释中有引出.
由于是基于概率的方法, 因此突破了线性的限制. 例如以回归值与数值特征的检验为例, mutual_info_regression
方法就能体现出f_regression
方法不能涵盖的非线性因素.
在使用的过程中需要特别注意discrete_features
参数, 这个参数是这指定进行检验的X
中包含的所有特征的类别, 其实这里的discrete
指的就是分类特征与数值特征的区别, 并不是严格意义的离散和连续特征. 如果对于特征的类别设定错误, 或者忽略而没有设定, 那么最后得到的结果的准确性就无法保证, 甚至是错误的.
最后更新于