特征选取/停用词筛选的三种指标
方差/概率方差
方差用来检验数据的分散程度,是特征选取的常用指标。
但在nlp中,由于不同的词的词频有着非常大的差异,导致直接利用词的出现概率计算方差会由于基数的大小差异导致结果的偏差,比如下面这个例子:
在一个二分类问题中,“的”在0(积极)和1(消极)类中的出现概率p0(的)=0.55,p1(的)=0.45,方差为0.0025,而“好极了”在0类和1类中的出现概率分别为p0(好极了)=0.0002,p1(好极了)=0;则其方差为10^-8,远小于0.0025.但实际上“好极了”只在0(积极)类中出现,且显然“好极了”是一个非常积极的词汇。
为了应对这种问题,就可以使用概率方差(标准差):
亦即对标准差除以该词总的出现概率,在本例中,“好极了”和“的”的概率方差(标准差)分别为0.5和0.05,显然“好极了”比“的”要更具有区分度,效果提升显著。
信息增益/互信息
怎样衡量单个事件的包含的信息量呢?
假设事件A发生的概率为p,其包含的信息量即为log(1/p)。
这里根据底数的不同会有不同的单位,底数为2单位即bit。
就是说,一件事发生的概率越小,其包含的信息量越大。
“地球爆炸”的信息量确实比“早上起床”的信息量要大。
我们把一组数据中出现某个数据看作一个事件,怎样衡量这一组数据包含的信息量呢?
就是用信息熵:
信息熵其实就是信息的期望值。
比如下面这个例子:
H(做没做噩梦)=log(8/5)*5/8+log(8/3)*3/8=0.1276+0.1597=0.2873
而怎么判断“晚饭好不好吃”和“被老板骂”对做噩梦的影响程度呢,就要用到信息增益。
信息增益,又叫互信息,用来表示某事件确定后对另一事件的影响程度。
即信息增益使用划分前后集合熵的差值来衡量使用当前特征A对于样本集合D划分效果的好坏。
比如上面的例子里,g(被老板骂了吗)=H(做没做噩梦)-[H(做没做噩梦|被老板骂了)+H(做没做噩梦|没被老板骂)]=0.2873-[(log(1)*1)*5/8+(log(1)*1)*3/8]=0.2873,
g(晚饭好吃吗)=H(做没做噩梦)-[H(做没做噩梦|晚饭好吃)+H(做没做噩梦|晚饭不好吃)]=0.2873-[(log(7/2)*2/7+log(7/5)*5/7)*7/8+(log(1)*1)/8]=0.2873-(0.1554+0.1044)*0.875=0.059975,
0.2873>0.059975,“被老板骂"的信息增益比”晚饭好不好吃“的信息增益大,说明被没被老板骂确定之后对做不做噩梦的影响比晚饭好不好吃确定之后对做不做噩梦的影响大,所以”被老板骂“是划分”做不做噩梦“的更好的指标。
决策树中的ID3算法就是利用信息增益选择的特征。
卡方检验
卡方检验是先假设后检验,其思想路线是这样的:
假设。。。那么xxx应该是xxx,但是/确实根据实际数据xxx是/不是xxx,所以假设不成立/成立。
一般是假设某个特征对结果没有影响,然后根据标签去反推这个特征的理论取值,看理论取值与实际数据的差距,差距越大,说明这个假设越偏离现实,就是假设不成立。反之,推论数据与实际数据的差距越小,就说明推论越接近现实,推论就会成立。
举个例子:
假设喝牛奶和感冒无关,那么根据”合计“中的比例,n个人中,感冒的人数会是0.2829*n,不感冒的人数会是(1-0.2829)*n,所以我们分别把喝牛奶和不喝牛奶的总人数带入:
计算得,我们”喝牛奶和感冒无关“假设下的推论数值应该为:
然后我们就要衡量推论数值与实际数据的差异了,卡方检验使用如下公式:
其中A为实际值,T为理论值。由于平方项放大了差异,我们在分母上加上一个T,一来是为了使数据的单位统一(量纲);二来也是求了一个相对量,减小了上文方差中那种基数差异对结果的影响。
比如上面的例子中,我们计算得其卡方值为1.077。
之后根据自由度和阈值要求(自由度等于V = (行数 - 1) * (列数 - 1),对四格表,自由度V = 1。阈值一般取0.05,即喝牛奶和感冒95%概率不相关,其临界值为3.84)。
即若我们的卡方值小于临界值,我们就认为推论与实际数据的差异足够小,假设成立;如果差异大于临界值,我们就认为推论与实际数据的差异不够小,假设不成立。
上例中1.077<3.87,推论与实际数据的差异足够小,所以我们认为推论正确,即喝牛奶和感冒无关。