经典的卡方检验是检验定性自变量对定性因变量的相关性。假设自变量有N种取值,因变量有M种取值,考虑自变量等于i且因变量等于j的样本频数的观察值与期望的差距,构建统计量:
这个统计量的含义简而言之就是自变量对因变量的相关性。用feature_selection库的SelectKBest类结合卡方检验来选择特征的代码如下:
1 from sklearn.feature_selection import SelectKBest 2 from sklearn.feature_selection import chi2 3 4 #选择K个最好的特征,返回选择特征后的数据 5 SelectKBest(chi2, k=2).fit_transform(iris.data, iris.target)
卡方分布(chi-square distribution, χ2 -distribution)是概率统计里常用的一种概率分布,也是统计推断里应用最广泛的概率分布之一,在假设检验与置信区间的计算中经常能见到卡方分布的身影。
我们先来看看卡方分布的定义:
若 k 个独立的随机变量 Z1,Z2,⋯,Zk ,且符合标准正态分布 N(0,1) ,则这 k 个随机变量的平方和
卡方分布的期望与方差分为为:
E(χ2)=n , D(χ2)=2n ,其中 n 为卡方分布的自由度。
χ2 检验是以 χ2 分布为基础的一种假设检验方法,主要用于分类变量。其基本思想是根据样本数据推断总体的分布与期望分布是否有显著性差异,或者推断两个分类变量是否相关或者独立。
一般可以设原假设为 H0 :观察频数与期望频数没有差异,或者两个变量相互独立不相关。
实际应用中,我们先假设 H0 成立,计算出 χ2 的值, χ2 表示观察值与理论值之间的偏离程度。根据 χ2 分布, χ2 统计量以及自由度,可以确定在 H0 成立的情况下获得当前统计量以及更极端情况的概率p。如果p很小,说明观察值与理论值的偏离程度大,应该拒绝原假设。否则不能拒绝原假设。
χ2 的计算公式为:
χ2 用于衡量实际值与理论值的差异程度,这也是卡方检验的核心思想。 χ2 包含了以下两个信息:
1.实际值与理论值偏差的绝对大小。
2.差异程度与理论值的相对大小。
卡方检验经常被用来做特征选择。举个网络上的例子,假设我们有一堆新闻标题,需要判断标题中包含某个词(比如吴亦凡)是否与该条新闻的类别归属(比如娱乐)是否有关,我们只需要简单统计就可以获得这样的一个四格表:
组别 | 属于娱乐 |
不属于娱乐 |
合计 | |
---|---|---|---|---|
不包含吴亦凡 |
19 | 24 | 43 | |
包含吴亦凡 |
34 | 10 | 44 | |
合计 | 53 | 34 | 87 |
通过这个四格表我们得到的第一个信息是:标题是否包含吴亦凡确实对新闻是否属于娱乐有统计上的差别,包含吴亦凡的新闻属于娱乐的比例更高,但我们还无法排除这个差别是否由于抽样误差导致。那么首先假设标题是否包含吴亦凡与新闻是否属于娱乐是独立无关的,随机抽取一条新闻标题,属于娱乐类别的概率是:(19 + 34) / (19 + 34 + 24 +10) = 60.9%
理论值的四格表为:
组别 | 属于娱乐 |
不属于娱乐 |
合计 |
---|---|---|---|
不包含吴亦凡 |
43 * 0.609 = 26.2 | 43 * 0.391 = 16.8 | 43 |
包含吴亦凡 |
44 * 0.609 = 26.8 | 44 * 0.391 = 17.2 | 44 |
显然,如果两个变量是独立无关的,那么四格表中的理论值与实际值的差异会非常小。
则 χ2 值为:
标准的四格表 χ2 值可以用以下方式进行计算:
得到 χ2 的值以后,怎样可以得知无关性假设是否可靠?接下来我们应该查询卡方分布的临界值表了。
首先我们明确自由度的概念:自由度v=(行数-1)*(列数-1)。
然后看卡方分布的临界概率,表如下:
一般我们取p=0.05,也就是说两者不相关的概率为0.05时,对应的卡方值为3.84。显然10.0>3.84,那就说明包含吴亦凡的新闻不属于娱乐的概率小于0.05。换句话说,包含吴亦凡的新闻与娱乐新闻相关的概率大于95%!
总结一下:我们可以通过卡方值来判断特征是否与类型有关。卡方值越大,说明关联越强,特征越需要保留。卡方值越小,说明越不相关,特征需要去除。