机器学习 (10)——贝叶斯分类

本贴最后更新于 2378 天前,其中的信息可能已经水流花落

0x00 贝叶斯分类

贝叶斯分类算法是统计学的一种分类方法,它是一类利用概率统计知识进行分类的算法。在许多场合,朴素贝叶斯(Naïve Bayes,NB)分类算法可以与决策树和神经网络分类算法相媲美,该算法能运用到大型数据库中,而且方法简单、分类准确率高、速度快。

0x01 贝叶斯决策论

在分类任务中,我们不一定会得到明确的分类结果,而是得到可能被划分到每一种分类的概率。贝叶斯决策论就是用来决定出这个分类结果的方法。

贝叶斯决策论是概率框架下实施决策的基本方法,对分类任务来说,在所有相关概率都已知的情况下,贝叶斯决策论考虑如何基于这些概率和误判损失来选择最优类别标记。

0x02 贝叶斯公式

贝叶斯公式:

其中

  • P(A|B) 是在 B 发生的情况下 A 发生的概率;
  • P(A) 是 A 发生的概率;
  • P(B|A) 是在 A 发生的情况下 B 发生的概率;
  • P(B) 是 B 发生的概率。

我们可以通过一个例子来解释这个公式,假设我们知道这几个概率:

  • 50% 的下雨天早上是多云
  • 但是多云天气很多(40% 的日子早上都是多云)
  • 这个月不怎么下雨(平均 30 天只有 3 天下雨,10% 的下雨几率)

然后,早晨起来发现天气是多云,怎么知道今天下雨的概率是多少?

我们在这里用 P(雨)代表下雨,P(云)代表多云,那么我们要求的事件就是:早晨多云的情况下下雨的概率是多少,也就是 P(雨 | 云)。

然后我们就可以套用在贝叶斯公式中:

P(雨 | 云)=P(云 | 雨)* P(雨)/ P(云)

而通过前面的条件已经知道,P(云 | 雨)=0.5,P(雨)=0.1,P(云)=0.4,那么我们就可以算出早晨多云的情况下下雨的概率是 0.5*0.1/0.4=0.125。只有 1/8 的概率下雨。

这是贝叶斯公式的一个简单应用,但在实际任务中我们的事件会更多更复杂,也就是说不会是单纯的 P(雨)、P(云)这么简单的单一事件,而是多个事件的联合概率,这个时候联合概率在样本不足的情况下无法直接计算,所以我们就引入了朴素贝叶斯分类方法。

0x03 朴素贝叶斯分类

也就是说朴素贝叶斯这一方法,是由于实际情况中,我们难以从有限的样本中直接获得在所有属性上的联合类条件概率而引出的,那么朴素贝叶斯方法是这样解决联合条件概率问题的:

朴素贝叶斯分类器对所有已知类别,假设所有属性相互独立。也就是说每个属性独立的对分类结果进行影响。

当所有属性都独立的时候,联合概率就变为了:

P(A,B)=P(A)*P(B)

这样我们就可以很轻易的使用已知样本中得到的单一概率来一步步算出所需的类条件概率 P(B|A)了。

此时,贝叶斯公式可写为:

其中 d 为属性数目,Bi 为 B 在第 i 个属性上的取值。

而对所有类别 P(B)相同,因此贝叶斯准则为:

这就是朴素贝叶斯分类器的表达式。

其中 arg 数学含义:

argument of the maximum/minimum

arg max f(x): 当 f(x)取最大值时,x 的取值

arg min f(x): 当 f(x)取最小值时,x 的取值

我们只需在训练过程中基于训练集来估计类先验概率 P(A),并为每个属性估计条件概率 P(Bi|A)即可。

然后我们就根据计算出来的概率大小来判断属于哪一类。

0x04 半朴素贝叶斯分类器

朴素贝叶斯分类使用条件独立性假设降低了后验概率计算的困难,但是这个假设是很难成立的,因为很多属性之间本来就具有很高的依赖性,所以就产生了一种“半朴素贝叶斯分类器”的方法来进行改善。

半朴素贝叶斯分类器的基本思想是适当考虑一部分属性间的相互依赖信息,从而既不需要进行完全的联合概率计算,又能保证不会忽略掉比较强的属性依赖关系。

其中最常用的策略是“独依赖统计(One Dependent Estimator)”,这种方法是假设每个属性在类别之外最多只依赖一个其他属性,这个属性被称为他的父属性。而如何确定这个父属性,现在有 SPODE(Super Parent ODE),TAN(Tree Augmented naive Bayes),AODE(Averaged One-Dependent Estimator)等方法。

  • 机器学习

    机器学习(Machine Learning)是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。

    77 引用 • 37 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • Kafka

    Kafka 是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。 这种动作(网页浏览,搜索和其他用户的行动)是现代系统中许多功能的基础。 这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。

    36 引用 • 35 回帖 • 3 关注
  • App

    App(应用程序,Application 的缩写)一般指手机软件。

    91 引用 • 384 回帖
  • 大疆创新

    深圳市大疆创新科技有限公司(DJI-Innovations,简称 DJI),成立于 2006 年,是全球领先的无人飞行器控制系统及无人机解决方案的研发和生产商,客户遍布全球 100 多个国家。通过持续的创新,大疆致力于为无人机工业、行业用户以及专业航拍应用提供性能最强、体验最佳的革命性智能飞控产品和解决方案。

    2 引用 • 14 回帖
  • Vditor

    Vditor 是一款浏览器端的 Markdown 编辑器,支持所见即所得、即时渲染(类似 Typora)和分屏预览模式。它使用 TypeScript 实现,支持原生 JavaScript、Vue、React 和 Angular。

    374 引用 • 1859 回帖
  • Shell

    Shell 脚本与 Windows/Dos 下的批处理相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的。但是它比 Windows 下的批处理更强大,比用其他编程程序编辑的程序效率更高,因为它使用了 Linux/Unix 下的命令。

    125 引用 • 74 回帖
  • MongoDB

    MongoDB(来自于英文单词“Humongous”,中文含义为“庞大”)是一个基于分布式文件存储的数据库,由 C++ 语言编写。旨在为应用提供可扩展的高性能数据存储解决方案。MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似 JSON 的 BSON 格式,因此可以存储比较复杂的数据类型。

    91 引用 • 59 回帖
  • 博客

    记录并分享人生的经历。

    273 引用 • 2389 回帖
  • JVM

    JVM(Java Virtual Machine)Java 虚拟机是一个微型操作系统,有自己的硬件构架体系,还有相应的指令系统。能够识别 Java 独特的 .class 文件(字节码),能够将这些文件中的信息读取出来,使得 Java 程序只需要生成 Java 虚拟机上的字节码后就能在不同操作系统平台上进行运行。

    180 引用 • 120 回帖 • 1 关注
  • Gitea

    Gitea 是一个开源社区驱动的轻量级代码托管解决方案,后端采用 Go 编写,采用 MIT 许可证。

    5 引用 • 16 回帖
  • Q&A

    提问之前请先看《提问的智慧》,好的问题比好的答案更有价值。

    10144 引用 • 46104 回帖 • 63 关注
  • 京东

    京东是中国最大的自营式电商企业,2015 年第一季度在中国自营式 B2C 电商市场的占有率为 56.3%。2014 年 5 月,京东在美国纳斯达克证券交易所正式挂牌上市(股票代码:JD),是中国第一个成功赴美上市的大型综合型电商平台,与腾讯、百度等中国互联网巨头共同跻身全球前十大互联网公司排行榜。

    14 引用 • 102 回帖 • 313 关注
  • JavaScript

    JavaScript 一种动态类型、弱类型、基于原型的直译式脚本语言,内置支持类型。它的解释器被称为 JavaScript 引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在 HTML 网页上使用,用来给 HTML 网页增加动态功能。

    730 引用 • 1283 回帖
  • OpenStack

    OpenStack 是一个云操作系统,通过数据中心可控制大型的计算、存储、网络等资源池。所有的管理通过前端界面管理员就可以完成,同样也可以通过 Web 接口让最终用户部署资源。

    10 引用 • 3 关注
  • 黑曜石

    黑曜石是一款强大的知识库工具,支持本地 Markdown 文件编辑,支持双向链接和关系图。

    A second brain, for you, forever.

    25 引用 • 254 回帖
  • CAP

    CAP 指的是在一个分布式系统中, Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可兼得。

    12 引用 • 5 回帖 • 631 关注
  • etcd

    etcd 是一个分布式、高可用的 key-value 数据存储,专门用于在分布式系统中保存关键数据。

    6 引用 • 26 回帖 • 546 关注
  • Ant-Design

    Ant Design 是服务于企业级产品的设计体系,基于确定和自然的设计价值观上的模块化解决方案,让设计者和开发者专注于更好的用户体验。

    17 引用 • 23 回帖 • 3 关注
  • WebComponents

    Web Components 是 W3C 定义的标准,它给了前端开发者扩展浏览器标签的能力,可以方便地定制可复用组件,更好的进行模块化开发,解放了前端开发者的生产力。

    1 引用 • 15 关注
  • Outlook
    1 引用 • 5 回帖 • 3 关注
  • Swift

    Swift 是苹果于 2014 年 WWDC(苹果开发者大会)发布的开发语言,可与 Objective-C 共同运行于 Mac OS 和 iOS 平台,用于搭建基于苹果平台的应用程序。

    34 引用 • 37 回帖 • 558 关注
  • Eclipse

    Eclipse 是一个开放源代码的、基于 Java 的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。

    76 引用 • 258 回帖 • 624 关注
  • Solidity

    Solidity 是一种智能合约高级语言,运行在 [以太坊] 虚拟机(EVM)之上。它的语法接近于 JavaScript,是一种面向对象的语言。

    3 引用 • 18 回帖 • 446 关注
  • OkHttp

    OkHttp 是一款 HTTP & HTTP/2 客户端库,专为 Android 和 Java 应用打造。

    16 引用 • 6 回帖 • 88 关注
  • ZeroNet

    ZeroNet 是一个基于比特币加密技术和 BT 网络技术的去中心化的、开放开源的网络和交流系统。

    1 引用 • 21 回帖 • 649 关注
  • RemNote
    2 引用 • 16 回帖 • 25 关注
  • CodeMirror
    2 引用 • 17 回帖 • 173 关注
  • Latke

    Latke 是一款以 JSON 为主的 Java Web 框架。

    71 引用 • 535 回帖 • 830 关注