经过分类器产生的结果有时可能产生错误(就比如基于决策树的分类器),这时我们可以要求分类器给出我们一个最优的
猜测结果,同时给出这个猜测的概率估计值。这时候我们的概率论就要排上用场了。
这次笔记的内容时朴素贝叶斯,因为其最原始,最简单的假设方法,所以称其为朴素。
朴素贝叶斯的优缺点.
优点:
在数据比较少的情况下仍然有着效果,可以处理多类别的问题。
缺点:
对于输入数据的准备方式比较敏感。
适用数据类型:标称型数据。
ps:
标称型:标称型目标变量的结果只在有限目标集中取值,如真与假(标称型目标变量主要用于分类)
数值型:数值型目标变量则可以从无限的数值集合中取值,如0.100,42.001等 (数值型目标变量主要用于回归分析)
贝叶斯决策理论:
假设我们有一个数据集,它由两类数据组成,我们通过一系列nb的分析找到了这两类数据的统计参数。
我们现在用p1(x,y)表示数据点(x,y)属于类别1概率。
同理,我们用p2(x,y)表示数据点属于类别2的概率。
那么我们此时得到一个新的数据点(x,y),可以用下面的判断方法来判断它属于哪个类别。
我不用说,自己体会…(哪个概率大就放哪个咯)
假设我们的数据要使用6个统计参数来表示,我们此时要考虑如何对我们的数据点进行分类。
(1).使用我们k近邻法,进行1000次距离计算。
(2).使用决策树,分别沿x,y轴划分数据。
(3).计算它在每个类别中的概率,然后比较得出结果。
第一种方法计算量太大,第二种方法未必会成功,所以很明显我们选第三种方法(我就这么跟着书跑了…)。
首先我们要想起一个公式,贝叶斯准则:
我们结合上面的问题和贝叶斯准则,我们可以写成以下公式:
p(c|x,y):给定某个由xy表示的点,那么这个点来自分类c的概率是多少。
那么我们改写上面的定义:
如果p(c1|x,y)>p(c2|x,y),那么数据点属于分类c1。
如果p(c2|x,y)>p(c1|x,y),那么数据点属于分类c2。
利用贝叶斯准则,我们就可以计算出我们想得到的结果。
介绍完基本的概念,我们就可以到底如何运用上述的知识了。
例:使用朴素贝叶斯进行文档归类
通过观察文档中的出现的词,并把文档中的词汇的出现或者不出现作为一个特征。
第一个假设:特征之间相互独立,即一个特征或单词出现的可能性与其他单词的相邻没有关系。
第二个假设:每个特征同等重要。
我们仔细考量这两个假设,其实感觉和我们的生活好像有那么些出入。
但是这个分类方法的效果却非常好,瑕不掩瑜嘛。
使用python来进行文档分类
要想从文本中获得特征,我们需要先拆分文本。我们的特征来自文本的词条,一个词条是字符的任意组合。
我们可以将词条理解为一个个的单词,也可以看作是url,ip和其他字符串。
然后将每个文本片段表示为一个文本向量。
其中1表示词条出现在文档中,0表示未出现。
训练算法
通过前面的方法,我们已经将一组单词转换为一组数字,接下来我们看看如何通过这些数字来求概率。
我们将贝叶斯准则进行修改:
其中w是一个向量,由多个值组成。
用到我们上面的第二个假设,如果w展开为一个个的独立的特征,那么我们可以这么写:
代入上述的准则当中,我们就可以很轻易的进行计算了。
talk is cheap,I will show you the code:
我们将某个词在文档中出现与否当作一个特征,这被描述为词集模型。
如果一个词在文档中不止出现一次,这可能意味着包含该词是否出现在该文档中所不能表达的某种信息,这种描述为词袋模型。
我们可以将如下函数进行修改:
改进后的代码如下:
我们注意到我们的输入是一个词集,并不是我们生活中的所谓的字符串,我们可以通过以下函数将我们的我们的字符串转换我们
可以使用的词集,我们要考虑以下的问题:
1.对于文本中的标点符号,并没有使用价值
2.文本中的大小写,可能会使我们的学习经验出一些问题.
那么我们可以通过以下方式进行解决: