0
点赞
收藏
分享

微信扫一扫

详解数据预处理和特征工程-特征选择-相关性过滤-互信息法【菜菜的sklearn课堂笔记】

不想追究这个原理了,以后补上

互信息法是用来捕捉每个特征与标签之间的任意关系(包括线性和非线性关系)的过滤方法。和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)

result.shape
---
(392,)

result[:5]
---
array([0.06884424, 0.08779026, 0.09929538, 0.11440733, 0.11444289])

k = result.shape[0] - sum(result == 0)
# 一般如果指定互信息阈值的话这里应该是result <= 阈值
X_fsmic = SelectKBest(MIC, k).fit_transform(X_fsvar, y)
# 这里k=392
cross_val_score(RFC(n_estimators=10,random_state=0),X_fsmic,y,cv=5).mean()

过滤法总结

建议先使用方差过滤,然后使用互信息法来捕捉相关性

![[附件/Pasted image 20221014210459.png|550]]

等我踩了坑再来补吧,不清楚为什么F检验要求数据服从正态分布

举报

相关推荐

0 条评论