共计 2154 个字符,预计需要花费 6 分钟才能阅读完成。
上一篇说明从皮尔逊系数选择,这次使用卡方检验的方法来选择特征,使用假设检验的方式。
首先还是从卡方检验的原理,一切还是从白话文说起。
一个案例:
某医疗机构为了了解呼吸道疾病与吸烟是否有关,进行了一次抽样调查,共调查了 515 个成年人,其中吸烟者 220 人,不吸烟者 295 人.调查结果是:吸烟的 220 人中有 37 人患呼吸道疾病(简称患病),183 人未患呼吸道疾病(简称未患病);不吸烟的 295 人 中有 21 人患病,274 人未患病. 问题:根据这些数据能否断定“患呼吸道疾病与吸烟有关”?
[table id=1 /]
计算吸烟患病的概率为17%,不吸烟患病的概率7%,从这其中如何判断吸烟与患病之间的关系?
独立假设检验
H0:吸烟与患病之间没有关系
H1:吸烟与患病之间存在关系
H0和H1之间的假设是对立的,所以在结果中要么接受要么拒绝
若假设H0成立,就需要数据去证明这个假设。
现在抽象化上面的表格,所有的数字使用字母来代替
[table id=2 /]
如果吸烟与患病之间没什么关系那么吸烟患病的概率与不吸烟患病的概率基本上相等
\frac{a}{a+b}\approx\frac{c}{c+d}
由此可以得到
ad-bc\approx0
现在只要上述这个式子成立那么H0假设就可以被接受,完成假设检验。
假设\(n=a+b+c+d\),可以将吸烟患病,吸烟不患病,不吸烟患病,不吸烟不患病的人数计算出来
首先给出四个事件说明且各个事件之间相互独立
\(p(A),p(B),p(C),p(D)\),分别表示吸烟,患病,不吸烟,不患病
那么吸烟患病的概率为
p=p(AB)=p(A)*p(B)
因此得到如下相关计算结果,就死之前描述的四种情况的人数:
吸烟患病:\(n*\frac{a+b}{n}*\frac{a+c}{n}\)
吸烟不患病:\(n*\frac{a+b}{n}*\frac{b+d}{n}\)
不吸烟患病:\(n*\frac{c+d}{n}*\frac{a+c}{n}\)
不吸烟不患病:\(n*\frac{c+d}{n}*\frac{b+d}{n}\)
如果实际观测值与由事件 A、B 相互独立的假设的估计相差不大,那么,我们就可以 认为这些差异是由随机误差造成的,假设不能被所给数据否定,否则应认为假设不能接受.
举个例子:上述吸烟患病计算出来的人数与实际的人数a如果相差不大的话证明当前的数据是由随机误差导致的,因此H0假设要被接受,不能被拒绝。
怎样刻画实际观测值与估计值的差异呢?统计学中采用如下的量(称为\(x^2\) 统计量)来刻画这个差异
卡方计算的公式是:
x^2=\sum\frac{(A-T)^2}{T}=\frac{n*(ad-bc)^2}{(a+b)(a+c)(b+d)(c+d)}
由上述公式可以计算出对应的卡方值,计算出卡方值之后需要去查寻对应的表,该表根据计算出来的卡方值可以得到发生H0事件的概率,如果概率很低则表示可以拒绝H0
给个例子,假设把a=7,b=183 ,c=21,d=274
则相应的卡方值结果为11.8,通过查表可以得到
p(x^2>6.635)\approx0.01
当前卡方值更大,所以要拒绝H0假设,至此可以得到结论,吸烟和患病是有关联的。
自由度的计算是\(k=(行数-1)(列数-1)\)
自由度k \ P value (概率) | 0.95 | 0.90 | 0.80 | 0.70 | 0.50 | 0.30 | 0.20 | 0.10 | 0.05 | 0.01 | 0.001 |
---|---|---|---|---|---|---|---|---|---|---|---|
1
|
0.004 | 0.02 | 0.06 | 0.15 | 0.46 | 1.07 | 1.64 | 2.71 | 3.84 | 6.64 | 10.83 |
2
|
0.10 | 0.21 | 0.45 | 0.71 | 1.39 | 2.41 | 3.22 | 4.60 | 5.99 | 9.21 | 13.82 |
3
|
0.35 | 0.58 | 1.01 | 1.42 | 2.37 | 3.66 | 4.64 | 6.25 | 7.82 | 11.34 | 16.27 |
4
|
0.71 | 1.06 | 1.65 | 2.20 | 3.36 | 4.88 | 5.99 | 7.78 | 9.49 | 13.28 | 18.47 |
5
|
1.14 | 1.61 | 2.34 | 3.00 | 4.35 | 6.06 | 7.29 | 9.24 | 11.07 | 15.09 | 20.52 |
6
|
1.63 | 2.20 | 3.07 | 3.83 | 5.35 | 7.23 | 8.56 | 10.64 | 12.59 | 16.81 | 22.46 |
7
|
2.17 | 2.83 | 3.82 | 4.67 | 6.35 | 8.38 | 9.80 | 12.02 | 14.07 | 18.48 | 24.32 |
8
|
2.73 | 3.49 | 4.59 | 5.53 | 7.34 | 9.52 | 11.03 | 13.36 | 15.51 | 20.09 | 26.12 |
9
|
3.32 | 4.17 | 5.38 | 6.39 | 8.34 | 10.66 | 12.24 | 14.68 | 16.92 | 21.67 | 27.88 |
10
|
3.94 | 4.86 | 6.18 | 7.27 | 9.34 | 11.78 | 13.44 | 15.99 | 18.31 | 23.21 | 29.59 |
sklearn函数剖析
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import chi2
SelectKBest(chi2, k=2).fit_transform(irisdata.data,irisdata.target)
部分结果如下
array([[ 1.4, 0.2],
[ 1.4, 0.2],
[ 1.3, 0.2],
[ 1.5, 0.2],
[ 1.4, 0.2],
[ 1.7, 0.4],
[ 1.4, 0.3],
[ 1.5, 0.2],