机器学习中的朴素贝叶斯

朴素贝叶斯

1、概述+推导

先验概率:基于统计的概率,是基于以往历史经验和分析得到的结果,不需要依赖当前发生的条件。

后验概率:从条件概率而来,由因推果,基于当下发生的事件计算之后的概率,依赖于当前发生的条件。

条件概率:记事件A发生的概率为P(A),事件B发生的概率为P(B),则B事件发生的前提下,A事件发生的概率为P(A|B)。
P ( A ∣ B ) = P ( A B ) P ( B ) P(A|B)=\frac{P(AB)}{P(B)} P(AB)=P(B)P(AB)
贝叶斯公式就是基于条件概率通过P(B|A)来求解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)
而朴素贝叶斯就是假设事件(特征)之间没有联系,给定训练数据集,其中每个样本x都包括n维特征,也就是x={x1,x2,x3,…,xn},有k种类别即y={y1,y2,y3,…,yk},对于给定的样本,判断属于什么标记的类别,根据贝叶斯定理可以获得P(yk|x)
P ( y k ∣ x ) = P ( x ∣ y k ) × P ( y k ) ∑ k P ( x ∣ y k ) × P ( y k ) P(y_k|x)=\frac{P(x|y_k)×P(y_k)}{\sum_kP(x|y_k)×P(y_k)} P(ykx)=kP(xyk)×P(yk)P(xyk)×P(yk)
而朴素贝叶斯对条件概率分布做出了独立性的假设,所以每个特征相互独立,此时条件概率可以转化为:
P ( x ∣ y k ) = P ( x 1 , x 2 , . . . , x n ∣ y k ) = ∏ i = 1 n P ( x i ∣ y k ) P(x|y_k)=P(x_1,x_2,...,x_n|y_k)=\prod_{i=1}^{n}P(x_i|y_k) P(xyk)=P(x1,x2,...,xnyk)=i=1nP(xiyk)
将此式带入到上述的贝叶斯公式中得出:
P ( y k ∣ x ) = P ( y k ) × ∏ i = 1 n P ( x i ∣ y k ) ∑ k P ( y k ) × ∏ i = 1 n P ( x i ∣ y k ) P(y_k|x)=\frac{P(y_k)×\prod_{i=1}^{n}P(x_i|y_k)}{\sum_kP(y_k)×\prod_{i=1}^{n}P(x_i|y_k)} P(ykx)=kP(yk)×i=1nP(xiyk)P(yk)×i=1nP(xiyk)
适用范围:

  • 特征之间是条件独立的情况下,否则分类效果不好,朴素就是指条件独立
  • 主要被使用在文档分类中

常见模型:

  • 高斯模型:处理特征是连续型变量的情况
  • 多项式模型:最常见,要求特征是离散数据
  • 伯努利模型:要求特征是离散的,且为布尔类型,即true和false,或者1和0

2、拉普拉斯平滑

主要是为了解决零概率的情况,所以在分子和分母分别加上一个数值,每个分量x的计数加一造成的概率变化几乎可以忽略不记,却可以有效的避免零概率事件。
P ( A ∣ B ) = N i + α N + α m α :拉普拉斯平滑系数,一般指定为 1 N i : A 中符合条件 B 的样本数量 N :符合条件 C 的所有样本数量 m :所有独立样本的总数 P(A|B)=\frac{N_i+α}{N+αm}\\ α:拉普拉斯平滑系数,一般指定为1\\ N_i:A中符合条件B的样本数量\\ N:符合条件C的所有样本数量\\ m:所有独立样本的总数 P(AB)=N+αmNi+αα:拉普拉斯平滑系数,一般指定为1NiA中符合条件B的样本数量N:符合条件C的所有样本数量m:所有独立样本的总数

3、相关api

导包:

from sklearn.naive_bayes import MultinomialNB

调用:

MultinomialNB(alpha = 1.0)

alpha:拉普拉斯平滑系数

4、优缺点

优点:

  • 朴素贝叶斯模型有稳定的分类效率。
  • 对小规模的数据表现很好,能处理多分类任务,适合增量式训练,尤其是数据量超出内存时,可以一批批的去增量训练。
  • 对缺失数据不太敏感,算法也比较简单,常用于文本分类。

缺点:

  • 需要知道先验概率,且先验概率很多时候取决于假设,假设的模型可以有很多种,因此在某些时候会由于假设的先验模型的原因导致预测效果不佳。
  • 对输入数据的表达形式很敏感(离散、连续,值极大极小之类的)。
上一篇:如何在浏览器中打开预览pdf,而不是下载


下一篇:Android音视频 MediaCodec框架-创建流程(3)