小白记录贴,侵删~感恩!
使用sklearn官方接口代码如下
- 首先import包和实验数据:
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import chi2
from sklearn.datasets import load_iris
iris = load_iris()
2. 使用卡方检验来选择特征
model1 = SelectKBest(chi2, k=2)#选择k个最佳特征
model1.fit_transform(iris.data, iris.target)#iris.data是特征数据,iris.target是标签数据,该函数可以选择出k个特征
3. 查看p-values和scores
model1.scores_ #得分 单个特征的卡方统计量值 得分越高,特征越重要
model1.pvalues_ #p-values 越小,置信度越高,特征越重要
至此,可以实现如何使用sklearn 的SelectKBest 利用chi2方法提取最优特征。但,对于不了解卡方检验的人可能不知道输出值到底是什么,此处建议阅读博客sklearn.feature_selection chi2基于卡方,特征筛选详解,文中详细阐述了sklearn的实现,并且简单明了的解释了卡方检验。
经典卡方检验-独立样本四格表:
重要代码如下:
# 计算观测值 结果为y里面每个类别的计数
observed = safe_sparse_dot(Y.T, X) # n_classes * n_features
feature_count = X.sum(axis=0).reshape(1, -1)
class_prob = Y.mean(axis=0).reshape(1, -1)
expected = np.dot(class_prob.T, feature_count)
但是截止到现在,文中只是阐述了离散型变量的卡方检验,但是对于上面给出的代码,我们对于连续型变量还是不理解。翻开sklearn的代码 我们可以看到第一步首先要验证X是否是sparse matrix,但是对于我们的输入,其实并不是离散变量呀。无法计算自由度,无法对照卡方检验表得到概率,自由度计算可简单对照这个帖子:自由度如何理解 - SPSS论坛 - 经管之家(原人大经济论坛)。
不过一般情况下,还是不要用卡方检验进行连续性变量分析,可参考下图:
ps: 如果用SPSS软件分析,可以对两个变量进行相关性分析,参考贴如下: