您的位置:首页 > 其它

Programming Collective Intelligence笔记 - Document Filtering

2008-01-17 10:14 531 查看
1.1. Filtering Spam
过滤广告的时候,我们第一步就是把文档进行分类,然后就是把文档进行分词,每个词都直接继承文档的分类。这样通过一些初始的训练之后,每个词都会出现在某一个或某几个分类当中。
这样我们就得到了某一个词出现在某一个分类当中的概率P(W/C) = W在C中出现的次数/C中包含的文档数,W为词,C是分类。这个算法的一个缺点就是,当我们的初始训练文档比较少的时候,很容易就把一个词划分到某个分类当中。
一个改进的方法就是,加入一个初始估计值,和基于文档数的权值进行加权。
(weight*assumedprob + count*fprob)/(count+weight)
Assumeprob:初始估算值
Weight:初始估算值的权重
Count:该词在各个分类当中的总出现数。
Fprob:P(W/C)

1.2. 文档分类(Bayesian Classification)
要进行文档分类,也就是要计算P(C/D),C是分类,D是文档,该概率的含义是,给定一个文档D,它属于某个分类C的概率是多少。通过贝叶斯公式,P(C/D) = P(D/C)*P(C)/P(D)。由于P(D)跟C无关,即在计算P(C1/D),P(C2/D)时,P(D)的值均一样,所以我们可以把P(D)省略。因此P(C/D) = P(D/C)*P(C)。
P(D/C) = P(K1 & K2 & … KN / C)
如果D中的关键字(Kx)是互不相关的,那么P(K1 & K2 & … Kn / C) = P(K1/C)*P(K2/C)*…*P(Kn/C)。其中,每个P(Kx/C)的值上文已求出。P(C)表示随机选一个文本D,它属于C的概率,该值等于C中的文档数除以总的文档数。

1.3. Filtering
在过滤文档时,我们可以分别计算P(Cx/D)的值,然后把最大的值作为文档的分类。但是,这样带来的一个问题是所有的分类都是等权重的。很多时候,过滤的原则是宁可放过一万也不能多删一个,为此,我们可以通过增加一个基于类别的权值实现。
假定P(C1/D)是最大值,我们可以为C1设定一个权值M,那么我们把D划分为C1的条件是,对于任意的Cx(Cx != C1),均有P(C1/D) > M * P(Cx/D)。通过增大M值,我们可以减少某个文档D被划为C1的概率。

1.4. R.A.Fisher方法
该方法在计算P(K/C)时采用了与之前不一样的计算方式,P(K/C1) = P(K/C1) / [P(K/C1) + P(K/C2) + … + P(K/Cn)]。在计算P(D/C)时考虑到关键字之间的相关性,Fisher方法有一套另外的算法,具体可参考书。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: