1. 朴素贝叶斯算法

朴素贝叶斯算法是学习数据集的联合概率分布 P(X,Y)P(X,Y)P(X,Y),而这个过程是通过学习先验概率 P(Y=Ck)P(Y=C_k)P(Y=Ck​) 和条件概率分布 P(X=x∣Y=Ck)P(X=x|Y=C_k)P(X=x∣Y=Ck​) 完成的。

1.1 定义一个数据集实例

定义一个数据集 TTT 为 :
T={(x1,y1),(x2,y2),⋯,(xN,yN)}T=\{ (x_1,y_1),(x_2,y_2),\cdots,(x_N,y_N) \} T={(x1​,y1​),(x2​,y2​),⋯,(xN​,yN​)}
其中 xi=(xi(1),xi(2),⋯,xi(n)),xi(j)∈{aj1,aj2,⋯,ajSj}x_i=(x_i^{(1)},x_i^{(2)},\cdots,x_i^{(n)}), x_i^{(j)}\in\{a_{j1},a_{j2},\cdots,a_{jS_j}\}xi​=(xi(1)​,xi(2)​,⋯,xi(n)​),xi(j)​∈{aj1​,aj2​,⋯,ajSj​​}.
xi(j)x_i^{(j)}xi(j)​ 为第 iii 个样本的第 jjj 个 feature,ajSja_{jS_j}ajSj​​ 为第 jjj 个 feature 可能取的第SjS_jSj​个值, j=1,2,⋯,nj=1,2,\cdots,nj=1,2,⋯,n.yi∈{C1,C2,⋯,Ck}y_i \in \{C_1,C_2,\cdots,C_k\}yi​∈{C1​,C2​,⋯,Ck​}

  • 概括描述该数据集
内容描述 数值 典型符号
数据集有N个样本标签 N yNy_NyN​, xNx_NxN​
数据集每一个x样本中对应有n个features n xi(n)x_i^{(n)}xi(n)​
数据集的标签有K类,分别为 C1,C2,⋯,CkC_1,C_2,\cdots,C_kC1​,C2​,⋯,Ck​ k CkC_kCk​
每个特征 xi(j)x_i^{(j)}xi(j)​ 有 SjS_jSj​ 个可能的取值 SjS_jSj​ ajSja_{jS_j}ajSj​​

1.2 朴素贝叶斯算法步骤

  1. 计算先验概率 P(Y=Ck)P\left(Y=C_{k}\right)P(Y=Ck​) : 得到训练集中每一类 CkC_kCk​ 的概率.
    P(Y=Ck)=∑i=1NI(yi=Ck)N,k=1,2,⋯,KP\left(Y=C_{k}\right)=\frac{\sum_{i=1}^{N} I\left(y_{i}=C_{k}\right)}{N}, \quad k=1,2, \cdots, K P(Y=Ck​)=N∑i=1N​I(yi​=Ck​)​,k=1,2,⋯,K
  2. 计算条件概率 P(X(j)=ajl∣Y=ck)P\left(X^{(j)}=a_{j l} \mid Y=c_{k}\right)P(X(j)=ajl​∣Y=ck​)
    P(X(j)=ajl∣Y=Ck)=∑i=1NI(xi(j)=ajl,yi=ck)∑i=1NI(yi=ck),j=1,2,⋯,n;l=1,2,⋯,Sj;k=1,2,⋯,KP\left(X^{(j)}=a_{j l} \mid Y=C_{k}\right)=\frac{\sum_{i=1}^{N} I\left(x_{i}^{(j)}=a_{j l}, y_{i}=c_{k}\right)}{\sum_{i=1}^{N} I\left(y_{i}=c_{k}\right)} \ \ , j=1,2, \cdots, n ; \quad l=1,2, \cdots, S_{j} ; \quad k=1,2, \cdots, KP(X(j)=ajl​∣Y=Ck​)=∑i=1N​I(yi​=ck​)∑i=1N​I(xi(j)​=ajl​,yi​=ck​)​  ,j=1,2,⋯,n;l=1,2,⋯,Sj​;k=1,2,⋯,K
  3. 对于给定的实例 x=(x(1),x(2),⋯,x(n))Tx=(x^{(1)}, x^{(2)}, \cdots, x^{(n)})^Tx=(x(1),x(2),⋯,x(n))T, 利用贝叶斯定理计算其后验概率 P(Y=Ck∣X(j)=x(j))P\left(Y=C_{k} \mid X^{(j)}= x^{(j)}\right)P(Y=Ck​∣X(j)=x(j)):
    P(Y=Ck∣X(j)=x(j))=P(X(j)=x(j)∣Y=Ck)P(Y=Ck)∑kP(X(j)=x(j)∣Y=Ck)P(Y=Ck)=P(Y=Ck)∏jP(X(j)=x(j)∣Y=ck)∑kP(Y=ck)∏jP(X(j)=x(j)∣Y=ck),k=1,2,⋯,K\begin{aligned} P\left(Y=C_{k} \mid X^{(j)} = x^{(j)}\right) &=\frac{P\left(X^{(j)}= x^{(j)} \mid Y=C_{k}\right) P\left(Y=C_{k}\right)}{\sum_{k} P\left(X^{(j)}= x^{(j)} \mid Y=C_{k}\right) P\left(Y=C_{k}\right)} \\ &= \frac{P\left(Y=C_{k}\right) \prod_{j} P\left(X^{(j)}=x^{(j)} \mid Y=c_{k}\right)}{\sum_{k} P\left(Y=c_{k}\right) \prod_{j} P\left(X^{(j)}=x^{(j)} \mid Y=c_{k}\right)}, \quad k=1,2, \cdots, K \end{aligned} P(Y=Ck​∣X(j)=x(j))​=∑k​P(X(j)=x(j)∣Y=Ck​)P(Y=Ck​)P(X(j)=x(j)∣Y=Ck​)P(Y=Ck​)​=∑k​P(Y=ck​)∏j​P(X(j)=x(j)∣Y=ck​)P(Y=Ck​)∏j​P(X(j)=x(j)∣Y=ck​)​,k=1,2,⋯,K​
  • 补充知识贝叶斯定理
    P(Y∣X)=P(X,Y)P(X)=P(Y)P(X∣Y)∑YP(Y)P(X∣Y)P(Y \mid X)=\frac{P(X, Y)}{P(X)}=\frac{P(Y) P(X \mid Y)}{\sum_{Y} P(Y) P(X \mid Y)}P(Y∣X)=P(X)P(X,Y)​=∑Y​P(Y)P(X∣Y)P(Y)P(X∣Y)​
    利用条件概率和先验概率计算 P(Y∣X)P(Y \mid X)P(Y∣X)

由于上述公式的分母对于任意 k,均相等,那么只需要比较分子的大小,即可得到后验概率最大的类别,便可以判断出实例 x=(x(1),x(2),⋯,x(n))Tx=(x^{(1)}, x^{(2)}, \cdots, x^{(n)})^Tx=(x(1),x(2),⋯,x(n))T 对应的分类是什么。

  • 朴素贝叶斯之所以被称为朴素,是因为输入X的强独立性假设

因此,仅需计算分子部分,及计算下面公式,并且比较大小:
P(Y=Ck)∏j=1nP(X(j)=x(j)∣Y=Ck),k=1,2,⋯,KP\left(Y=C_{k}\right) \prod_{j=1}^{n} P\left(X^{(j)}=x^{(j)} \mid Y=C_{k}\right), \quad k=1,2, \cdots, KP(Y=Ck​)j=1∏n​P(X(j)=x(j)∣Y=Ck​),k=1,2,⋯,K
4. 最后我们确定实例 x=(x(1),x(2),⋯,x(n))Tx=(x^{(1)}, x^{(2)}, \cdots, x^{(n)})^Tx=(x(1),x(2),⋯,x(n))T 对应的分类:
y=arg⁡max⁡CkP(Y=Ck)∏j=1nP(X(j)=x(j)∣Y=Ck)y=\arg \max _{C_{k}} P\left(Y=C_{k}\right) \prod_{j=1}^{n} P\left(X^{(j)}=x^{(j)} \mid Y=C_{k}\right)y=argCk​max​P(Y=Ck​)j=1∏n​P(X(j)=x(j)∣Y=Ck​)

2. 贝叶斯估计

在朴素贝叶斯中(极大似然估计),估计的概率可能会出现0的情况,而这会影响后验概率的计算(1.2 朴素贝叶斯算法步骤 - 4) 因此我们需要加上Laplace 平滑使得概率大于0,从而使得连乘不至于=0.

2.1 Laplace smoothing 拉普拉斯平滑

在朴素贝叶斯的基础上,我们在分子分母都加上一个与 λ\lambdaλ 相关的正系数,其中 λ>0\lambda >0λ>0. 当 λ=0\lambda =0λ=0则为极大似然估计。当 λ=1\lambda =1λ=1时,为拉普拉斯平滑。
Pλ(X(j)=ajl∣Y=ck)=∑i=1NI(xi(j)=ajl,yi=Ck)+λ∑i=1NI(yi=Ck)+SjλP_{\lambda}\left(X^{(j)}=a_{j l} \mid Y=c_{k}\right)=\frac{\sum_{i=1}^{N} I\left(x_{i}^{(j)}=a_{j l}, y_{i}=C_{k}\right)+\lambda}{\sum_{i=1}^{N} I\left(y_{i}=C_{k}\right)+S_{j} \lambda}Pλ​(X(j)=ajl​∣Y=ck​)=∑i=1N​I(yi​=Ck​)+Sj​λ∑i=1N​I(xi(j)​=ajl​,yi​=Ck​)+λ​
此时,先验概率变为:
Pλ(Y=Ck)=∑i=1NI(yi=Ck)+λN+KλP_{\lambda}\left(Y=C_{k}\right)=\frac{\sum_{i=1}^{N} I\left(y_{i}=C_{k}\right)+\lambda}{N+K \lambda}Pλ​(Y=Ck​)=N+Kλ∑i=1N​I(yi​=Ck​)+λ​

可以看到,当 λ=1\lambda =1λ=1 时,相当于在N个样本的基础上增加了K个样本,并且这K个样本涵盖了每一个类别。

  • 其实平滑过程相当于对原始数据集进行一个人为添加噪声的过程, λ\lambdaλ 越大,可能精度越低
  • 朴素贝叶斯假设输入变量都是条件独立的,如果他们之间存在概率依存关系,则模型变成了贝叶斯网络

3. 朴素贝叶斯的代码实现 [Python]

利用 sklearn 对 Iris dataset 进行一个测试

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import BernoulliNB​# 加载数据
iris = load_iris()
iris.data.shape  # (150, 4)x = iris.data[:, :-1]
y = iris.target# 对数据集进行切分
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=666)
"""
使用sklearn库实现朴素贝叶斯
"""
Classify = BernoulliNB(alpha=1)
Classify.fit(x_train,y_train)
"""
查看模型的准确率
"""
print("The training accuracy of Naive Bayesian is :",Classify.score(x_train,y_train))
print("The classifying accuracy of Naive Bayesian is :",Classify.score(x_test,y_test))
[Results]:
The training accuracy of Naive Bayesian is : 0.35
The classifying accuracy of Naive Bayesian is : 0.26666666666666666

可见朴素贝叶斯的分类的准确度并不是很高,需要进一步提升,因为Iris 数据集的标签为 0,1,2,3. 则我们想到可以改变 朴素贝叶斯的二值化阈值 (Binarize)来提升性能。

  • Sklearn 中的解释为
    binarizefloat or None, default=0.0
    Threshold for binarizing (mapping to booleans) of sample features. If None, input is presumed to already consist of binary vectors.

通过改变 Binarize 的值,其精确度分布为:
可以看到,当以2.5~3之间的数字作为输入 X 的二值化阈值时,此时分类的精确度最高

除了改变参数,把模型换成 高斯朴素贝叶斯(GaussianNB)和多项式贝叶斯(MultinomialNB)试试

gaussian_clf = GaussianNB()
multinomial_clf = MultinomialNB()gaussian_clf.fit(x_train, y_train)
multinomial_clf.fit(x_train, y_train)print("The training accuracy of Gaussian is :",gaussian_clf.score(x_test,y_test))
print("The training accuracy of Multinomial is :",multinomial_clf.score(x_test,y_test))
[Results]:
The training accuracy of Gaussian is : 0.9666666666666667
The training accuracy of Multinomial is : 0.7666666666666667

可以看到 高斯朴素贝叶斯(GaussianNB)和多项式贝叶斯(MultinomialNB)效果均比 Naive Bayesian 好, 其原因可能为:

  • 高斯朴素贝叶斯(GaussianNB): 适用于处理连续型变量,因此精度可能更高
  • 多项式贝叶斯(MultinomialNB): 适用于处理离散型变量
  • 朴素贝叶斯: 适合处理布尔类型的二进制变量(离散)

朴素贝叶斯算法与贝叶斯估计相关推荐

  1. 朴素贝叶斯算法_机器学习第三篇:详解朴素贝叶斯算法

    一.统计知识 01|随机事件: 1.概念 随机事件是在随机试验中,可能出现也可能不出现,而在大量重复试验中具有某种规律性的事件叫做随机事件(简称事件).随机事件通常用大写英文字母A.B.C等表示.随机 ...

  2. 机器学习第三篇:详解朴素贝叶斯算法

    一.统计知识 01|随机事件: 1.概念 随机事件是在随机试验中,可能出现也可能不出现,而在大量重复试验中具有某种规律性的事件叫做随机事件(简称事件).随机事件通常用大写英文字母A.B.C等表示.随机 ...

  3. 朴素贝叶斯算法原理以及python实现

    朴素贝叶斯 一.朴素贝叶斯概述 二.概率论知识 三.朴素贝叶斯算法原理 四.参数估计方法 五.示例分析 六.拉普拉斯平滑修正 七.算法优缺点 八.python实现 8.1 sklearn贝叶斯 8.2 ...

  4. 机器学习算法: 朴素贝叶斯算法

    朴素贝叶斯算法原理简述 理解朴素贝叶斯算法之前, 先应该理解什么是条件概率. 条件概率是指, 在事件A已经发生的情况下, 事件B发生的概率. 数学符号记作P(A|B). 机器学习就是利用这个原理, 对 ...

  5. 机器学习-朴素贝叶斯算法

    简介 NaïveBayes算法,又叫朴素贝叶斯算法,朴素:特征条件独立:贝叶斯:基于贝叶斯定理.属于监督学习的生成模型,实现简单,没有迭代,并有坚实的数学理论(即贝叶斯定理)作为支撑.在大量样本下会有 ...

  6. 朴素贝叶斯算法的原理:

    朴素贝叶斯算法的原理: 1. 朴素贝叶斯法是典型的生成学习方法. 生成方法由训练数据学习联合概率分布P(X,Y),然后求得后验概率分布P(Y|X).具体来说,利用训练数据学习P(XY)和P(Y)的估计 ...

  7. 机器学习基础 朴素贝叶斯算法

    文章目录 一. 朴素贝叶斯算法简介 二.概率基础复习 1.概率定义 2.案例:判断女神对你的喜欢情况 3.联合概率.条件概率与相互独立 4.贝叶斯公式 4.1 公式介绍 4.2 案例计算 4.3 文章 ...

  8. python贝叶斯算法的论文_朴素贝叶斯算法从入门到Python实践

    1,前言 很久不发文章,整理些干货,希望相互学习吧.进入主题,本文主要时说的为朴素贝叶斯分类算法.与逻辑回归,决策树一样,是较为广泛使用的有监督分类算法,简单且易于理解(号称十大数据挖掘算法中最简单的 ...

  9. 使用Sklearn学习朴素贝叶斯算法

    目录 1,sklearn中的贝叶斯分类器 1.1,高斯朴素贝叶斯GaussianNB 1.1.1,认识高斯朴素贝叶斯 1.1.2,参数说明 1.1.3,高斯朴素贝叶斯建模案例 1.1.4,探索高斯朴素 ...

最新文章

  1. python中yield的认识与学习|生成器
  2. Django缓存和信号
  3. 南京大学《物联网技术导论》课程
  4. UA OPTI544 量子光学7 补充:Density Operator
  5. class反编译_IDEA反编译功能小试牛刀
  6. pfile文件怎么恢复格式_回收站清空的文件怎么恢复?值得收藏的恢复方法
  7. hadoop hdfs (java api)
  8. 中职 计算机原理 计算题,中职《计算机原理》测验2.doc
  9. list -- set方法——替换列表中指定位置的元素
  10. maven-dependency-plugin插件的使用
  11. 断言assert的使用
  12. 最短路径顶点算法:最短路径之迪杰斯特拉(Dijkstra)算法Strut2教程-java教程
  13. 关于锐捷校园网断网的解决办法
  14. 用Gson解析json
  15. 千万级数据表如何索引快速查找
  16. 量子纠缠在量子计算机中的作用,解密量子计算机,量子叠加和量子纠缠是制胜关键...
  17. 【LeetCode】求众数(四种方法)
  18. 2020大疆校招B卷第三题
  19. kafka-topics.sh 详细说明
  20. 【记录】easyexcel导出后打开文件报已损坏

热门文章

  1. 数据结构之SWUSTOJ978: 输出利用先序遍历创建的二叉树的中序遍历序列 and SWUSTOJ979: 输出利用先序遍历创建的二叉树的后序遍历序列
  2. NFS+mount挂载
  3. 运用五视图方法进行软件架构设计--实战一
  4. Java几种常见的设计模式
  5. linux查看硬件资源命令
  6. NXP——图形驱动开发实习生
  7. GBase 8a UDF 函数串并行控制基础知识
  8. Python数据可视化常用函数记录
  9. 如何为VBA的私有过程设置快捷键
  10. Win8更改“应用商店”程序的默认安装路径