[机器学习与scikit-learn-50]:特征工程-特征选择(降维)-5-二级过滤-特征值与标签之间的关系:F过滤与互信息量法过滤

作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客

本文网址:https://blog.csdn.net/HiWangWenBing/article/details/124080785


目录

前言:

第1章 F检验代码示例

1.1 过滤条件为0

2.2 过滤条件为0.01

第2章 互信息量代码示例


前言:

卡方检验能够筛选算特征变量与标签变量之间的相关性,卡方过滤用于过滤掉那些与标签标签无关的特征变量。除了卡方检验,类似的还有F检验和互信息量检验。

F检验要求输入数据服从正态分布,互信息量用于检查特征与标签之间不确定性的大小,即信息量的大小。

从代码的角度来看,卡方检验、F检验、互信息量检验的过滤过程是相似的。

从目的来看,卡方检验、F检验、互信息量检验也是一致的,过滤掉与标签无关的特征。

从算法实现来看,卡方检验、F检验、互信息量自身的算法是不同的。

第1章 F检验代码示例

1.1 过滤条件为0

# F检验的库
from sklearn.feature_selection import f_classif

# 获取过F滤后的关键数值
Fvalue, pvalues_f = f_classif(X_fsvar,y)
print("Fvalue.shape", Fvalue.shape)
print("pvalues_f.shape", pvalues_f.shape)

# 获取过F滤后的特征数
pvalue_filter = 0
k_num = F.shape[0] - (pvalues_f > pvalue_filter).sum()
print("F过滤后的特征数:", k_num )

# 过滤满足条件的特征:
# f_classif:过滤规则
# k:过滤后的特征数量
X_fsF = SelectKBest(f_classif, k=k_num).fit_transform(X_fsvar, y)

# 使用随机森林 + 交叉验证,来验证过滤后的样本的效果
cross_val_score(RFC(n_estimators=10,random_state=0), X_fsF,y,cv=5).mean()
Fvalue.shape (392,)
pvalues_f.shape (392,)
F过滤后的特征数: 388

Out[82]:

0.9378333333333334

2.2 过滤条件为0.01

# F检验的库
from sklearn.feature_selection import f_classif

# 获取过F滤后的关键数值
Fvalue, pvalues_f = f_classif(X_fsvar,y)
print("Fvalue.shape", Fvalue.shape)
print("pvalues_f.shape", pvalues_f.shape)

# 获取过F滤后的特征数
pvalue_filter = 0.01
k_num = F.shape[0] - (pvalues_f > pvalue_filter).sum()
print("F过滤后的特征数:", k_num)

# 过滤满足条件的特征:
# f_classif:过滤规则
# k:过滤后的特征数量
X_fsF = SelectKBest(f_classif, k=k_num).fit_transform(X_fsvar, y)

# 使用随机森林 + 交叉验证,来验证过滤后的样本的效果
cross_val_score(RFC(n_estimators=10,random_state=0), X_fsF,y,cv=5).mean()
Fvalue.shape (392,)
pvalues_f.shape (392,)
F过滤后的特征数: 392

Out[85]:

0.9390476190476191

备注:

此案例说明了,在本案例中,经过方差variance过滤后的特征与输出标签之间是强相关的,与卡方验证得到的结论是一样的。

p=0.01的门限,二级过滤出来特征数量与一级方差过滤的数量是相同的。

第2章 互信息量代码示例

# 互斥信息量库
from sklearn.feature_selection import mutual_info_classif as MIC

# 检验(计算)样本每个样本的特征自变量与标签因变量之间的相关性
result = MIC(X_fsvar, y)
print(result.shape)

# 选出过滤后的特征的数量
print("互信息量为0的特征的个数:", sum(result <= 0))
k_num = result.shape[0] - sum(result <= 0)
print("过滤后的特征的数量:", k_num)

# 挑选出特征过滤后的样本
X_fsmic = SelectKBest(MIC, k=k_num).fit_transform(X_fsvar, y)
print("特征过滤乎的样本形状",X_fsmic.shape)

# 使用样本交叉验证 + 随机森林诉法
score=cross_val_score(RFC(n_estimators=10, random_state=0),X_fsmic,y,cv=5).mean()
print("特征过滤后的分数", score)

备注:

此案例中,互信息为0的特征的个数为0,这说明,所有的特征值与标签值之间都是相关的。

这与F检验和卡方检验的结果是一致的。


作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客

本文网址:https://blog.csdn.net/HiWangWenBing/article/details/124080785

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

文火冰糖的硅基工坊

你的鼓励是我前进的动力

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

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

打赏作者

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

抵扣说明:

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

余额充值