特征处理完成之后,用sklearn中的SelectKBest方法选择最佳特征:

from sklearn.feature_selection import SelectKBest

python卡方检验筛选特征 python进行卡方检验_python 卡方检验 特征选择

0 什么是卡方检验

卡方检验主要用于分类变量之间的独立性检验,换言之,就是检验两个变量之间有没有关系。

例如,研究学历对收入的影响是否显著性;

男性或者女性对线上买生鲜食品有没有区别;

不同的治疗方法是否有明显效果。

基本思想是根据样本数据推断总体分布与期望分布是否有显著性差异,或者推断两个分类变量是否相关或者独立。

一般可以设原假设为 :观察频数与期望频数没有差异,或者两个变量相互独立不相关。

实际应用中,我们先假设原假设成立,计算出卡方值,卡方表示观察值与理论值间的偏离程度。

1 卡方值计算公式

python卡方检验筛选特征 python进行卡方检验_类变量_02

A是观察值,即真实统计值;

E是理论值(期望频数),即假设两个变量不相关情况下的期望值。

例如,我们通过问卷调查的方式得到如下数据,展示了本科和研究生收入是否过万的人数。

python卡方检验筛选特征 python进行卡方检验_python 卡方检验 特征选择_03

首先,假设学历和收入过万两个变量不想关,我们先计算收入过万和不过万人数的分布。

收入过万人数 = 收入过万人数/(收入过万人数 + 收入不过万人数)=501/813=62%

然后计算本科收入过万和研究生收入过万人数的理论值,即本科和研究生收入过万的人数都是总计*62%。

本科收入过万理论值=581*62%=360

其余的计算类似。

python卡方检验筛选特征 python进行卡方检验_python 卡方检验 特征选择_04

python卡方检验筛选特征 python进行卡方检验_类变量_05

卡方值 X2=28.797

2 卡方检验

卡方检验分四步,检验两个变量是否关联

1 计算卡方值

2 求自由度 (行数 - 1)*(列数 - 1)

3 设定显著性水平值

4 根据以上计算结果查表

显著性水平是假设检验中的一个概念,是指当原假设为正确时人们却把它拒绝了的概率或风险。

它是公认的小概率事件的概率值,必须在每一次统计检验之前确定,通常取α=0.05或α=0.01。

这表明,当作出接受原假设的决定时,其正确的可能性(概率)为95%或99%。

这里我们计算的卡方值是28.797

自由度计算为1

显著性水平为0.05

查表可得28.797 > 3.841,说明原假设在0.05的显著性水平下是可以拒绝的,就是说原假设不成立,学历和收入两个变量相关。

python卡方检验筛选特征 python进行卡方检验_数据_06