类 | 说明 | 超参数选择 |
---|
VarianceThreshold | 方差过滤,可输入方差阈值(默认为0)返回方差>阈值的新矩阵 | 可使用学习曲线或者取中位数来确认 | SelectKBest | 用来选取k个统计量结果最佳的特征,生成符合统计量要求的新矩阵 | 看使用的统计量k | chi2 | 卡方检验,用于分类算法,捕捉相关性 | 追求p小于显著性水平 | f_classif/f_regression | f检验分类/f检验回归,只能捕捉线性相关性,并要求数据正态分布 | 追求p小于显著性水平 | mutual_info_classif / mutual_info_regression | 互信息分类/互信息回归,可以捕捉任何关系,但不能使用稀疏矩阵 | 追求p小于显著性水平 |
1 .VarianceThreshold(方差过滤)
导库
from sklearn.feature_selection import VarianceThreshold
代码
x_fsvar = VarianceThreshold().fit_transform(X)
2.卡方过滤
导入库
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import chi2
代码
x_fschi = SelectKBest(chi2,k=300).fit_transform(x,Y)
我们想要消除所有p值大于特定值,比如0.05
chivalues,pvalues_chi = chi2(x_fsvar,Y)
#查看有效特征数
n = chivalues.shape[0] - (pvalues_chi > 0.05).sum()
- chivalues: 卡方值
- pvalues_chi: p值
其中参数k的取值决定新矩阵中有效特征的个数, 可采用学习曲线进行确定k值
3.f检验
f检验只能捕捉线性关系,并要求数据正态分布 导入库(这里用f检验分类做实例)
from sklearn.feature_selection import f_classif
代码
F,pvalues_f = f_classif(x_fsvar,Y)
其中F表示方差比率,pvalues_f表示p值
f检验的本质是寻找两组数据之间的线性关系,即寻找p值大于0.05或者0.01的特征
#查看有效特征数
n = F.shape[0] - (pvalues_f > 0.05).sum()
4.互信息
导入库
from sklearn.feature_selection import mutual_info_classif as MIC
代码
result = MIC(x_fsvar,Y)
同样可以查看有效特征数量
它可以看成是一个随机变量中包含的关于另一个随机变量的信息量,1表示完全关联,0表示没有联系
查看有效特征数量
k = result.shape[0] - sum(result <= 0)
更为详细的公式讲解
|