公号:码农充电站pro
主页:https://codeshellme.github.iohtml
贝叶斯原理是英国数学家托马斯·贝叶斯于18 世纪提出的,当咱们不能直接计算一件事情(A)发生的可能性大小的时候,能够间接的计算与这件事情有关的事情(X,Y,Z)发生的可能性大小,从而间接判断事情(A)发生的可能性大小。python
在介绍贝叶斯原理以前,先介绍几个与几率相关的概念。git
几率用于描述一件事情发生的可能性大小,用数学符号P(x)
表示,x
表示随机变量,P(x)
表示x
的几率。github
随机变量根据变量取值是否连续,可分为离散型随机变量和连续型随机变量。算法
联合几率由多个随机变量共同决定,用P(x, y)
表示,含义为“事件x
与事件y
同时发生的几率”。shell
条件几率也是由多个随机变量共同决定,用P(x|y)
表示,含义为“在事件y
发生的前提下,事件x
发生的几率。”code
边缘几率:从 P(x, y)
推导出 P(x)
,从而忽略 y
变量。htm
P(x, y)
在 y
上求和, 可获得P(x)
,这里的P(x)
就是边缘几率。P(x, y)
在 y
上求积分, 可获得P(x)
,这里的P(x)
就是边缘几率。几率分布:将随机变量全部可能出现的值,及其对应的几率都展示出来,就能获得这个变量的几率分布,几率分布分为两种,分别是离散型和连续型。blog
常见的离散型数据分布模型有:事件
常见的连续型数据分布模型有:
正态分布的数学公式为:
正态分布的分布图为:
正态分布还可分为:
数学指望,若是把“每次随机结果的出现几率”看作权重,那么指望就是全部结果的加权平均值。
方差表示的是随机变量的取值与其数学指望的偏离程度,方差越小意味着偏离程度越小,方差越大意味着偏离程度越大。
几率论研究的就是这些几率之间的转化关系。
贝叶斯公式以下:
含义:
P(Bi)
为先验几率,P(A|Bi)
为条件几率。P(Bi|A)
为后验几率,由先验几率,条件几率,边缘几率计算得出。贝叶斯定理可用于分类问题,将其用在分类问题中时,可将上面的公式简化为:
其中:
这就意味着,当咱们知道一些属性特征值时,根据这个公式,就能够计算出所属分类的几率,最终所属哪一个分类的几率最大,就划分为哪一个分类,这就完成了一个分类问题。
贝叶斯推导
来看下贝叶斯公式是如何推导出来的。
以下图两个椭圆,左边为C,右边为F。
如今让两个椭圆产生交集:
根据上图可知:在事件F 发生的条件下,事件C 发生的几率就是P(C ∩ F) / P(F)
,即:
P(C | F) = P(C ∩ F) / P(F)
可获得:
P(C ∩ F) = P(C | F) * P(F)
同理可得:
P(C ∩ F) = P(F | C) * P(C)
因此:
P(C ∩ F) = P(C | F) * P(F) = P(F | C) * P(C)
P(C | F) = P(F | C) * P(C) / P(F)
假设咱们如今有一个数据集,要使用贝叶斯定理,进行分类。特征有两个:f1,f2。如今要对数据F
进行分类,那咱们须要求解:
P(c|F)
:表示数据F
属于分类c
的几率。由于特征有 f1
与 f2
,那么:
P(c|F) = P(c|(f1,f2))
对于分类问题,特征每每不止一个。若是特征之间相互影响,也就是f1
与f2
之间相互影响,那么P(c|(f1,f2))
就不容易求解。
朴素贝叶斯在贝叶斯的基础上作了一个简单粗暴的假设,它假设多个特征之间互不影响,相互独立。
朴素的意思就是纯朴,简单。
用数学公式表示就是:
P(A, B) = P(A) * P(B)
实际上就是大学几率论中所讲的事件独立性,即事件A 与事件B 的发生互不干扰,相互独立。
那么,根据朴素贝叶斯,P(c|F)
的求解过程以下:
假设咱们如今要分类的数据有两类:c1 和 c2
。
那么对于数据F
的分类问题,咱们就须要求解两个几率:P(c1|F) 和P(c2|F)
:
P(c1|F) > P(c2|F)
,那么F
属于c1
类。P(c1|F) < P(c2|F)
,那么F
属于c2
类。根据贝叶斯原理,咱们能够获得:
对于分类问题,咱们的最终目的是分类,而不是真正的求解出P(c1|F)
和 P(c2|F)
的确切数值。
根据上面的公式,咱们能够看到,等号右边的分母部分都是P(F)
:
因此咱们只须要求出P(F|c1) × P(c1)
和 P(F|c2) × P(c2)
,就能够知道P(c1|F)
和 P(c2|F)
哪一个大了。
因此对于P(c|F)
能够进一步简化:
用朴素贝叶斯原理,处理一个分类问题,通常要通过如下几个步骤:
P(Ci)
。P(Fj|Ci)
。Ci
表明全部的类别。Fj
表明全部的特征。P(Fj|Ci) * P(Ci)
。接下来咱们来处理一个实际的分类问题,咱们处理的是离散型数据。
咱们的数据集以下:
该数据集的特征集有身高
,体重
和鞋码
,目标集为性别
。
咱们的目的是训练一个模型,该模型能够根据身高,体重和鞋码来预测所属的性别。
咱们给定一个特征:
F1
表示。F2
表示。F3
表示。要求这个特征是男
仍是女
?(用C1
表示男
,C2
表示女
)也就是要求P(C1|F)
大,仍是P(C2|F)
大?
# 根据朴素贝叶斯推导 P(C1|F) => P(C1|(F1,F2,F3)) => P(C1|F1) * P(C1|F2) * P(C1|F3) => [P(F1|C1) * P(C1)] * [P(F2|C1) * P(C1)] * [P(F3|C1) * P(C1)] P(C2|F) => P(C2|(F1,F2,F3)) => P(C2|F1) * P(C2|F2) * P(C2|F3) => [P(F1|C2) * P(C2)] * [P(F2|C2) * P(C2)] * [P(F3|C2) * P(C2)]
P(Ci)
目标集共有两类:男和女,男出现4 次,女出现4 次,因此:
P(C1) = 4 / 8 = 0.5
P(C2) = 4 / 8 = 0.5
P(Fj|Ci)
经过观察表格中的数据,咱们能够知道:
# 性别为男的状况下,身高=高 的几率 P(F1|C1) = 2 / 4 = 0.5 # 性别为男的状况下,体重=中 的几率 P(F2|C1) = 2 / 4 = 0.5 # 性别为男的状况下,鞋码=中 的几率 P(F3|C1) = 1 / 4 = 0.25 # 性别为女的状况下,身高=高 的几率 P(F1|C2) = 0 / 4 = 0 # 性别为女的状况下,体重=中 的几率 P(F2|C2) = 2 / 4 = 0.5 # 性别为女的状况下,鞋码=中 的几率 P(F3|C2) = 2 / 4 = 0.5
P(Fj|Ci) * P(Ci)
上面咱们已经推导过P(C1|F)
和 P(C2|F)
,下面能够求值了:
P(C1|F) => [P(F1|C1) * P(C1)] * [P(F2|C1) * P(C1)] * [P(F3|C1) * P(C1)] => [0.5 * 0.5] * [0.5 * 0.5] * [0.25 * 0.5] => 0.25 * 0.25 * 0.125 => 0.0078125 P(C2|F) => [P(F1|C2) * P(C2)] * [P(F2|C2) * P(C2)] * [P(F3|C2) * P(C2)] => [0 * 0.25] * [0.5 * 0.5] * [0.5 * 0.5] => 0
最终能够看到 P(C1|F) > P(C2|F)
,因此该特征属于C1
,即男性。
能够看到,对于一个分类问题:给定一个数据F,求解它属于哪一个分类? 实际上就是要求解F
属于各个分类的几率大小,即P(C|F)
。
根据朴素贝叶斯原理,P(C|F)
与 P(F|C) * P(C)
正相关,因此最终要求解的就是P(F|C) * P(C)
。这就将一个分类问题转化成了一个几率问题。
下篇文章会介绍如何使用朴素贝叶斯处理实际问题。
(本节完。)
推荐阅读:
欢迎关注做者公众号,获取更多技术干货。