您的位置:首页 > 编程语言

集体智慧编程学习笔记--文档过滤

2014-11-20 15:52 288 查看
文档分类是机器智能的一个应用,很有使用价值,大家所熟知的应用,就是垃圾邮件过滤了

1、文档分类器组成

文档的特征主要是文档的单词。当单词作为特征数时,假设是:某些单词相对而言更有可能会出现于垃圾信息中。不过特征未必一定是一个个单词,也可以是词组或短语或者任何可以归为文档中缺失或存在的其他东西。

a) 提取特征

这里以任何非字母类字符为分隔符对文本进行划分,将文本拆分成一个个单词。并将这些单词全都转换成小写形式。决定特征:

1)具备足够的普遍性,要时常出现,但又不能普遍到所有文档都能找到。

2)粒度适中,这里整篇文档的文本可以作为特征,但是毫无价值;单个字符也可以作为特征,但如果用来区分希望看到的和不希望看到的文档比较困难;选用单词作为特征,依然会带来一些问题,比如如何正确划分单词,哪些符号应纳入单词以及哪些该包含头信息等。不论有什么的粒度,重要的是能更好的利用特征将一组文档划分到目标分类中去。

选择特征集的时候要做大量的权衡,而且要不断地进行调整。

b) 训练数据

特征/分类组合 (计数值是特征在分类中出现的次数):feature/cat

分类-内容项数量:cat-item

c) 概率

计算单词在分类中的概率:单词在一篇属于某个分类的文档中出现的次数/该分类的文档总数

Pr(A|B):在给定B的条件下A的概率

这里对应Pr(word|classification):对于一个给定的分类,某个单词出现的概率

这里的训练是根据见过的信息进行的,即现在掌握的有关当前特征的信息极为有限,需要根据一个假设的概率来做出判断。本文中推荐的假设概率初始值是0.5,同时需要确定为假设的概率赋以多大的权重——权重为1代表假设概率的权重与一个单词相当。

公式:(weight(假设概率权重)*assumedprob(假设概率)+特征在所有分类中出现的次数*单词在需判断分类的概率值)/(概率假设权重+特征在所有分类出现的次数)

2、朴素贝叶斯分类器

假设要被组合的各个概率是彼此独立的。即,一个单词在属于某个指定分类的文档中出现的概率,与其他单词出现与该分类的概率是不相关。由于这种独立性的假设会得到错误的结果,这里将无法采用朴素贝叶斯分类器所求得的结果实际用作一篇文档数据某个分类的概率。在现实中,若不考虑假设的潜在缺陷,朴素贝叶斯分类器将被证明是一种非常有效的文档分类方法。

根据假设,计算整篇文档的概率,只须将所有出现与某篇文档中的各单词的概率相乘即可。即Pr(Document | Category)可以计算,但是对文档进行文类,真正需要的是Pr(Category | Document) 对于一篇给定的文档,其属于某个分类的概率是多少这里需要用到贝叶斯定理。

a) 贝叶斯定理

一种对条件概率进行调换求解的方法。通常被写作:Pr(A | B)=Pr(B | A) * Pr(A)/Pr(B)

本文中则是: Pr(Category | Document)=Pr(Document | Category) * Pr(Category)/Pr(Document)

Pr(Document | Category):整篇文档的概率,用文档中单词的概率相乘得到

Pr(Category):随机选择一篇文档属于该分类的概率,即属于该分类的文档数/文档的总数

Pr(Document):选择文档的概率??对于分类而言,是个常数

b) 选择分类

构造朴素贝叶斯分类器的最后一个步骤是实际判断某个内容项所述的分了,简单的方法是卡超内容在每个不同分类中的概率,然后选择概率最大的分类。如果只是简单判断”将内容放到哪里最合适“,可以将此作为一种可行的策略。但是在许多应用中,是无法将每个分类同等对待的,而且在一些应用中,对于分类器而言,承认不知道答案,要好过判断答案就是概率值稍微大一些的分类。比如在垃圾信息过滤中,避免将普通邮件错当成垃圾邮件要比截获每一封垃圾邮件更为重要。为了解决这一问题,可以为每个分类顶一个小阈值。对于一封将要被归为某个分类的新邮件而言,起概率与针对所有其他分类的概率相比,必须大于某个指定的数值才行。这一指定的数值就是阈值。

3、费舍尔方法

现实应用中经常用到的方法。

a) 原理

与朴素贝叶斯过滤器利用特征概率来计算整篇文档的概率不同,费舍尔方法为文档中的每个特征都求得了分类的概率,然后又将这些概率组合起来,并判断其是否有可能构成一个随机集合。该方法还会返回每个分类的概率,这些概率彼此间可以进行比较。

b) 计算过程

Pr(Category | feature)的常见方法是:(具有指定特征的属于某分类的文档数)/(具有指定特征的文档总数)

clf=Pr(feature | category):属于某分类的概率

freqsum=Pr(feature | category):属于所有分类的概率之和

cprob=clf/(clf+nclf)

费舍尔方法的计算过程是将所有概率相乘起来,然后取自然对数,再将所得结果乘以-2。费舍尔方法告诉我们,如果概率彼此独立且随机分布,则这一计算结果将满足对数卡方分布。如不属于某个分类的内容项中,可能会包含针对该分类的不同特征概率的单词(可能会随机出现);或者,一个属于该分类的内容项中会包含许多概率值很高的特征。通过将费舍尔方法的计算结果传给倒置对数卡方函数,将会得到一组随机概率中的最大值。

4、小结

上述两个分类器都是监督型学习方法,这是一种利用正确结果接受训练并逐步做出更准确的方法。

附录

a) 卡方分布

k个独立的标准正态分布变量的平方和服从自由度为k的卡方分布。卡方分布是一种特殊的伽马分布。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: