引言

朴素贝叶斯(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)

可以推导为贝叶斯公式:

P ( A ∣ B ) = P ( B ∣ A ) P ( A ) P ( B ) P(A|B)= \frac {P(B|A)P(A)}{P(B)} P(AB)=P(B)P(BA)P(A)


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

P ( 类别 ∣ 特征 ) = P ( 特征 ∣ 类别 ) P ( 类别 ) P ( 特征 ) P(类别|特征)= \frac {P(特征|类别)P(类别)}{P(特征)} P(类别特征)=P(特征)P(特征类别)P(类别)

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

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

P ( C ∣ F 1 , . . . , F n ) = P ( F 1 , . . . , F n ∣ C ) P ( C ) P ( F 1 , . . . , F n ) P(C|F1,...,Fn)= \frac {P(F1,...,Fn|C)P(C)}{P(F1,...,Fn)} P(CF1,...,Fn)=P(F1,...,Fn)P(F1,...,FnC)P(C)

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


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

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

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

就要求:

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


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

对于贝叶斯学习的思考

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

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

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

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

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

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

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

学习资料

学习这个知识点, 需要参考一些好的资料,网络上的资料质量参差不齐, 找到了几个比较好的参考文档。
http://c.biancheng.net/ml_alg/bayes-theorem.html
这篇文章,例子讲的不太清晰, 没怎么看懂。

知乎上的参考资料:
https://zhuanlan.zhihu.com/p/37575364

总结

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

11-06 12:38