zoukankan      html  css  js  c++  java
  • 文本挖掘的特征选择算法

    本文将介绍常见的自然语言处理中的特征选择算法,在常见的 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$  的信息增益是指添加了该词语后语料库增加的信息量。信息增益定义如下:

    egin{aligned}
    IG(t) &= H(X) - H(X|t) \
    &=H(X) - p(t)H(X|t) -p(ar{t})H(X|ar{t}) \
    &=-sum_ip(C_i)logp(C_i)+p(t)sum_ip(C_i|t)logp(C_i|t)+p(ar{t})sum_ip(C_i|ar{t})logp(C_i|ar{t})\
    end{aligned}

    这里 $ar{t}$ 表示 $t$ 不出现。对于特征 $t$,要计算它的信息增益来决定它是不是对分类是有帮助的。所以,先看不考虑任何特征时文档的熵,也就是没有任何特征的时候做分类,有多少的信息。再看考虑了该特征后,能有多少的信息。很明显,二者之差就是该特征 $t$ 带来的信息量。

    2)互信息方法(Mutual Information)  

    互信息法用于衡量特征词与文档类别直接的信息量,特征 $t$ 对于某个类别 $C_i$ 定义如下:

    [MI(t,C_i) = logfrac{p(t|c_i)}{p(t)}]

    对于所有类别的互信息为:

    [MI(t,C_i) = sum_i p(C_i)logfrac{p(t|c_i)}{p(t)}]

    3)CHI-Square 算法

    CHI特征选择算法利用了统计学中的"卡方检验"的基本思想,卡方检验就是统计样本的实际观测值与理论推断值之间的偏离程度,实际观测值与理论推断值之间的偏离程度就决定卡方值的大小,卡方值越大,越不符合;卡方值越小,偏差越小,越趋于符合,若两个值完全相等时,卡方值就为0,表明理论值完全符合,假设理论值用 E 表示,则观测值 $x_i ,i = 1,2,...,N$与理论值的的偏差为:

    [sum_{i=1}^Nfrac{(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}$,继而得到开放检验的值:

    egin{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

  • 相关阅读:
    利用python 掌握机器学习的过程
    SendMessage用法
    python函数形参中的*args和**kwargs
    python 用win32修改注册表,修改打开IE浏览器的配置
    python .py .pyc .pyw .pyo .pyd区别
    代码性能提升10倍(ForkJoin)
    雪花算法生成id
    配置虚拟机
    kafka多线程消费
    Redis存储对象序列化和反序列化
  • 原文地址:https://www.cnblogs.com/ooon/p/5616715.html
Copyright © 2011-2022 走看看