上一篇说明从皮尔逊系数选择,这次使用卡方检验的方法来选择特征,使用假设检验的方式。

首先还是从卡方检验的原理,一切还是从白话文说起。

一个案例:

某医疗机构为了了解呼吸道疾病与吸烟是否有关,进行了一次抽样调查,共调查了 515 个成年人,其中吸烟者 220 人,不吸烟者 295 人.调查结果是:吸烟的 220 人中有 37 人患呼吸道疾病(简称患病),183 人未患呼吸道疾病(简称未患病);不吸烟的 295 人 中有 21 人患病,274 人未患病. 问题:根据这些数据能否断定“患呼吸道疾病与吸烟有关”?
显示 102550100 项结果搜索:

类型患病未患病合计
吸烟37183220
不吸烟21274295
合计58457515

显示第 1 至 3 项结果,共 3 项上页下页

计算吸烟患病的概率为 17%,不吸烟患病的概率 7%,从这其中如何判断吸烟与患病之间的关系?

独立假设检验

H0:吸烟与患病之间没有关系

H1:吸烟与患病之间存在关系

H0 和 H1 之间的假设是对立的,所以在结果中要么接受要么拒绝

若假设 H0 成立,就需要数据去证明这个假设。

现在抽象化上面的表格,所有的数字使用字母来代替显示 102550100 项结果搜索:

类型患病未患病合计
吸烟aba+b
不吸烟cdc+d
合计a+cb+da+b+c+d

显示第 1 至 3 项结果,共 3 项上页下页

如果吸烟与患病之间没什么关系那么吸烟患病的概率与不吸烟患病的概率基本上相等

aa+b≈cc+daa+b≈cc+d

由此可以得到

ad−bc≈0ad−bc≈0

现在只要上述这个式子成立那么 H0 假设就可以被接受,完成假设检验。

假设n=a+b+c+dn=a+b+c+d,可以将吸烟患病,吸烟不患病,不吸烟患病,不吸烟不患病的人数计算出来

首先给出四个事件说明且各个事件之间相互独立

p(A),p(B),p(C),p(D)p(A),p(B),p(C),p(D),分别表示吸烟,患病,不吸烟,不患病

那么吸烟患病的概率为

p=p(AB)=p(A)∗p(B)p=p(AB)=p(A)∗p(B)

因此得到如下相关计算结果,就死之前描述的四种情况的人数:

吸烟患病:n∗a+bn∗a+cnn∗a+bn∗a+cn

吸烟不患病:n∗a+bn∗b+dnn∗a+bn∗b+dn

不吸烟患病:n∗c+dn∗a+cnn∗c+dn∗a+cn

不吸烟不患病:n∗c+dn∗b+dnn∗c+dn∗b+dn

如果实际观测值与由事件 A、B 相互独立的假设的估计相差不大,那么,我们就可以 认为这些差异是由随机误差造成的,假设不能被所给数据否定,否则应认为假设不能接受.

举个例子:上述吸烟患病计算出来的人数与实际的人数 a 如果相差不大的话证明当前的数据是由随机误差导致的,因此 H0 假设要被接受,不能被拒绝。

怎样刻画实际观测值与估计值的差异呢?统计学中采用如下的量(称为x2x2 统计量)来刻画这个差异

卡方计算的公式是:

x2=∑(A−T)2T=n∗(ad−bc)2(a+b)(a+c)(b+d)(c+d)x2=∑(A−T)2T=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(x2>6.635)≈0.01p(x2>6.635)≈0.01

当前卡方值更大,所以要拒绝 H0 假设,至此可以得到结论,吸烟和患病是有关联的。

自由度的计算是k=(行数−1)(列数−1)k=(行数−1)(列数−1)

自由度 k \ P value (概率)0.950.900.800.700.500.300.200.100.050.010.001
10.0040.020.060.150.461.071.642.713.846.6410.83
20.100.210.450.711.392.413.224.605.999.2113.82
30.350.581.011.422.373.664.646.257.8211.3416.27
40.711.061.652.203.364.885.997.789.4913.2818.47
51.141.612.343.004.356.067.299.2411.0715.0920.52
61.632.203.073.835.357.238.5610.6412.5916.8122.46
72.172.833.824.676.358.389.8012.0214.0718.4824.32
82.733.494.595.537.349.5211.0313.3615.5120.0926.12
93.324.175.386.398.3410.6612.2414.6816.9221.6727.88
103.944.866.187.279.3411.7813.4415.9918.3123.2129.59

sklearn 函数剖析

from sklearn.feature_selection import SelectKBestfrom sklearn.feature_selection import chi2SelectKBest(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],

Deeplearn, 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明特征选择(3)-卡方检验

发表回复