文章目录
问题的引入
方差过滤掉的是哪些特征方差不高于阈值的特征,留下了的是方差比较大的特征,这只能反应该特征变化比较多,并不能反映于标签之间的直接相关性。
我们希望选出的是与标签相关且有意义的特征,因为这样的特征能为我们提供大量的信息。如果特征与标签相关性很差,只会白白浪费我们的计算内存与时间。并且可能给我们的模型引入噪声。
sklearn中为我们提供了三种相关性判断的方法:卡方检验,F检验,互信息。这篇文章只将卡方检验。
卡方检验
卡方检验概述
卡方过滤是专门针对离散型标签(即分类问题)的相关性过滤
卡方检验sklearn.feature_selection.chi2计算每个非负特征和标签的卡方统计量。并依照统计量由高到低对特征进行排序。
再结合sklearn.feature_selection-SelectKBest类选择出K个相关性最高的特征
注意点:如果卡方检验检测到某个特征中所有的值都相同,会提示我们使用方差先进行方差过滤
对负数特征的处理
由于卡方检验只支持计算非负特征,遇到负数特征我们可以考虑将数据进行归一化,具体看这篇博文
示例1
再前面方差过滤这篇博文中,我们使用方差过滤筛掉一半特征之后模型的准确度有一些上升,说明我们删除的特征与标签基本是无关的。这里继续使用方差筛掉一般的数据。需要说明的是,如果方差过滤后模型表现下降,我们就不要使用筛选后的数据了,而是使用原始数据。
导入相关模块
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import cross_val_score # 交叉检验
from sklearn.feature_selection import VarianceThreshold # 方差过滤
from sklearn.feature_selection import chi2 # 卡方检验
from sklearn.feature_selection import SelectKBest # 特征选择
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline