机器学习实战之朴素贝叶斯

机器学习实战之朴素贝叶斯

1.1、简介

贝叶斯分类是一类分类算法的总称,这类算法均以贝叶斯定理为基础,故统称为贝叶斯分类。已知某条件概率,如何得到两个事件交换后的概率,也就是在已知P(AB)的情况下如何求得P(BA)。这里先解释什么是条件概率:P(AB)表示事件B已经发生的前提下,事件A发生的概率,叫做事件B发生下事件A的条件概率。其基本求解公式为:

贝叶斯定理之所以有用,是因为我们在生活中经常遇到这种情况:我们可以很容易直接得出P(AB),P(BA)则很难直接得出,但我们更关心P(BA),贝叶斯定理就为我们打通从P(AB)获得P(BA)的道路。贝叶斯公式即为:

1.2、简介朴素贝叶斯分类原理

基础思想:对于给出的待分类项,求解在此项出现的条件下各个类别出现的概率,哪个最大,就认为此待分类项属于哪个类别。算法步骤如下:

1、找到一个已知分类的待分类项集合,这个集合叫做训练样本集。

2、统计得到在各类别下各个特征属性的条件概率估计,即

3、如果各个特征属性条件独立,有如下推导:

因为分母对于所有类别为常数,要找概率最大的类别,我们找到分子最大的就行。又因为各特征属性是条件独立的,所以:

注意:如果某个类别的概率为0,那么整个概率的乘积为0,为避免这种现象的产生,我们引入Laplace校准,可以初始化所有的类别出现的频率为1。

1.3、Python实践朴素贝叶斯分类

以在线社区的留言板为例。为了不影响社区的发展,我们要屏蔽侮辱性的言论,所以要构建一个快速过滤器,如果某条留言使用了负面或者侮辱性的语言,那么就将该留言标识为内容不当。过滤这类内容是一个很常见的需求。对此问题建立两个类别:侮辱类和非侮辱类,使用1和0分别表示。接下来首先给出将文本转换为数字向量的过程,然后介绍如何基于这些向量来计算条件概率,并在此基础上构建分类器,实现文档分类。

1、准备数据:从文本中构建词向量

我们将把文本看成单词向量或者词条向量,也就是说将句子转换为向量。考虑出现在所有文档中的所有单词,再决定将哪些词纳入词汇表或者说所要的词汇集合,然后必须要将每一篇文档转换为词汇表上的向量。

以斑点犬网站上的留言为例,第一篇文档,转换后的词向量结果为:

[0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0]

2、训练算法:从词向量计算概率

代码函数中的输入参数为文档矩阵,以及由每篇文档类别标签所构成的向量 。首先,计算文档属于侮辱性文档的概率,即 p_abusive 。因为这是一个二类分类问题,所以可以通过 1-p_abusive 得到 P(0) 。对于多于两类的分类问题,则需要对代码稍加修改。需要初始化程序中的分子变量和分母变量 。由于w中元素如此众多,因此可以使用NumPy数组快速计算这些值。 for 循环中,要遍历训练集 trainMatrix 中的所有文档。一旦某个词语(侮辱性或正常词语)在某一文档中出现,则该词对应的个数( p1Num 或者 p0Num )就加1,而且在所有的文档中,该文档的总词数也相应加1 。对于两个类别都要进行同样的计算处理。最后,对每个元素除以该类别中的总词数 。

3、对文档进行分类

导入另外两篇我们不知道分类的文档,通过已经训练好的朴素贝叶斯算法来对其进行分类,函数classify()是选取分类概率最大的类别。

文档分类结果为:

[‘love’, ‘my’, ‘dalmation’] is classified as:0

[‘stupid’, ‘garbage’] is classified as:1

  • 发表于:
  • 原文链接:http://kuaibao.qq.com/s/20180102G089SB00?refer=cp_1026

同媒体快讯

相关快讯

扫码关注云+社区