本文是极客时间“程序员的数学基础课”学习笔记整理
如何判断一个水果属于苹果还是西瓜?
为了对水果进行分类,我们需要提取水果相关的属性,比如形状、大小、纹理等,如下表所示。
水果名称 | 形状 | 外观颜色 | 外观纹理 | 重量 | 握感 | 口感 |
苹果 | 不规则圆 | 红色 | 无 | 200.45 | 较硬 | 酸甜 |
甜橙 | 圆形 | 橙色 | 无 | 150.92 | 较软 | 甜 |
西瓜 | 椭圆形 | 绿色 | 条纹 | 60000.88 | 较硬 | 甜 |
计算机无法理解水果的颜色和形状,我们需要对齐进行转换,转换成计算机能够理解的语言,如下表所示
水果名称 | 形状 不规则圆:1 圆形:2 椭圆:3 | 外观颜色 红色 :1 橙色:2 绿色:3 | 外观纹理 无:1 条纹:2 | 重量 小于200g:1 200克和500克之间:2 大于500克:3 | 握感 较硬:1 较软:2 | 口感 酸甜:1 甜:2 |
苹果 | 1 | 1 | 1 | 2 | 1 | 1 |
甜橙 | 2 | 2 | 1 | 1 | 2 | 2 |
西瓜 | 3 | 3 | 2 | 3 | 1 | 2 |
由表可知,对于连续的重量,我们做了离散化处理。
三个数据做训练样本,量太少,我们扩充到十个数据。
水果名称 | 形状 不规则圆:1 圆形:2 椭圆:3 | 外观颜色 红色 :1 橙色:2 绿色:3 | 外观纹理 无:1 条纹:2 | 重量 小于200g:1 200克和500克之间:2 大于500克:3 | 握感 较硬:1 较软:2 | 口感 酸甜:1 甜:2 |
苹果a | 1 | 1 | 1 | 2 | 1 | 1 |
苹果b | 1 | 1 | 1 | 1 | 1 | 1 |
苹果c | 2 | 3 | 1 | 1 | 2 | 1 |
甜橙a | 2 | 2 | 1 | 1 | 2 | 2 |
甜橙b | 2 | 2 | 1 | 2 | 2 | 2 |
甜橙c | 1 | 2 | 1 | 2 | 1 | 1 |
西瓜a | 3 | 3 | 2 | 3 | 1 | 2 |
西瓜b | 3 | 3 | 2 | 3 | 1 | 1 |
西瓜c | 3 | 3 | 2 | 3 | 1 | 2 |
西瓜d | 1 | 3 | 2 | 3 | 2 | 2 |
朴素贝叶斯的核心思想
我们手上有一个新的水果,他有形状、颜色、纹理、重量等属性,怎么判断它属于哪种类型的水果呢?引入今天的贝叶斯公式。
贝叶斯的核心思想就是利用先验概率和条件概览来预测后验概率,具体到本例的水果分类,我们可以得到如下公式。
其中f表示某一属性的取值,c表示分类。公式左边的P(c|f) 在属性值给定的情况下,预测属于分类c的概率。公式右边是根据训练样本计算。其中p(f|c) 训练样本中,分类为c中出现属性f的概率,P(c) 训练样本中分类c出现的概率,p(f)为 训练样本中 属性f出现的概率。
上文中的公式,是针对单个属性的,真实的水果分类是多属性的,朴素贝叶斯公式有一个假设前提:数据对象的不同属性对其分类的影响是相互独立的。如果数据对象o中同时出现属性fi和fj,则对象o属于分类c的概率
我们可以用这十个数据,建立朴素贝叶斯分类模型了。
苹果分类有三个实例,对于形状而言,出现2次不规则圆、1次圆形和0次椭圆,各自的统计概率为0.67、0.33和0.00,这些概率为条件概率,依次类推,我们可以计算其他属性的条件概率,如下表。
水果名称\特征 | 形状 不规则圆:1 圆形:2 椭圆:3 | 外观颜色 红色 :1 橙色:2 绿色:3 | 外观纹理 无:1 条纹:2 | 重量 小于200g:1 200克和500克之间:2 大于500克:3 | 握感 较硬:1 较软:2 | 口感 酸甜:1 甜:2 |
苹果 | 1: 0.67 2: 0.33 3: 0.00 | 1: 0.67 2: 0.00 3: 0.33 | 1: 1.00 2: 0.00
| 1: 0.67 2: 0.33 3: 0.00 | 1: 0.67 2: 0.33 | 1: 1.00 2: 0.00 |
甜橙 | 1: 0.33 2: 0 .67 3: 0.00 | 1: 0.00 2: 1.00 3: 0.00 | 1: 1.00 2: 0.00
| 1: 0.33 2: 0.67 3: 0.00 | 1: 0.33 2: 0.67 | 1: 0.33 2: 0.67 |
西瓜 | 1: 0.25 2: 0.00 3: 0.75 | 1: 0.00 2: 0.00 3: 1.00 | 1: 0.00 2: 1.00 | 1: 000 2: 0.00 3: 1.00 | 1: 0.75 2: 0.25 | 1: 0.25 2: 0.75 |
总共 | 1: 0.40 2: 0.30 3: 0.30 | 1: 0.20 2: 0.30 3: 0.50 | 1: 0.60 2: 0.40 | 1: 030 2: 0.30 3: 0.40 | 1: 0.60 2: 0.40 | 1: 0.50 2: 0.50 |
对于上表中出现的概率0,在做贝叶斯乘积时可能会导致整个结果为0,为了避免此类情况,我们用一个很小的结果(如0.01)来代表0,这种处理技巧称为平滑处理(Smoothing)
有了上述模型,我们可以用来预测新的水果了。假如我们现在有一个新的水果,它的形状是原形,口感是甜的,根据朴素贝叶斯定理,它属于苹果、甜橙和西瓜的概率的计算公式如下所示。
比较这三个数值,0.00198<0.00798<0.26934,所以可以得出结论,该水果属于甜橙的可能性是最大的。
由上文计算结果可以看出,计算出来的概率都非常小,在物品属性非常多的时候,这个乘积可能小到计算机无法处理的地步,因此在实际应用中,我们一般采用数学变换的方式来处理(比如概率取log转换为绝对值大于1的负数)。
总结一下用朴素贝叶斯进行分类的步骤:
-
准备数据,收集数据,转换为计算机可以理解的形式
-
建立模型,基于样本训练贝叶斯模型
-
分类新数据,对于新分类,计算其属于分类的概率,这个过程称为预测。
朴素贝叶斯VS其他分类算法
-
和KNN相比,朴素贝叶斯需要更多的时间建立模型,但是对新分类进行预测时,效果好,速度快
-
和决策树相比,朴素贝叶斯不能提供一套易于人类理解的规则,但是可以提供决策树无法支持的模糊分类
-
和SVN支持向量机相比,朴素贝叶斯无法直接支持连续值的输入
因此朴素贝叶斯适用于待分类对象的属性值大部分都是离散的(或者很容易转化为离散的)、需要支持模糊分类,并且需要快速可靠的实时分类的场景。