目录

介绍

朴素贝叶斯模型

参数估计

分类

结论与分析


可访问 实现机器学习的循序渐进指南系列汇总,获取本系列完成文章列表。

介绍

朴素贝叶斯是一种基于贝叶斯决策理论和特征条件独立性的分类,它基于训练集上的条件独立性作为检测模型来计算概率分布。对于给定的测试对象,后验概率的最大值的标签是测试对象的预测。最大化后验概率意味着最小化预期风险。那么另一个问题是为什么称它为“朴素 ”贝叶斯?这是因为朴素贝叶斯遵循这样一个天真的假设:当标签被确定时所有分类特征都是独立的,由下式给出:

其中j是第i个特征,c kk-th标签。然后,贝叶斯分类器可以定义为:

那么为什么最大化后验概率意味着最小化预期风险呢?让损失是0-1损失函数

其中f(x) 是决策函数。然后,预期的风险是

这是从联合分布P(X,Y)计算的。因此条件期望是:

为了最大限度地降低预期风险,需要将每个风险降至最低X = x,即:

朴素贝叶斯模型

朴素贝叶斯模型由参数估计和分类组成。

参数估计

在训练过程中,学习意味着估计先验概率和条件概率。最大似然估计(MLE)是获得上述参数的一般方法。先验概率的MLE由下式给出:

表示 j-th特征集是 { a j1a j2,...,a jsi }。然后,条件概率的MLE由下式给出:

在朴素贝叶斯训练过程中,计算先验概率和条件概率。但是,如果在训练集中从未发生过特征的值,则其概率等于零,这将影响后验概率的结果。为了解决这个问题,我们引入拉普拉斯平滑在每个随机变量的频率上加一个整数

然后,先验概率的贝叶斯估计是:

其中N是唯一标签的数量,K即样本数量。先验概率代码如下所示:

prior_probability = {}
for key in range(len(label_value)):prior_probability[label_value[key][0]] = (label_value[key][1] + self.laplace) / (N + K * self.laplace)  # laplace smooth
self.prior_probability = prior_probability

其中label_value 是(label, label_num)元组。

类似地,条件概率的贝叶斯估计是:

条件概率的代码如下所示。应用矩阵来保存条件概率,并且 S[j]是j-th特征的唯一标签的数量。

# calculate the conditional probability
prob = []
# calculate the count (x = a & y = c)
for j in range(feature_dim):count = np.zeros([S[j], len(label_count)])  # the range of label start with 1feature_temp = train_data[:, j]feature_value_temp = feature_value[j]for i in range(len(feature_temp)):for k in range(len(feature_value_temp)):for t in range(len(label_count)):if feature_temp[i] == feature_value_temp[k]and train_label[i] == label_value[t][0]:count[k][t] += 1             # x = value and y = label# calculate the conditional probabilityfor m in range(len(label_value)):count[:, m] = (count[:, m] + self.laplace) /(label_value[m][1] + self.laplace*S[j])  # laplace smoothing# print(count)prob.append(count)
self.conditional_probability = prob

分类

在计算先验概率和条件概率之后,贝叶斯分类模型是:

分类代码如下所示。predict是一个包含每个标签概率的字典。然后我们只需要排序predict,预测是排序字典中的第一个元素。

def classify(self, sample):predict = {}for m in range(len(self.label_value)):temp = self.prior_probability[self.label_value[m][0]]  # get the prior_probability of m-th label in label_valuefor n in range(len(sample)):if sample[n] in self.feature_value[n]:# print(m, n)index = np.where(self.feature_value[n] == sample[n])[0][0]temp = temp * self.conditional_probability[n][index][m]else:temp = self.laplace /(self.S[n] * self.laplace)  # if the value of feature is# not in training set, return the laplace smoothingpredict[self.label_value[m][0]] = tempreturn predict

结论与分析

贝叶斯模型是本文的Berniulli贝叶斯模型。除此之外,还有其他贝叶斯模型,如高斯贝叶斯模型,多项式贝叶斯模型。最后,让我们将我们的贝叶斯模型与Sklearn中的贝叶斯模型进行比较,检测性能如下所示:

结果表明,这两种方法的检测效果都很差。此外,我们的贝叶斯模型需要更长的运行时间,这可能是条件概率的算法包含太多的循环。

可以在MachineLearning中找到本文中的相关代码和数据集。

有兴趣的小伙伴可以查看上一篇或者下一篇。

原文地址:https://www.codeproject.com/Articles/4051340/Step-by-Step-Guide-To-Implement-Machine-Learning-3

实现机器学习的循序渐进指南III——朴素贝叶斯相关推荐

  1. [机器学习] 分类 --- Naive Bayes(朴素贝叶斯)

    一.概率知识点复习 (1)条件概率 就是事件A在另外一个事件B已经发生条件下的发生概率.条件概率表示为P(A|B),读作"在B条件下A的概率". (2)联合概率 可以简单的理解为事 ...

  2. [机器学习]一个例子完美解释朴素贝叶斯分类器

    何为"朴素":属性条件独立性假设 如果已知条件不止一个属性,二是多个呢,这个时候贝叶斯公式可以写作 上述公式假设特征属性 a1,a2⋯ 相互独立,这也是"朴素" ...

  3. 机器学习算法(8)——朴素贝叶斯、最小风险贝叶斯决策

    最后以巨佬--"贝叶斯大爷"作为基本机器学习算法学习的压轴算法>>>>>>>>>>>>>膜拜!!!!! ...

  4. 机器学习实战(三)朴素贝叶斯NB(Naive Bayes)

    目录 0. 前言 1. 条件概率 2. 朴素贝叶斯(Naive Bayes) 3. 朴素贝叶斯应用于文本分类 4. 实战案例 4.1. 垃圾邮件分类案例 学习完机器学习实战的朴素贝叶斯,简单的做个笔记 ...

  5. 机器学习监督学习之分类算法---朴素贝叶斯代码实践

    目录 1. 言论过滤器 1.1 项目描述 1.2 朴素贝叶斯 工作原理: 1.2.1 词条向量 1.3 开发流程: 1.4 代码实现 1.4.1 创建样本 1.4.2 构建词汇表,用于建立词集向量 1 ...

  6. 机器学习监督学习之分类算法---朴素贝叶斯理论知识

    感谢Jack-Cui大佬的知识分享 机器学习专栏点击这里 目录 感谢Jack-Cui大佬的知识分享 0. 概述 1. 朴素贝叶斯理论 1.1 贝叶斯理论 1.1.1 相关计算公式:条件概率公式,贝叶斯 ...

  7. 机器学习--详解贝叶斯公式、朴素贝叶斯的来龙去脉(附上多方式代码实现)

    贝叶斯公式: 提到贝叶斯公式,首先需要从条件概率说起,因为他们都是基于条件概率发展而来的,既然条件概率那么重要,那么什么是条件概率呢? 条件概率是概率论中的一个重要而时用的概念,生活中我们总是无意识的 ...

  8. 【机器学习算法笔记系列】朴素贝叶斯(NB)算法详解和实战

    朴素贝叶斯(NB)算法概述 朴素贝叶斯(Naïve Bayes, NB)算法,是一种基于贝叶斯定理与特征条件独立假设的分类方法.朴素:特征条件独立:贝叶斯:基于贝叶斯定理.属于监督学习的生成模型,实现 ...

  9. 应用机器学习(三):朴素贝叶斯分类器

    朴素贝叶斯( Naive Bayes )分类器,是指将贝叶斯( Bayes )原理应用于具有较强独立性假设的特征(变量),而得到的一族简单的概率分类器. Naive Bayes 分类器假设: 给定类变 ...

最新文章

  1. java导出为excel文件_java导出数据到excel文件
  2. 每天进步一点点——Linux
  3. 我成功攻击了Tomcat服务器,大佬们的反应亮了
  4. 如何发挥ERP系统中的财务监控职能?
  5. docker基础命令
  6. 64位进程调用32位dll的解决方法
  7. phpcmsV9找配置文件修改JS/CSS/IMG/APP_PATH、upload_path的路径?
  8. 微软十月补丁星期二值得关注的0day及其它
  9. 23种设计模式(9):访问者模式(转)
  10. Python3入门机器学习经典算法与应用 第3章 Jupyter Notebook numpy.array 基础 numpy.array的基本操作
  11. GAN生成的人脸数据集
  12. 3D 小游戏《飞跃地平线 Plus》开发分享
  13. 多少层楼听不见街边噪音_街边刮板
  14. 医疗管理系统-检查组管理
  15. vue的侦听器,过滤器和过度动画的了解
  16. 详解c语言编程库题,详解C语言编程
  17. creo4.0 二维图转pdf
  18. 翻译工作必备,英文标点符号使用规则
  19. ensp 配置DHCP
  20. 微信如何批量添加好友?

热门文章

  1. js点击按钮改变字体大小并给他颜色_如何在Elementor中修改文本的字体、大小、颜色、样式...
  2. java锁的概念,Java ReentrantLock锁机制概念篇
  3. arduino蜂鸣器音乐代码青花瓷_教你用 Arduino 制造简易金属探测器
  4. UI设计灵感|逻辑感十足的数据可视化界面设计
  5. 感恩节活动促销海报模板,摆好借势感恩节的姿势
  6. 计算机组装与维护报告论文,计算机组装与维护实习报告范文
  7. 求两条轨迹间的hausdorff距离_「中考专题」瓜豆原理|第二讲 线段型路径轨迹...
  8. STL中sort排序的简单使用
  9. 牛客网编程题01--计算字符串最后一串单词的长度,单词以空格隔开,字符串小于5000
  10. 用户态 tcpdump 如何实现抓到内核网络包的?