看贝叶斯的时候公式比较复杂,先验概率,后验概率还有似然概率,还有边缘概率还是有点不友好,这里主要从一个简单的例子出手,写一下贝叶斯是如何运行的。出于简单,这里的分布函数采用高斯分布。
首先看一下正态分布,它的概率密度可以用如下的函数表示
正态分布函数
对此,我们可以用如下的代码描述
def nor_dis(x,segma,miu): f=(1/np.sqrt(2*math.pi))*np.exp(-((x-miu)**2)/2/segma/segma) return fa = np.arange(-5,5,0.1)e = 0 # 均值segama = 0.5 #方差b = nor_dis(a,segama,e)import matplotlib.pyplot as pltplt.plot(a, b)plt.show()
这里随便做一个图验证一下
均值为0方差为0.5
显然,对于一个样本特征,我们只需要计算出他的均值和方程就可以计算任意给定值的概率分布了,比如我们给一个样本
样本编号 | 特征1 | 特征2 |
---|---|---|
1 | 5 | 3 |
2 | 2 | 2 |
3 | 1 | 1 |
4 | 0 | 8 |
5 | 6 | 5 |
我们对其中的特征1进行分析,首先计算方差(5.36)和均值(2.8),把这两个值带入可以得到正态分布函数,然后可以计算这个分布函数下任何一个比如特征里面的4对应的概率为(0.389068525000229),这个条件下的分布概率如下,可见4并没有出现在特征1中,但是也计算除了4的概率,同样的可以用这种方法对特征2进行处理。这里计算出的概率就对应着贝叶斯中的似然概率。
方差(5.36)和均值(2.8)的分布
贝叶斯公式如下
贝叶斯公式
同样的这里我们假设一个样本如下表所示。
样本编号 | 特征A | 特征B | 标签 |
---|---|---|---|
1 | 1 | 2 | 黄金 |
2 | 0 | 4 | 白银 |
3 | 2 | 3 | 黄金 |
4 | 1.5 | 4 | 黄金 |
5 | 0.5 | 4 | 白银 |
除了上面的样本之外,我们还有一个样本2 ,5,现在就想知道这个样本是黄金还是白银,怎么操作呢?
首先分别计算特征A和特征B的均值和方程,可以发现特征1的均值为1,方差为0.5;特征2的均值为3.4,方差为0.64。同时,我们发现黄金的概率为60%,白银的概率为40%这个概率叫先验概率。
现在计算样本的概率,即把2带入特征A的分布函数中得到概率0.05399096651318806,把5带入特征B的分布函数中可以知道概率为0.01752830049356853。因此这里实际上计算出来了P(黄金)、P(白银)、P(A)、P(B),我们把公式再写到下面
将计算的列在下面
P(黄金| A,B) | P(A|黄金) | P(B|黄金) | P(黄金) | P(A) | P(B) |
0.6 | 0.05399096651318806 | 0.01752830049356853 | |||
P(白银| A,B) | P(A|白银) | P(B|黄金) | P(白银) | P(A) | P(B) |
0.4 | 0.05399096651318806 | 0.01752830049356853 |
现在还缺少表格中的前面两个,因此回到第一张表,计算选取黄金的样本下的均值与方程,即计算下面两个表的均值和方差
表3、只存在黄金情况下的样本
样本编号 | 特征A | 特征B | 标签 |
---|---|---|---|
1 | 1 | 2 | 黄金 |
3 | 2 | 3 | 黄金 |
4 | 1.5 | 4 | 黄金 |
表4、只考虑白银存在情况下的样本
样本编号 | 特征A | 特征B | 标签 |
---|---|---|---|
2 | 0 | 4 | 白银 |
5 | 0.5 | 4 | 白银 |
当然这里的样本量有点少,同样的把方差和均值带入分布函数里面,可以计算出黄金和白银两种情况下各自的概率密度分布函数,带入样本值(2,5)计算对应的概率P(A|黄金)、P(A|白银)、P(B|黄金)、P(A|黄金)
最后,将计算的值带入公式就可以计算出这个值(2,5)下是黄金还是是白银的概率,那个大就是哪个。