文本挖掘的特征选择算法
本文将介绍常见的自然语言处理中的特征选择算法,在常见的 NLP 任务中,可以分为有监督与无监督任务,在有监督的任务中,比如文本分类中,常用的特征选择方法有基于阈值的统计方法与空间变换算法(比如 PCA,SVD),本文主要介绍无监督特征选择算法,因为基于阈值的统计方法具有计算复杂度低,速度快的优点,尤其适合做文本分类中的特征选择。
为了接下来的描述方便,先定义一些符号:
$A_i$: 包含特征词$t$,并且类别属于 $C_i$ 的文档数量 $B_i$: 包含特征词 $t$ ,并且类别不属于$C_i$ 的文档数量,$C_i$:不包含特征词 $t$ ,并且类别属于 $C_i$ 的文档数量 $D_i$:不包含特征词 $t$ ,并且类别不属于 $C_i$ 的文档数量。
$A_i+B_i$ 指包含特征词 $t$ 的文档数量,$C_i+D_i$ 指不包含特征词ti的文档数量 , $A_i+C_i$ 指$C_i$类的文档的总数量数据,$B_i+D_i$:表示非 $C_i$ 类的文档数量。$N =A_i+B_i+ C_i+D_i$ :语料中所有文档数量。
有了这些统计量,有关概率的估算就变得容易,如:
\[p(t) = \frac{(A_i + B_i)}{N} \ \ \ \ p(C_i) = \frac{(A_i + C_i)}{N} \]
1.有监督特征选择
这里词语特征项用 $t$ 表示,特征选择的任务是从这 $n$ 个特征中选择出前对任务最有益的前 $k$个。
1)信息增益方法( Information Gain)
它依据某特征项 $t_i$ 为整个分类所能提供的信息量多少来衡量该特征项的重要程度,从而决定对该特征项的取舍。$t_i$的信息增益是指有该特征或没有该特征时,为整个分类所能提供的信息量的差别,其中,信息量的多少由熵来衡量。熵可以视为描述一个随即变量的不确定性的数量。熵越大,不确定性越大,那么,正确估计其值的可能性就越小。
熵(Entropy):对于变量 $X$ ,其可能的取值为 $X=x_1,x_2,...,x_n$ ,对应的概率为 $p_1,p_2,...,p_n$,则 $X$ 的熵的定义为:
\[H(X) = - \sum_ip(x_i)logp(x_i)\]
根据熵的定义,对于有监督文本预料,可以得到其熵值,假设训练语料库 $X$ 有 $m$ 个类别,每个类别下分别有 $C_1,C_2,...C_m$ 篇文档,则语料库中每个类别的概率为 ,继而可求得语料库的熵 ${H(X)} = -\sum_ip(C_i)logp(C_i)$,词语 $t$ 的信息增益是指添加了该词语后语料库增加的信息量。信息增益定义如下:
\begin{aligned}
IG(t) &= H(X) - H(X|t) \\
&=H(X) - p(t)H(X|t) -p(\bar{t})H(X|\bar{t}) \\
&=-\sum_ip(C_i)logp(C_i)+p(t)\sum_ip(C_i|t)logp(C_i|t)+p(\bar{t})\sum_ip(C_i|\bar{t})logp(C_i|\bar{t})\\
\end{aligned}
这里 $\bar{t}$ 表示 $t$ 不出现。对于特征 $t$,要计算它的信息增益来决定它是不是对分类是有帮助的。所以,先看不考虑任何特征时文档的熵,也就是没有任何特征的时候做分类,有多少的信息。再看考虑了该特征后,能有多少的信息。很明显,二者之差就是该特征 $t$ 带来的信息量。
2)互信息方法(Mutual Information)
互信息法用于衡量特征词与文档类别直接的信息量,特征 $t$ 对于某个类别 $C_i$ 定义如下:
\[MI(t,C_i) = log\frac{p(t|c_i)}{p(t)}\]
对于所有类别的互信息为:
\[MI(t,C_i) = \sum_i p(C_i)log\frac{p(t|c_i)}{p(t)}\]
3)CHI-Square 算法
CHI特征选择算法利用了统计学中的"卡方检验"的基本思想,卡方检验就是统计样本的实际观测值与理论推断值之间的偏离程度,实际观测值与理论推断值之间的偏离程度就决定卡方值的大小,卡方值越大,越不符合;卡方值越小,偏差越小,越趋于符合,若两个值完全相等时,卡方值就为0,表明理论值完全符合,假设理论值用 E 表示,则观测值 $x_i ,i = 1,2,...,N$与理论值的的偏差为:
\[\sum_{i=1}^N\frac{(x_i - E)^2}{E}\]
如果该偏差大于给定的阈值,就说明否定预先设立的假设,否则接受该假设,在特征选择中,对于词语 $t$ 与类别 $C_i$ ,首先假设的特征词 $t$ 与类别 $C_i$ 是不相关的,通过假设检验得到的偏差值越大,说明词 $t$ 与 类别 $C_i$ 越相关,取每个类别 $C_i$ 下偏差值最大的前 k 个词即完成了特征选择的过程,
这里以 $A_i$ 的理论值为例,$A_i$ 为包含词语 $t$ 且属于类别 $C_i$ 的文档数,其理论值的计算是这样的:包含词语 $t$ 的文档可以记做 $A_i + B_i$ ,则词语 t 出现的概率(或者叫做观测值)为 :
\[\frac{A_i + B_i}{N}\]
而类别 $C_i$ 的文档总数为 $A_i + C_i$ ,进而可得类别 $C_i$ 下出现词 $t$ 的理论值为:
\[ E_{11} = (A_i + C_i)\frac{A_i + B_i}{N}\]
计算其与 $A_i$ 的偏差即可:
\[D_{11} = \frac{(A_i - E_{11})^2}{E_{11}}\]
接下来分别计算 $B_i,C_i,D_i$ 的偏差值,计算过程类似,分别得到 $D_{12},D_{21},D_{22}$,继而得到开放检验的值:
\begin{aligned}
\chi^2(t,C_ i) &=D_{11} +D_{12}+D_{21}+D_{22} \\ &= \frac{N(A_iD_i-C_iB_i)^2}{(A_i+C_i)(B_i+D_i)(A_i+B_i)(C_i+D_i)}\\
&=\frac{(A_iD_i-C_iB_i)^2}{(A_i+B_i)(C_i+D_i)}
\end{aligned}
由于 $N = A+B +C+D$ ,因此实际使用中通常使用如下公式:
\[\chi^2(t,C_i) = \frac{(A_iD_i-B_iC_i)^2}{(A_i+B_i)(C_i+D_i)}\]
CHI 还有地频词缺陷,可以结合一些词频处理的方式改进这个缺陷。以上便是常见的文本挖掘中的特征选择算法,有新的再补充。
参考文献:
http://blog.csdn.net/wangran51/article/details/8446234