sklearn中的数据预处理和特征工程----【4】相关性过滤

寻找与标签有相关性的特征。

卡方过滤

  • 专门针对离散型标签(分类问题)相关过滤
  • feature_selection.chi2
    • 计算每个非负(不能计算负数,要进行归一化或者标准化)特征和标签之间的卡方统计量,越高越好(相关性越强)
    • 如果检测的方差为0的数据,会提示先用方差过滤
  • 结合 feature_selectio.SelectKbest
    • 选出卡方分数最高的K个
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import chi2  # 卡方检验
X_schi = SelectionKBest(chi2, k=10).fit_transform(X_var, y)

交叉验证使用:

from sklearn.ensemble import RandomForestClassifier as RFC
from sklearn.model_selection import cross_val_score
cross_val_score(RFC(n_estimators=10, random_state=0), X_schi, y, cv=5).mean()
"""
获得交叉验证准确率均值
"""

获得准确率之后判断上升还是降低,如果降低,证明,滤掉了一些相关性比较高的特征,可以高 参数K。

选取超参数K:

==1、==可以通过学习曲线进行选取超参数K

import matplotlib.pyplot as plt
score = []
for i in range(390, 200, -10):
	X_schi = SelectKBest(chi2, k=i).fit_transform(X_var, y)
	once = cross_val_score(RFC(n_estimators=10, random_state=0), X_schi, y, cv=5).mean()
	score.append(once)
plt.plot(range(350,200,-10), score)
plt.show()

一般来说曲线应该会有一个全局高峰,如果只出现单调,则可能特征都与标签相关

2、卡方检验会返回两个统计量,卡方值很难界定有效范围,但是p值可以0.01或者0.05作为显著性水平,就是p值判断边界

  • p值 <= 0.05 or 0.01(希望的)
    • 数据的差异不是自然形成的
    • 两组数据是相关的
    • 拒绝原假设,接受备择假设
  • p值 >= 0.05 or 0.01
    • 两者数据相互独立
    • 与上相反。

在调用KBest之前,可以从chi2实例化后的模型中获得各个特征所对应的卡方值和p值

通过p值来选取k的个数

chivalue, pvalues_chi = chi2(X_var, y)
k = chivalue.shape[0] - (pvalues_chi > 0.01).sum()

F检验

用来捕捉每个特征与标签之间的线性关系。可以做回归也能做分类。

原假设是:数据不存在原假设的线性关系,也会返回 f 值(也很难界定) 和 p 值

  • feature_selection.f_classif
    • 使用于标签是离散型变量的数据
  • feature_selection.f_regression
    • 使用于标签是连续型变量的数据
from sklearn.feature_selection import f_classif
F , pvalues = f_classif(X_var, y)
k = F.shape[0] - (pvalues > 0.05).sum()

互信息法

F检验 更加强大

捕捉每个特征与标签之间的任意关系(线性和非线性)

  • feature_selection.mutual_info_regression互信息回归
  • feature_selection.mutual_info_classif互信息分类

不返回统计量(p 值 或者 f 值),但返回每个特征与目标之间的互信息量的估计,处于[0,1],0表示两个变量独立,1表示两个变量完全相关。

from sklearn.feature_selection import mutual_info_classif as MIF
result = MIC(X_var, y)
k = result.shape[0] - (result <= 0).sum()

过滤法总结

一般:先试用方差过滤,然后用互信息法。

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JamePrin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值