当前位置: 首页>编程语言>正文

Python贝叶斯概率密度矩形 贝叶斯概率模型


文章目录

  • 引言
  • 贝叶斯定理
  • 名词解释
  • 贝叶斯公式
  • 对于贝叶斯学习的思考
  • 对于贝叶斯公式中的分母思考
  • 贝叶斯公式计算复杂度分析:
  • 贝叶斯算法在安全方面的应用
  • 学习资料
  • 总结


引言

朴素贝叶斯(Naive Bayesian algorithm)学习是机器学习中的一个重要的部分。本文主要对贝叶斯的公式推导做了一个详细的探究,了解朴素贝叶斯算法的原理, 并对算法的计算复杂度做了一个简单的分析。

初学者对于这个模型可能有一堆疑问,包括但不限于:

* 如何理解贝叶斯概率模型。
* 这个是如何训练的,计算量大小和哪些因素有关。 
* 有哪些好的关于贝叶斯模型的实战案例。 
* 由于从事安全方向,思考一下如何将贝叶斯模型应用于安全模型的检测。

贝叶斯定理

名词解释

  • 什么是似然度:

通过“类别”推算出“类别特征”发生的的概率的方法叫作“似然度”。这里的似然就是“可能性”的意思。

O为观察结果,θ为描述随机过程的参数集(即表示导致观察结果O的特征集合)。
当θ已知,O未知时,P(O|θ)可称为概率函数(Probability Function);
而当θ未知,O已知时,P(O|θ)可称为似然函数(Likelihood Function)或似然度。

贝叶斯定理就是求解后验概率的过程,而核心方法是通过似然度预测后验概率,通过不断提高似然度,自然也就达到了提高后验概率的目的。

对应举例:

  1. 已知黑白球的个数,预测随机抽取一个球的颜色。
  2. 已知每次抽取球的颜色, 预测黑白球的比例(这个是似然度)

  • 先验概率:事情即将发生的预判断
  • 后验概率: 根据已经发生的事情, 再做出一个判断

贝叶斯公式

条件概率公式是这样:

P(AB)=P(A)P(B|A)=P(B)P(A|B)

可以推导为贝叶斯公式:

Python贝叶斯概率密度矩形 贝叶斯概率模型,Python贝叶斯概率密度矩形 贝叶斯概率模型_概率论,第1张


和机器学习的模型对应起来可以等同于下列公式,便于理解:

Python贝叶斯概率密度矩形 贝叶斯概率模型,Python贝叶斯概率密度矩形 贝叶斯概率模型_贝叶斯公式_02,第2张

  • P(类别|特征)是条件概率的符号,表示在特征集合为已知的条件下,预测类别,这个计算结果也被称为“后验概率”。
这个是贝叶斯公式的输出值, 对应机器学习中的场景是: 如果我们知道了西瓜的各个特征,判断这个瓜是否熟了。
  • P(特征|类别), 表示打标签的数据集合中, 已知数据的类别,看看每个特征所占的概率。
  • P(类别) 每个类别所占的概率
  • P(特征) 这个是分母, 可以看作一个常数, 做大小比较的时候可以忽略不计。

特征是有多个的, 可以用F1,…,Fn表示, 公式对应转化为:

Python贝叶斯概率密度矩形 贝叶斯概率模型,Python贝叶斯概率密度矩形 贝叶斯概率模型_后验概率_03,第3张

如果上述的公式可以计算,那么我们每个类别的概率都计算出来,选一个概率最大的类别就是预测的结果啦。其中P(F1,…,Fn)就看作常数不计算了。


那么计算过程就可以演变为下面这样:
我想求已知特征情况下的类别概率结果:

Python贝叶斯概率密度矩形 贝叶斯概率模型,Python贝叶斯概率密度矩形 贝叶斯概率模型_贝叶斯公式_04,第4张

就要求(可以忽略分母):

Python贝叶斯概率密度矩形 贝叶斯概率模型,Python贝叶斯概率密度矩形 贝叶斯概率模型_贝叶斯公式_05,第5张

其中:(根据条件概率公式可得)

P(F1,…,Fn|C)
= P((F1|C),(F2,…,Fn|C))
= P(F1|C) * P(F2,…,Fn|C,F1)
= P(F1|C) * P(F2|C,F1) * P(F3| C,F1,F2)…(Fn|C,F1,F2,…,Fn-1)

就要求:

Python贝叶斯概率密度矩形 贝叶斯概率模型,Python贝叶斯概率密度矩形 贝叶斯概率模型_人工智能_06,第6张

上面这个公式计算起来还是比较复杂的, 但是,“朴素”的条件独立假设开始发挥作用了,由于朴素贝叶斯假定所有特征相互独立, 公式就可以简化为

Python贝叶斯概率密度矩形 贝叶斯概率模型,Python贝叶斯概率密度矩形 贝叶斯概率模型_人工智能_07,第7张


由此,分类器就得出来了:
通过朴素贝叶斯算法,计算每个类别的概率, 取最大的概率对应的类别,即为结果。

对于贝叶斯学习的思考

对于贝叶斯公式中的分母思考

对于分母P(B)的理解:
上面已经提到, 在多分类情况下, 分母都是一样的, 可以看作一个固定值, 因此每个分类的概率的比较可以不考虑分母。
但是, 如果想让所有分类的概率相加起来都等于1的话,可以计算分母的值,如果计算呢?
也研究搜索了一下:
分母的值是一个和,可以表示如下,其中Ci表示类别, 所有类别都计算一次求和。

Python贝叶斯概率密度矩形 贝叶斯概率模型,Python贝叶斯概率密度矩形 贝叶斯概率模型_概率论_08,第8张

贝叶斯公式计算复杂度分析:

每次计算都需要全量遍历一下数据集合的所有元素, 计算量与数据量成正比。一些数据可以提前计算好, 等预测的时候,可以直接拿过来用,比如某个类别的某个特征的比例。
个人理解离散情况下大概的时间复杂度是:
类别个数 * 特征个数 * 每个特征的情况个数

贝叶斯算法在安全方面的应用

这个算法在安全的应用有,后续会整理案例。

  • 异常检测
  • webshell检测
  • ddos 检测


总结

这篇文章主要对贝叶斯的公式推导做了一个详细的探究,了解朴素贝叶斯算法的原理, 并对算法的计算复杂度做了一个简单的分析。



https://www.xamrdz.com/lan/5rm1963801.html

相关文章: