读书笔记《集体智慧编程》Chapter 6 : Document Filtering

简介:

本章概要

本章主要介绍了两种分类技术:

  • 朴素贝叶斯分类(Naive Bayesian Classification)
  • 费舍尔分类器(Fisher Classification)

上面两种技术的共性都是基于条件概率计算不同分类的概率,然后通过设定一些阀值,找到最适合的分类。分类过程中,都使用了权重概率,用户避免极概率的发生。

当然,上述两种分类器不仅仅局对邮件分类,还可以对其他实物,如文章,图像,商品等分类,关键是如何抽取特性。

 

特性

特性是根据不同实物而变化的。比如一般的文本,如新闻。可以将词语出现与否作为特性。比如邮件,可以将发送邮件的IP,发送者,发送时间,大写出现频率等均作为特性。

 

训练

人工将一系列特性集合分到特定的分类。后续的算法,根据这个人工分类,按照概率的方式自动计算出分类。

 

权重概率

weightPro = (weight*assumpProb + total*basicProb) / (total+weight),assumProb和weight认为给出,total是feature总数,basicProb是分类的概率。权重概率用于避免极端值,比如刚开始,“money”只在bad分类中出现,但是这并不意味着money只能是bad,

加上权重,可以使这个过程渐变,避免“天下乌鸦一般黑”的现象发生。

 

朴素贝叶斯分类

训练后,可以得到概率p(feature | category),这个也就是特定分类下,特性出现的集合。朴素的意思是假设feature之间没有依赖,当然这个假设存在问题。但是实时证明,朴素贝叶斯分类器的效果还是可以接受的。

贝叶斯定理:

p(A|B) = p(B|A) * p(A) / p(B)

应用贝叶斯

将上面公司带入到实际问题中,就是

p(Category | Document) = p(Docuemnt | Category) * p(Category) / p(Document)

其中

p(Document | Category) = p(feature 1|Category) * ... * p(feature N | Category)

p(Category) = 人工分类的category的文本个数 / 总体人工分类的个数

p(Document) = 不用计算,p(Category 1|Docuemnt)与p(Category 2  | Docuemnt)均要处理此值,绝度大小对分类没有多大意义,只要知道相对大小就OK了,当然也可以求出来,但是需要更多的二外信息,比如idf值

选择分类

根据上面的公式,算出一个文本中不同分类的概率,然后比较大小,确定最后分类。不能简单的比较不同分类的大小来决定分类,需要更具应用场景觉得策略。比如邮件分类,允许将少量垃圾邮件分类成正常邮件,但是不允许将许多正常邮件分类成垃圾邮件。所以,需要添加一个阀值,来控制程度。比如垃圾邮件的概率必须大于正常邮件的3备,才允许是垃圾邮件,否则不是。

 

费舍尔分类

该算法基于p(feature|category),该值表示特定分类的特性概率。比如词语“quick”出现在good文本中的概率。在本书的例子中,是2/3。这个值有一特性,它的大小与特定分类的绝对数量无关。举个例子,比如‘money’出现在坏的文本中1次,但是训练中的文本只有1个,那么p(money|bad)=1(但是这样是不行的,有些场景中,money出现不意味者垃圾邮件,所以需要上面的权重概率缓解此情况)。即使在good文本中出现10次,但good文档有1000个,那么p(money|good)=0.01。

费舍尔分类的重要值

p1 = p(feature 1|category)

...

pn = p(feature n|category)

cprof1 =p1/sum (p1, .. ,pn )

cprof1可以描述feature 1出现时,他所代表的文本的概率的分类。

合并概率

选定一个分类,对所有词计算cprof1,然后相乘后为mcrpof。这里与朴素贝叶斯分类器一样,假设各个词语之间相互独立。计算完后,取自然对数,然后乘以-2(不知道为什么要这么做)。这个算法最重要的地方就是fisher证明了mcropof服从卡方分布(chi-square distribution),但是没有提到证明过程。通过卡方分布,可以计算概率。上面取自然对数,乘以-2是为了可以带入卡方分布公式,计算概率。(目前还不太明白卡方分布是个什么东东,google了一下,发现是正太分布演变过来,这个后续在追究,这里不得不再一次感态数学的奇妙。)

选取分类

最后,与朴素贝叶斯分类器一样,需要靠如何选取不同分类的结果。对所有分类设计一个下限,如果分类的概率低于这个下限,那么抛弃,主要是为了避免将好邮件误分类为坏邮件的场景。据实践证明,fisher分类器好于朴素贝叶斯分类器。

 

其他可选的分类方法

神经网络(neutral nework)和supprt vector machine也可以用作分类。贝叶斯分类器的优势在于计算量小,但是相比去前面两者,不够精确,因为没有考虑feather之间的依赖关系,而前者考虑了。

声明:如有转载本博文章,请注明出处。您的支持是我的动力!文章部分内容来自互联网,本人不负任何法律责任。
本文转自bourneli博客园博客,原文链接:http://www.cnblogs.com/bourneli/archive/2012/11/15/2772252.html ,如需转载请自行联系原作者
相关文章
|
存储 程序员 C++
《高质量C/C++编程》读书笔记三
《高质量C/C++编程》读书笔记三
93 0
|
前端开发 Java 程序员
《高质量C/C++编程》读书笔记一
《高质量C/C++编程》读书笔记一
99 0
|
存储 人工智能 算法
C++ Primer Plus 第6版 读书笔记(7)第 7 章 函数——C++的编程模块
乐趣在于发现。仔细研究,读者将在函数中找到乐趣。C++自带了一个包含函数的大型库(标准 ANSI 库加上多个 C++类),但真正的编程乐趣在于编写自己的函数;另一方面,要提高编程效率,本章和第 8 章介绍如何定义函数、给函数传递信息以及从函数那里获得信息。
175 0
|
存储 编解码 JSON
Python编程从入门到实践-读书笔记(下)
基础知识重点摘录 字符串 在Python中,用引号括起的都是字符串,其中的引号可以是单引号,也可以是双引号。这种灵活性让你能够在字符串中包含引号和撇号:
|
存储 JSON 测试技术
Python编程从入门到实践-读书笔记(上)
基础知识重点摘录 字符串 在Python中,用引号括起的都是字符串,其中的引号可以是单引号,也可以是双引号。这种灵活性让你能够在字符串中包含引号和撇号:
|
存储 安全 编译器
[笔记]读书笔记 C++设计新思维《一》基于策略的类设计(下)
[笔记]读书笔记 C++设计新思维《一》基于策略的类设计(下)
|
存储 关系型数据库 编译器
C++ Primer Plus 第6版 读书笔记(9)第 9章 函数——内存模型和名称空间
C++ Primer Plus 第6版 读书笔记(9)第 9章 函数——内存模型和名称空间
125 1
|
存储 算法 编译器
C++ Primer Plus 第6版 读书笔记(8)第 8章 函数探幽(二)
C++ Primer Plus 第6版 读书笔记(8)第 8章 函数探幽(二)
78 1