贝叶斯分类器是以贝叶斯原理为基础的分类器的总称,是一种生成式模型,朴素贝叶斯分类器是其中最简单的一种。要高明白贝叶斯分类器的原理,首先得明白一些基本概念。

预备知识

  • 基本概念

先验概率:根据统计/经验得到的某事情发生的概率,比如北京下雨的概率可以通过以往的经验或者统计结果得到

后验概率:在一定条件下某事情发生的概率,比如北京天空出现乌云(因)会下雨(果)的概率

条件概率:事情发生时某条件出现的概率,比如北京下雨(果)会出现乌云(因)的概率

  • 贝叶斯公式

设A表示事件,B表示A发生的影响因素,那么有:

为先验概率,即事件A的发生不用考虑影响因素B

为后验概率,表示在因素B的条件下A发生的概率

为条件概率,表示事件A发生的条件下因素B发生的概率

为归一化因子,这里B是已知的,相当于一个常量,不影响其他概率

总结:后验概率=先验概率*条件概率

朴素贝叶斯分类器

朴素贝叶斯分类器就是利用贝叶斯原理实现的,在分类问题中,类别C相当于事件A,特征X相当于影响因素B,那么贝叶斯公式可以改写为如下形式,它表示的含义是当特征为X时,X属于类别C的概率

  • 贝叶斯分类器

设类别C={},特征向量X={},贝叶斯分类器的工作原理如下:

1)求解在X条件下每个类别的概率即求得

2)中概率最大的项对应的类别即为X的预测类别

贝叶斯分类器的工作原理:寻找中的最大值,最大值对应的类别即为预测类别。然而在实际情况中往往无法直接求得,所以根据贝叶斯公式将求解转化为求解。P(X)与类别无关且为固定值,不会影响中的最大值的求解,因此将式子简化为如下形式

总结:贝叶斯分类器就是最大后验概率估计

  • 朴素贝叶斯分类器

何为朴素?朴素代表着特征向量X={}中每一个特征相互独立。那么朴素贝叶斯分类器可以表达为:

当每一个特征相互独立时,上面的式子可以变形为如下形式:

  • 的求解

是无法直接计算的,只能通过样本来估计,因此样本量不能太少。 先验概率表示类别为的样本数量在整个样本集中所占比例(当做概率的估计)

为离散型时:

表示在类别为的样本中,第j个特征出现次数占总的类别为的样本的比例(当做概率的估计)。这里你可能会问,每个类别为的样本中必然会存在第j个特征啊?由于特征有多个取值,所以实际表示的是特征取值为时的概率,在统计时需要将特征每一个取值时的概率都计算出来,当预测一个新样本时,如果特征取值为,则特征取值为的概率参与计算,其他取值的概率则不参与计算。

为连续型时:

假设服从某一个概率分布模型,由样本去求解模型参数(可以通过极大似然估计求解)

  • Laplace校准

在统计样本时,如果出现,会导致为0,这显然是不合理的,为了避免这种情况的发生,采用Laplace校准:将第j个特征出现次数+1以避免出现同理,所以也采用Laplace校准。

朴素贝叶斯分类器Python实现

def NaiveBayes(traindata, trainlabel):'''通过训练集计算先验概率分布p(c)和条件概率分布p(x|c):param traindata: 训练数据集   (m,n):param trainLabel: 训练标记集  (m,1):return: p(c)和p(x|c)'''classes = 10  # 类别数features = 784  # 样本的维度sampleNum = trainlabel.shape[0]# 计算p(c)Pc = np.zeros((classes, 1))for c in range(classes):c_i = (trainlabel == c)  # 统计标签中类别为c的样本数量c_i_num = np.sum(c_i)Pc[c] = (c_i_num+1)/sampleNum  # Laplace校准Pc = np.log(Pc)# 计算p(x|c)y_num = 2  # 每个特征可能的取值的个数c_f_y_count = np.zeros((classes, features, y_num))  # 统计每个类别每个特征的每种可能取值出现的次数for k in range(sampleNum):c = trainlabel[k]data = traindata[k]for f in range(features):y = data[f]c_f_y_count[c][f][y] += 1Px_c = np.zeros((classes, features, y_num))   # 统计每个类别每个特征的每种可能取值的概率for c in range(classes):for f in range(features):c_f_y_num = np.sum(c_f_y_count[c][f])for y in range(y_num):Px_c[c][f][y] = np.log((c_f_y_count[c][f][y]+1)/c_f_y_num)  # Laplace校准return Pc, Px_cdef predict(Pc, Px_c, x):'''根据先验概率分布p(c)和条件概率分布p(x|c)对新样本进行预测'''classes = 10features = 784Pc_x = [0]*classes  # 记录每个类别的后验概率for c in range(classes):Px_c_sum = 0for f in range(features):Px_c_sum += Px_c[c][f][x[f]]  # 对概率值取log 连乘变成了求和运算Pc_x[c] = Px_c_sum + Pc[c]pre_c = Pc_x.index(max(Pc_x))  # 找到每个类别的后验概率中的最大值对应的类别return pre_cdef test(Pc, Px_c, testdata, testlabel):sampleNum = testlabel.shape[0]count = 0.0for i in range(sampleNum):data = testdata[i]label = testlabel[i]pre_label = predict(Pc, Px_c, data)if(pre_label == label):count += 1acc = count / sampleNumreturn accif __name__ == '__main__':#加载训练集和验证集traindata, trainlabel = loadData('../Mnist/mnist_train.csv')evaldata, evallabel = loadData('../Mnist/mnist_test.csv')Pc, Px_c = NaiveBayes(traindata, trainlabel)accuracy = test(Pc, Px_c, evaldata, evallabel)print('accuracy rate is:', accuracy)

朴素贝叶斯分类器原理解析与python实现相关推荐

  1. 朴素贝叶斯分类器原理介绍及python代码实现

    目录 频率学派和贝叶斯学派 朴素贝叶斯分类器 python实现朴素贝叶斯分类器 频率学派和贝叶斯学派 说起概率统计,不得不提到频率学派和贝叶斯学派,通过对概率的不同理解而演变的两个不同的概率学派. 频 ...

  2. 朴素贝叶斯分类器 详细解析

    1 贝叶斯决策论 贝叶斯决策论(Bayesian decision theory)是概率框架下实施决策的基本方法.对分类任务来说,在所有相关概率都已知的理想情况下,贝叶斯决策轮考虑如何基于这些概率和误 ...

  3. 【机器学习】朴素贝叶斯分类器原理(理论+图解)

  4. 机器学习:伯努利朴素贝叶斯分类器(原理+python实现)

    伯努利朴素贝叶斯分类器主要用于文本分类,下面我们以一个具体的例子,来讲述下伯努利朴素贝叶斯的原理和实现逻辑. 具体例子: 已知我们有八个句子以及每个句子对应的类别,即中性或侮辱性.那么再给出一个句子, ...

  5. 朴素贝叶斯分类器的python实现

    徒手实现一个贝叶斯分类器 引子 代码 小结 引子 朴素贝叶斯分类器顾名思义是以贝叶斯公式为基础的分类器,其将后验概率转换为先验概率和不同类的条件概率的乘积,再通过比较不同的类别下该乘积的大小实现分类. ...

  6. 多项式朴素贝叶斯分类器_多项式朴素贝叶斯分类器的主题预测

    多项式朴素贝叶斯分类器 In Analytics Vidhya, Hackathon, there was a problem statement for text prediction of top ...

  7. 贝叶斯算法 — 朴素贝叶斯分类器— 过滤垃圾邮件 — 流失用户 — 用户画像

    目录 应用 1. 胃疼胃癌 2. 过滤垃圾邮件 朴素贝叶斯分类器 概念介绍 朴素贝叶斯分类器原理 贝叶斯分类器的应用 公式 求得是后验概率,等式右侧为先验概率 贝叶斯定理本质:通过 先验概率 求 后验 ...

  8. 基于朴素贝叶斯分类器的西瓜数据集 2.0 预测分类_朴素贝叶斯(转载自Morgan)...

    什么是朴素贝叶斯 要搞懂朴素贝叶斯分类,首先需要了解什么是贝叶斯定理和特征条件独立假设,朴素贝叶斯算法就是基于这两个来实现的分类方法. 贝叶斯定理 贝叶斯定理通俗点讲就是求在事件 B 已经发生的前提下 ...

  9. (数据科学学习手札30)朴素贝叶斯分类器的原理详解Python与R实现

    一.简介 要介绍朴素贝叶斯(naive bayes)分类器,就不得不先介绍贝叶斯决策论的相关理论: 贝叶斯决策论(bayesian decision theory)是概率框架下实施决策的基本方法.对分 ...

最新文章

  1. matlab 恶俗的缩写combntns()
  2. 回首这六年,给新人一些建议,和同龄人共勉
  3. PHP上传图片到数据库和存储到本地文件夹的方法
  4. android 从底部网上的平移动画_Android属性动画,看完这篇够用了吧
  5. c语言中prime的作用,C语言判断素数prime
  6. java游戏循环 限定次数的游戏
  7. tps+qps+mysql_实时获取MySQL的TPS、QPS(输出到屏幕)
  8. 安卓Java按钮编写加一减一_android studio 中点击button加1或者减1
  9. python编程是啥-Python编程语言的特点是什么?老男孩Python学习
  10. 简单总结下8.25技术大会感受
  11. CAD图纸是怎么转换成GIF动图的?
  12. html在线取色,JS实现的RGB网页颜色在线取色器完整实例
  13. Matlab实现熵权法并计算权重和综合评分——附增完整代码和测试用例
  14. 研究生做实验时被炸伤致残!法院判决:驳回高校上诉,赔偿162万!
  15. error C2065: ‘salary‘ : undeclared identifier
  16. 数据集市是什么?数据集市和数据仓库有什么区别
  17. 超详细的KNIME安装教程!
  18. CV_RETR_TREE’ was not declared in this scope
  19. 揭秘阿里、腾讯、字节跳动在家办公的区别
  20. C++语言程序设计第五版 - 郑莉(第十一章课后习题)

热门文章

  1. 情况一:频繁跳槽——如果你在5年内换了6份工作
  2. 天使湾创投展示的10家国内创业公司
  3. Dynamic Volume Provisioning
  4. 给VMWare Workstation添加永久磁盘
  5. 618高赞数码产品合集、数码产品种草清单
  6. Javascript中parentElement和parentNode的区别
  7. 09-golang格式化输出
  8. 更换python的安装位置
  9. npm升级最新稳定版
  10. 【数据结构】数据结构学什么?