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

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

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

    83 引用 • 37 回帖

相关帖子

欢迎来到这里!

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

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

推荐标签 标签

  • C++

    C++ 是在 C 语言的基础上开发的一种通用编程语言,应用广泛。C++ 支持多种编程范式,面向对象编程、泛型编程和过程化编程。

    107 引用 • 153 回帖
  • OnlyOffice
    4 引用 • 20 关注
  • SQLite

    SQLite 是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。SQLite 是全世界使用最为广泛的数据库引擎。

    5 引用 • 7 回帖
  • Follow
    4 引用 • 12 回帖 • 13 关注
  • SEO

    发布对别人有帮助的原创内容是最好的 SEO 方式。

    35 引用 • 200 回帖 • 32 关注
  • Google

    Google(Google Inc.,NASDAQ:GOOG)是一家美国上市公司(公有股份公司),于 1998 年 9 月 7 日以私有股份公司的形式创立,设计并管理一个互联网搜索引擎。Google 公司的总部称作“Googleplex”,它位于加利福尼亚山景城。Google 目前被公认为是全球规模最大的搜索引擎,它提供了简单易用的免费服务。不作恶(Don't be evil)是谷歌公司的一项非正式的公司口号。

    49 引用 • 192 回帖
  • App

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

    91 引用 • 384 回帖
  • VirtualBox

    VirtualBox 是一款开源虚拟机软件,最早由德国 Innotek 公司开发,由 Sun Microsystems 公司出品的软件,使用 Qt 编写,在 Sun 被 Oracle 收购后正式更名成 Oracle VM VirtualBox。

    10 引用 • 2 回帖 • 17 关注
  • ReactiveX

    ReactiveX 是一个专注于异步编程与控制可观察数据(或者事件)流的 API。它组合了观察者模式,迭代器模式和函数式编程的优秀思想。

    1 引用 • 2 回帖 • 183 关注
  • 招聘

    哪里都缺人,哪里都不缺人。

    189 引用 • 1057 回帖 • 4 关注
  • WebClipper

    Web Clipper 是一款浏览器剪藏扩展,它可以帮助你把网页内容剪藏到本地。

    3 引用 • 9 回帖 • 3 关注
  • B3log

    B3log 是一个开源组织,名字来源于“Bulletin Board Blog”缩写,目标是将独立博客与论坛结合,形成一种新的网络社区体验,详细请看 B3log 构思。目前 B3log 已经开源了多款产品:SymSoloVditor思源笔记

    1063 引用 • 3455 回帖 • 161 关注
  • 链滴

    链滴是一个记录生活的地方。

    记录生活,连接点滴

    173 引用 • 3849 回帖 • 1 关注
  • 面试

    面试造航母,上班拧螺丝。多面试,少加班。

    325 引用 • 1395 回帖 • 1 关注
  • ZooKeeper

    ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务,是 Google 的 Chubby 一个开源的实现,是 Hadoop 和 HBase 的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

    59 引用 • 29 回帖
  • Wide

    Wide 是一款基于 Web 的 Go 语言 IDE。通过浏览器就可以进行 Go 开发,并有代码自动完成、查看表达式、编译反馈、Lint、实时结果输出等功能。

    欢迎访问我们运维的实例: https://wide.b3log.org

    30 引用 • 218 回帖 • 643 关注
  • 阿里云

    阿里云是阿里巴巴集团旗下公司,是全球领先的云计算及人工智能科技公司。提供云服务器、云数据库、云安全等云计算服务,以及大数据、人工智能服务、精准定制基于场景的行业解决方案。

    84 引用 • 324 回帖 • 1 关注
  • jsoup

    jsoup 是一款 Java 的 HTML 解析器,可直接解析某个 URL 地址、HTML 文本内容。它提供了一套非常省力的 API,可通过 DOM,CSS 以及类似于 jQuery 的操作方法来取出和操作数据。

    6 引用 • 1 回帖 • 486 关注
  • WebComponents

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

    1 引用 • 9 关注
  • 服务

    提供一个服务绝不仅仅是简单的把硬件和软件累加在一起,它包括了服务的可靠性、服务的标准化、以及对服务的监控、维护、技术支持等。

    41 引用 • 24 回帖 • 2 关注
  • 资讯

    资讯是用户因为及时地获得它并利用它而能够在相对短的时间内给自己带来价值的信息,资讯有时效性和地域性。

    56 引用 • 85 回帖 • 1 关注
  • Telegram

    Telegram 是一个非盈利性、基于云端的即时消息服务。它提供了支持各大操作系统平台的开源的客户端,也提供了很多强大的 APIs 给开发者创建自己的客户端和机器人。

    5 引用 • 35 回帖 • 1 关注
  • ActiveMQ

    ActiveMQ 是 Apache 旗下的一款开源消息总线系统,它完整实现了 JMS 规范,是一个企业级的消息中间件。

    19 引用 • 13 回帖 • 677 关注
  • etcd

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

    6 引用 • 26 回帖 • 547 关注
  • Eclipse

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

    76 引用 • 258 回帖 • 627 关注
  • OneDrive
    2 引用 • 3 关注
  • Vue.js

    Vue.js(读音 /vju ː/,类似于 view)是一个构建数据驱动的 Web 界面库。Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件。

    267 引用 • 666 回帖 • 1 关注