卡方分布与卡方检验------以及python的实现
2017-03-17 11:39
225 查看
这个统计量的含义简而言之就是自变量对因变量的相关性。用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)
1.卡方分布
卡方分布(chi-square distribution, χ2-distribution)是概率统计里常用的一种概率分布,也是统计推断里应用最广泛的概率分布之一,在假设检验与置信区间的计算中经常能见到卡方分布的身影。我们先来看看卡方分布的定义:
若k个独立的随机变量Z1,Z2,⋯,Zk,且符合标准正态分布N(0,1),则这k个随机变量的平方和
X=∑i=1kZ2i
为服从自由度为k的卡方分布,记为:
X∼χ2(k)
也可以记为:
X∼χ2k
卡方分布的期望与方差分为为:
E(χ2)=n,D(χ2)=2n,其中n为卡方分布的自由度。
2.卡方检验
χ2检验是以χ2分布为基础的一种假设检验方法,主要用于分类变量。其基本思想是根据样本数据推断总体的分布与期望分布是否有显著性差异,或者推断两个分类变量是否相关或者独立。一般可以设原假设为 H0:观察频数与期望频数没有差异,或者两个变量相互独立不相关。
实际应用中,我们先假设H0成立,计算出χ2的值,χ2表示观察值与理论值之间的偏离程度。根据χ2分布,χ2统计量以及自由度,可以确定在H0成立的情况下获得当前统计量以及更极端情况的概率p。如果p很小,说明观察值与理论值的偏离程度大,应该拒绝原假设。否则不能拒绝原假设。
χ2的计算公式为:
χ2=∑(A−T)2T
其中,A为实际值,T为理论值。
χ2用于衡量实际值与理论值的差异程度,这也是卡方检验的核心思想。χ2包含了以下两个信息:
1.实际值与理论值偏差的绝对大小。
2.差异程度与理论值的相对大小。
3.卡方检验做特征选择
卡方检验经常被用来做特征选择。举个网络上的例子,假设我们有一堆新闻标题,需要判断标题中包含某个词(比如吴亦凡)是否与该条新闻的类别归属(比如娱乐)是否有关,我们只需要简单统计就可以获得这样的一个四格表:组别 | 属于娱乐 | 不属于娱乐 | 合计 | |
---|---|---|---|---|
不包含吴亦凡 | 19 | 24 | 43 | |
包含吴亦凡 | 34 | 10 | 44 | |
合计 | 53 | 34 | 87 |
理论值的四格表为:
组别 | 属于娱乐 | 不属于娱乐 | 合计 |
---|---|---|---|
不包含吴亦凡 | 43 * 0.609 = 26.2 | 43 * 0.391 = 16.8 | 43 |
包含吴亦凡 | 44 * 0.609 = 26.8 | 44 * 0.391 = 17.2 | 44 |
则χ2值为:
χ2=(19−26.2)226.2+(34−26.8)226.8+(24−16.8)216.8+(10−17.2)217.2=10.00
标准的四格表χ2值可以用以下方式进行计算:
χ2=N∗(AD−BC)2(A+B)(C+D)(A+C)(B+D)
其中,N=A+B+C+D
得到χ2的值以后,怎样可以得知无关性假设是否可靠?接下来我们应该查询卡方分布的临界值表了。
首先我们明确自由度的概念:自由度v=(行数-1)*(列数-1)。
然后看卡方分布的临界概率,表如下:
一般我们取p=0.05,也就是说两者不相关的概率为0.05时,对应的卡方值为3.84。显然10.0>3.84,那就说明包含吴亦凡的新闻不属于娱乐的概率小于0.05。换句话说,包含吴亦凡的新闻与娱乐新闻相关的概率大于95%!
总结一下:我们可以通过卡方值来判断特征是否与类型有关。卡方值越大,说明关联越强,特征越需要保留。卡方值越小,说明越不相关,特征需要去除。
相关文章推荐
- 卡方检验的原理作用以及Python、R语言的实现方式
- 读取文件行并分割行中字符串:C/C++以及python实现
- python基于mysql实现的简单队列以及跨进程锁
- Alternating Least Squares(ASL) for Implicit Feedback Datasets的数学推导以及用Python实现
- 概率,悖论,以及理性人原则(python实现)
- 八大排序算法总结以及python实现
- 【学习笔记】用python实现bubblesort以及shakersort
- python中的 \r以及基于此实现简单的倒计时小程序
- 使用Visual Studio,几步实现Python C++扩展,以及DLL调用
- Python 下载网页 Jpg 图片以及 Gif 图片实现
- http鉴权,以及python实现
- MySQL 以及 Python 实现排名窗口函数
- python中线程的使用以及生产者和消费者的实现
- 【机器学习算法-python实现】矩阵去噪以及归一化
- 纯python实现的web: tornado性能测试以及实际使用解析
- Jquery Ajax客户端跨域请求 以及服务端Python代码实现
- python基于mysql实现的简单队列以及跨进程锁实例详解
- 14-08-07 关于程序、进程、线程,以及python中实现多线程的办法
- python实现简单爬虫以及正则表达式简述
- Redis订阅&发布以及python代码实现