基于卡方检验的特征选择,更多也可参考http://nlp.stanford.edu/IR-book/html/htmledition/feature-selectionchi2-feature-selection-1.html
———————— 原理简介 ————————
卡方检验(\(\chi ^2\) test),是一种常用的特征选择方法,尤其是在生物和金融领域。\(\chi ^2\) 用来描述两个事件的独立性或者说描述实际观察值与期望值的偏离程度。\(\chi ^2\)值越大,则表明实际观察值与期望值偏离越大,也说明两个事件的相互独立性越弱。
以下表我们简单说明一下,\(\chi ^2\) test的意思:
比如我们现在有一个生物学问题,我们需要从采样的5个基因 \(gene1,…,gene5\) 中找到某种疾病的1个致病基因。下表我们分别统计了患病和不患病人群5种基因的出现频率。当我们把一种基因看做一种特征的时候,找到致病基因就可以看做是选择一种特征使得患病-不患病的二分类问题准确率最高。
gene1 | gene2 | gene3 | gene4 | gene5 |
---|---|---|---|---|
患病 | 0.73 | 0.24 | 0.21 | 0.54 |
不患病 | 0.71 | 0.26 | 0.87 | 0.55 |
首先,我们做出假设 “患病与gene_x无关”。
以gene1为例,分布比较稳定, \(\chi ^2\) 值应该比较小,即两事件相互独立性比较强,即假设成立。
再以gene3为例,分布偏差很大, \(\chi ^2\) 值应该很大,即两事件相互独立性很弱,即假设不成立,因此最后我们选择gene3作为致病基因。
上述的例子比较简单,也存在一些不合常理的地方,仅仅用于帮助大家理解。
———————— 计算 \(\chi ^2\) 值 ————————
接下来我们讲怎样具体地计算 \(\chi ^2\) 值。
先直接上公式:
\(X^2(t,c) =
\sum_{e_t \in { 0,1 } }
\sum_{e_c \in { 0,1 } }
\frac{(N_{e_t e_c}-E_{e_t e_c})^2}{E_{e_t e_c}}\)
其中\(t:term\),即某个特征有或无,\(c: class\) ,即类别1或0(这里只支持2分类)。\(N\) 是观察值, \(E\) 是期望值。则 \(E_{11}\) 表示出现特征 \(t\) 且 类别 \(c=1\)。
现在,我们以第一节中的 gene3 为例,来计算 \(\chi ^2\) 值,当然按照公式我们