卡方检验的核心思路就是通过比较观察值和理论值之间的差异来判定假设是否成立。具体做法如下两步
1, 先假设两个变量是独立的。
2, 计算理论值和观察值的实际偏差程度来判定是否接受假设。如果偏差较小,那么就接受假设,否则应该拒绝假设。
那么怎么来计算偏差呢? 我们假定理论值就是我们的所说的数学期望E,那么观察值就是我们实际看到数值x,那么两者之间的差就是偏差的大小了,如下:
不过这个式子还是有点问题的,比如xi-E = -2 而xj - E = 2 这时候求和就发现和是为0的,这和我们观察的结果是不符的,为了避免这种情况可以对差值求平方,这样就可以保证差值为非负了,如下:
这样我们就得到了变量的观察值和理论值之间的差异了,但是只要我们细细思考下可以发现这个式子还是存在一个问题: 差值大小能真实体现这种相关性么?比如一个变量的实际值为5 期望值为10他们的差值为5,而另外一个变量的实际值为95期望值是100差值同样也是5,但是能说他们差异是一样么? 很直观的可以看到第一个变量相对期望值的差异是50%而第二个变量相对期望值差异只有5%。所以我们需要进一步的修改这个差异值的公式,需要除以期望值,用相对期望的差异来衡量变量观察值和期望值的差异程度,如下:
现在只要把我们观察到的样本值代入这个式子来计算两个变量之间的相关性了。下面用一个例子来说明式子中 各个项如何计算:
我们选择搜狗实验室语料中娱乐类文档为例,看“演员”这个词和娱乐类节目的相关性。
我们假设“演员”和娱乐类文档是独立的。
我们根据文档数以及“演员”出现的频次构建如下表格:
从此表格中我们可以计算如下一些数值:
娱乐类含“演员”的开方值
以此类推计算其余几项的开方值,然后将他们求和最后就是“演员”和娱乐类的开方值
上式通过化简可以得到
在文本分类时,用空间向量模型来表达文本的时候,就可以用卡方检验来作为选词的算法。还是搜狗实验室的语料为例,计算各个词和各个类别的开方值(选取top20的词)如下:
从这个实验结果来看,卡方检验得到的结果并不是那么理想,其实只要我们仔细分析,不难发现,那些卡方值较大从经验上来看和其对应的类别相关性并不大的词实际上在这个对应类别出现的频次实际上非常之低,用两个办法可以进行优化
1, 去掉频次小于100的词,然后再按照开方值取top
2,按照词频取top 然后再对这些词按照开方值排序。
按照算法2优化后的结果如下:
可以看出按照算法2优化后,选出来的词已经相当好了,从这里也可以看出开方分布的一个缺点: 低频词缺陷。 所以在用这个算法进行筛选的时候需要对低频词进行特殊处理。