机器学习实战(4)——朴素贝叶斯(下)

一、大概框架
1、贝叶斯决策:
对某个数据点进行分类,有多个类别供你选择,我们自然要选择可能性最大那个,这就是贝叶斯决策的核心思想

举个例子:如果你面前有一个黑人,让你判断他是哪个洲的人,给你三个选择:亚洲人、非洲人、美洲人,你会选择哪个?哈哈哈,这么简单的问题,你居然还问的出口,当然是非洲人了,对,只要是个正常人就会选择非洲人,为什么呢?难道说亚洲人和美洲人中就没有黑人了吗?当然是有的,但是概率相当小。
我们在回答这个问题的时候,就运用了贝叶斯决策理论的思想,多个选择,选择可能性最大的那个!

2、核心公式(贝叶斯定理)
机器学习实战(4)——朴素贝叶斯(下)_第1张图片
其中x为数据点,根据x判断,它属于的类别C,我们直接求P(c | x)是比较困难的,所以根据贝叶斯定理,也就是上面的公式,我们只需要求公式右边的各个元素即可,这就完成了数学问题的转化,而如何求公式右边的元素,就是贝叶斯分类器的大致过程了。

注意: 这里的P(C | X)中,C并不是指一个,而是多个,是指你要分类的标签,以上面那个黑人的例子来说,我们要求的P(C | X)就是
  • P(他是亚洲人 | 他是黑人),P(他是非洲人 | 他是黑人),P(他是美洲人 | 他是黑人)这三个概率
然后求出这个三个概率来以后,选择概率最大的那一个
另外,我们求得是大小比较问题,而不是具体求值问题,也就说我们只关心上面三个概率的哪个最大,而不关心他们最大是多少,每个概率是多少,所以很多编程的时候,我们需要求的只是两个值
  • P(C)和P(X | C)
为什么不求P(X)呢?原因很简单,三个概率都以P(X)为分母,而且这个分母值都一样,与类标记无关,只和数据集有关,所以我们只需要比较分子即可,也就是只需要求分子两个值就可以了,这里说一下这两个值的大概含义:
  • P(C)被称为先验概率(有时候也称为类先验概率,因为C是类别标签嘛),表达了样本空间中各类样本所占比例,根据大数定理,当训练集中包含充足的独立同分布样本时(一般这个假设是成立的),P(C)可通过各类样本出现的频率来进行估计(几乎所有的贝叶斯算法中,这个值都是通过频率来计算的)
  • P(X | C)被称为类条件概率(因为是以类标签为前提条件),这个是最难求的,也是贝叶斯分类算法分叉的交叉点!

3、贝叶斯分类器
之前介绍说贝叶斯分类器是一类算法的总称,所有以贝叶斯定理为核心的分类算法,都成为贝叶斯分类器,上一章,其实主要介绍了了两种贝叶斯分类器的框架(主要根据求类条件概率的方法不同而区分):
  • 基于估计的贝叶斯分类:根据有限数据集,估计类条件概率P(X | C)(主要策略是假设数据集满足某种概率分布,然后基于训练集对概率分布的参数进行估计,代表策略为极大似然估计),然后再根据频数算出类先验概率P(C),最后相乘,取最大的概率分类标签
  • 朴素贝叶斯分类:也是估计类条件概率,但是有一个前提假设:所有属性特征是相互独立的,基于这个假设,我们就不必进行对概率分布的参数估计了,可以直接通过简单的计算就能得到类条件概率P(X | C)(并不是真正的准确值,也是一种估计值,准确度要看你的数据集了),然后也是根据频数算出类先验概率P(C),最后相乘,取最大的概率分类标签

注意:贝叶斯分类器是一个大家族,上面介绍的两种分类方式是两个大的框架,两者都可以具体细分下去,就以基于估计的贝叶斯分类为例,它就可以根据类条件概率估计的方法来划分,要知道概率参数估计是有很多方法,每一种方法理论上都对应一种贝叶斯分类方法,只不过其准确率不同罢了,除了上面两种大的框架还有其他的框架,比如半朴素贝叶斯分类方法。
我说这个的目的是告诉大家,《机器学习实战》这本书是以实战为主,算法太多了,它不可能一一顾及的过来,所以讲的大都是各个算法领域最简单的算法,你即便学完了这本书,并不代表你机器学习多么厉害,很多理论知识还是要掌握的,当你看一些机器学习理论书籍的时候,你就会发现《机器学习实战》这本书更注重代码的编写,告诉你怎么做正确,不正确应该怎么办,但是没有告诉你为什么不正确,为什么要这么做,而且大框架上介绍的也不够全面,我建议大家看这本书的同时,也能够看一些理论书籍,比如西瓜书和统计学习方法,一边实践,一边学习理论,相互印证,这样才是最好的学习方法,当然,即便是西瓜书和统计学习方法在介绍单个领域上有时候也是比较笼统的,虽然可以应付大多数场景,但是如果你要深入研究某个领域,这个时候,单单看书就不行了,要看论文,如果英语不够扎实,可以先看中文论文,英语够扎实,可以看英文论文(推荐)

4、朴素贝叶斯的改进——拉普拉斯平滑
上一章中,对于拉普拉斯一带而过,讲的比较少,这里详细解释一下,因为如果只是单纯看代码的话,很容易出错,尤其是分子分母初始化的时候,上一章单纯将分母初始化为2,但是这个2并不是一成不变的,而是要根据你的数据集来不断变幻,否则会将你的准确拉低(当然如果你的数据集非常庞大的话,那么这个1倒是可以忽略不计了),这里直接粘贴西瓜书上的原话:
机器学习实战(4)——朴素贝叶斯(下)_第2张图片
当然,在实际编码的时候,公式7.19你可以不必理会(因为是分母,上面已经提过了),只需要理解公式7.20即可,其中Ni的含义是指第i个属性可能的取值数,比如西瓜书中,根据颜色(青绿,乌黑,浅白),根蒂(,,,),纹理(,,,)来判断一个瓜是不是好瓜:
机器学习实战(4)——朴素贝叶斯(下)_第3张图片
第一个类先验概率中,求得是类别,其中类别一共有两个(好与坏),所以分母初始化为2(红线部分),而判断色泽的时候,因为色泽有3个属性值,所以分母初始化为3(蓝线部分)

注意:拉普拉斯修正本质上是假设了属性值与类别均与分布,这就相当于在朴素贝叶斯学习过程中额外引入的关于数据的先验(以西瓜为例)——也就是,它假设每个属性值都有一个西瓜(分子初始化为1,不就相当于每个属性值都有一个嘛,分母则是所有属性值的和),这个假设引起的误差会随着训练集逐渐变大,而逐渐变得可忽略不计,使得估值逐渐趋向于实际概率值。

5、朴素贝叶斯分类的实际应用
在现实任务中,朴素贝叶斯分类器有很多使用方式,例如:
  • 如果任务对预测速度要求比较高,则对给定数据集,可将朴素贝叶斯分类器涉及的所有概率估值事先计算好存储起来,这样在进行预测时,只需要“查表”即可进行判别(这样虽然速度快,但是要对那些存储概率值不断及时更新)
  • 如果任务数据更替频繁,则可采用“懒惰学习”(lazy learning)方式,先不进行任何训练,待收到预测请求时,再根据当前数据集进行概率估值
  • 如果数据不断增加,则可在现有估值基础上,仅对新增样本大的属性值所涉及的概率进行估值计数修正即可实现增量学习














你可能感兴趣的:(机器学习实战)