特征选择—相关性过滤

相关性过滤:
根据方差过部分滤完特征后(并不是说方差很大的数据就一定有用),就要考虑相关性了。使用相关性过滤后筛选出与标签相关且有意义的特征。
卡方过滤:
作用:专门针对离散型标签,即分类问题的相关性过滤。
大致流程:计算每个非负特征和标签之间的卡方统计量,并且按照卡方统计量由高到低为特征排名,选出前k个分数最高的特征

# feature_selection.chi2:计算每个非负特征和标签之间的卡方统计量,标签按照该统计量由高到低为特征排名
# feature_selection.SelectKBest:根据输入的评分标准选出k个特征
from sklearn.ensemble import RandomForestClassifier as RFC
from sklearn.model_selection import cross_val_score
from sklearn.feature_selection SelectKBest
from sklearn.feature_selection import chi2

xFChi = SelectKBest(chi2,k=300).fit_transform(xFVar,y)

选取超参数k:
方法一:绘制学习曲线,缺点计算慢

score = []
for i in range(780,200,-10):
    item = SelectKBest(chi2,k=i).fit_transform(dataX,dataY)  # 筛选特征
    item_rfc = cross_val_score(RFC(n_estimators=10,random_state=0),item,dataY,cv=2).mean()
    score.append(item_rfc)
plt.plot(range(780,200,-10),score)
plt.show()

在这里插入图片描述
方法二:看P值
缺点:可能会去除掉一些重要特征
卡方检验的本质是推测两组数据之间的差异,其检验的原假设是“两组数据相互独立”,卡方检验返回卡方值和P值两个统计量,其中卡方值难界定有效范围。而p值,一般使用0.01或0.05作为显著性水平,即p值判断的边界。
在这里插入图片描述从特征工程的角度,希望选取卡方值很大,p值小于0.05的特征,即和标签相关联的特征

chiVal,pVal=chi2(x_fvar,y)
chiVal						# 卡方值
pVal						# p值
#消除p值>设定值,如0.01或者0.05的特征
k = chiVal.shape[0] - (pVal>0.05).sum()

F检验
作用:F检验又称ANOVA,用来捕捉每个特征与标签之间的线性关系的过滤方法,feature_selection.f_classif用于离散型变量,feature_selection.f_regression用于处理连续型变量
大致流程:寻找两组数据之间的线性关系,其原假设是“数据不存在显著的线性关系”,返回f值和p值。选取p值小于0.05或者0.01的特征,这些特征与标签是显著相关的。
注意:F检验在数据服从正态分布是效果非常稳定,因此可先将数据转换成服从服从正态分布的数据

from sklearn.feature_selection import f_classif
F,pVal = f_classif(x_fvar,y)
F
pVal
k = F.shape[0] - (pVal > 0.05).sum()

互信息法:
互信息法是用来捕捉每个特征与标签之间的任意关系(包括线性和非线性关系)的过滤方法。和F检验相似,它既可以做回归也可以做分类,并且包含两个类feature_selection.mutual_info_classif(互信息分类)和feature_selection.mutual_info_regression(互信息回归)。
这两个类的用法和参数都和F检验一模一样,不过互信息法比F检验更加强大,F检验只能够找出线性关系,而互信息法可以找出任意关系。
互信息法不返回p值或F值类似的统计量,它返回“每个特征与目标之间的互信息量的估计”,这个估计量在[0,1]之间取值,为0则表示两个变量独立,为1则表示两个变量完全相关。以互信息分类为例的代码如下:

from sklearn.feature_selection import mutual_info_classif as MIC
result = MIC(X_fsvar,y) k = result.shape[0] - sum(result <= 0)
#X_fsmic = SelectKBest(MIC, k=填写具体的k).fit_transform(X_fsvar, y)
#cross_val_score(RFC(n_estimators=10,random_state=0),X_fsmic,y,cv=5).mean()
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值