简单通俗易懂:一个小例子完美解释Naive Bayes(朴素贝叶斯)分类器

2023-11-03

更多深度文章,请关注:https://yq.aliyun.com/cloud


最简单的解决方案通常是最强大的解决方案,而朴素贝叶斯就是一个很好的证明。尽管机器学习在过去几年取得了巨大的进步,但朴素贝叶斯已被证明不仅简单,而且快速、准确、可靠。它已经成功地用于许多项目中,而且它对自然语言处理(NLP)的问题的解决提供了很大的帮助。

朴素贝叶斯是利用概率论和贝叶斯定理预测样本类别(如新闻或客户评论)的概率算法。它们是概率性的,这意味着它们计算给定样本的每个类别的概率,然后输出概率最高的样本类别。他们获得这些概率的方式是使用贝叶斯定理,它基于可能与该特征相关的条件的先前数据来描述特征的概率。

我们将使用一种称为多项式朴素贝叶斯的算法。我们将以一个例子的方式介绍应用于NLP的算法,所以最终不仅你会知道这个方法是如何工作的,而且还会知道为什么它可以工作。我们将使用一些先进的技术,使朴素贝叶斯与更复杂的机器学习算法(如SVM和神经网络)可以相提并论。

一个简单的例子

让我们看一下这个例子在实践中如何运作。假设我们正在建立一个分类器,说明文本是否涉及体育运动。我们的训练集有5句话:

Text

Category

A great game(一个伟大的比赛)

Sports(体育运动)

The election was over(选举结束)

Not sports(不是体育运动)

Very clean match(没内幕的比赛)

Sports(体育运动)

A clean but forgettable game

(一场难以忘记的比赛)

Sports(体育运动)

It was a close election

这是一场势均力敌的选举

Not sports(不是体育运动)

由于朴素贝叶斯贝叶斯是一个概率分类器,我们想要计算句子“A very close game” 是体育运动的概率以及它不是体育运动的概率。在数学上,我们想要的是PSports | a very close game这个句子的类别是体育运动的概率。

但是我们如何计算这些概率呢?

特征工程

创建机器学习模型时,我们需要做的第一件事就是决定使用什么作为特征。例如,如果我们对健康进行分类,特征可能就是是一个人的身高,体重,性别等等。我们会排除对模型无用的东西,如人的名字或喜爱的颜色。

在这种情况下,我们甚至没有数字特征。我们只有文字。我们需要以某种方式将此文本转换成可以进行计算的数字。

那么我们该怎么办?一般都是使用字频。也就是说,我们忽略了词序和句子的构造,把每一个文件作为单词库来处理。我们的特征将是这些词的计数。尽管它似乎过于简单化,但它的效果令人惊讶。

贝叶斯定理

贝叶斯定理在使用条件概率(如我们在这里做)时很有用,因为它为我们提供了一种方法来扭转它们:P(A|B)=P(B|A)×P(A)/P(B)。在我们这种情况下,我们有Psports | a very close game),所以使用这个定理我们可以逆转条件概率:50b34817cb75edda1d17bcd19159b743db25ed35

因为对于我们的分类器,我们只是试图找出哪个类别有更大的概率,我们可以舍弃除数,只是比较

028daa8b7e1d0984778141a0f3ba1b5ef0984d5f

这样就更好理解了,因为我们可以实际计算这些概率!只要计算句子  A very close game” 多少次出现在 Sports”的训练集中,将其除以总数,就可以获得Pa very close game | Sports)。

有一个问题,但是我们的训练集中并没有出现“A very close game”,所以这个概率是零。除非我们要分类的每个句子都出现在我们的训练集中,否则模型不会很有用。

Being Naive

我们假设一个句子中的每个单词都与其他单词无关。这意味着我们不再看整个句子,而是单个单词。我们把P(A very close game)写成:P(a very close game)=P(a)×P(very)×P(close)×P(game) 这个假设非常强大,但是非常有用。这使得整个模型能够很好地处理可能被错误标签的少量数据或数据。下一步将它应用到我们以前所说的:

P(a very close game|Sports)=P(a|Sports)×P(very|Sports)×P(close|Sports)×P(game|Sports)

现在,我们所有的这些单词在我们的训练集中实际出现了好几次,我们可以计算出来!

计算概率

计算概率的过程其实只是在我们的训练集中计数的过程。

首先,我们计算每个类别的先验概率:对于训练集中的给定句子, P(体育运动)的概率为⅗。然后,P(非体育运动)是⅖。然后,在计算Pgame | Sports)就是“game”有多少次出现在sports的样品,然后除以sports的总数(11)。因此,P(game|Sports)=2/11。

但是,我们遇到了一个问题:“close”不会出现在任何sports样本中!那就是说Pclose | Sports= 0。这是相当不方便的,因为我们将把它与其他概率相乘,所以我们最终会得到P(a|Sports)×P(very|Sports)×0×P(game|Sports)等于0。这样做的事情根本不会给我们任何信息,所以我们必须找到一个办法。

我们该怎么做呢?通过使用一种被称为拉普拉斯平滑的方法:我们为每个计数添加1,所以它不会为零。为了平衡这一点,我们将可能的词数加到除数,因此这部分将永远不会大于1。在我们的案例中,可能的话是 [ “a” ,“great” ,“very” ,“over” ,'it' ,'but' ,'game' ,'election' ,'close' ,'clean' ,'the' ,'was' ,'forgettable' ,'match' ] 。

由于可能的单词数是14,应用拉普拉斯平滑我们得到了。全部结果如下:f068bba7de3344faa9b4c0507a1795f3c05e00e2

ee0a279a7badef97e426dec5cb87d69e54e7cee0

现在我们只是将所有的概率加倍,看看谁更大:

041a3374b93f45d9ac07924ed08c72b74afd8cea

完美!我们的分类器给出了“A very close game” Sport类。

先进的技术

改进这个基本模型可以做很多事情。以下这些技术可以使朴素贝叶斯与更先进的方法效果相当。

  • Removing stopwords(删除停用词)。这些常用的词,不会真正地添加任何分类,例如,一个,有能力,还有其他,永远等等。所以为了我们的目的,选举结束将是选举,一个非常接近的比赛将是非常接近的比赛。
  • Lemmatizing words(单词变体还原)。这是将不同的词汇组合在一起的。所以选举,大选,被选举等将被分组在一起,算作同一个词的更多出现。
  • Using n-grams (使用实例)。我们可以计算一些常用的实例,如没有内幕的比赛势均力敌的选举。而不只是一个字,一个字的进行计算。
  • 使用TF-IDF。而不是只是计数频率,我们可以做更高级的事情

本文由北邮@爱可可-爱生活推荐,阿里云云栖社区翻译。
文章原标题《A practical explanation of a Naive Bayes classifier

作者:Bruno Stecanella,机器学习爱好者,译者:袁虎,审阅:
文章为简译,更为详细的内容,请查看原文

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

简单通俗易懂:一个小例子完美解释Naive Bayes(朴素贝叶斯)分类器 的相关文章

随机推荐

  • 蓝桥杯每日一题——手算题·空间

    本题为填空题 只需要算出结果后 在代码中使用输出语句将所填结果输出即可 小蓝准备用 256MB 的内存空间开一个数组 数组的每个元素都是 3232 位 二进制整数 如果不考虑程序占用的空间和维护内存需要的辅助空间 请问 56MB 的空间可以
  • [阶段二] 4. MySQL的基本操作

    mysql的基本操作 数据插入 INSERT 语句可以向数据表写入数据 可以是一条记录 也可以是多条记录 INSERT INTO 数据表名称 字段1 字段2 VALUES 值1 值2 插入一条记录 INSERT INTO 数据表名称 字段1
  • 分析工具 nvprof简介

    nvprof 是一个可用于Linux Windows和OS X的命令行探查器 使用 nvprof myApp 运行我的应用程序 我可以快速看到它所使用的所有内核和内存副本的摘要 摘要将对同一内核的所有调用组合在一起 显示每个内核的总时间和总
  • 十六进制转二进制

    public static String hexToBinary String hex if hex null hex length 2 0 return null String bString String tmp for int i 0
  • Visual Studio(VS) 编程推荐字体和主题设置

    首先是字体 工具 gt 选项 gt 环境 gt 字体和颜色 具体图如下 选择Consolas的原因 Consolas算是最常见的编码字体了 在很多的编译软件都是这个字体 而且在这个字体下的中英文标点和半角圆角符号也能有比较明显的区别 至于字
  • Java 集合 - Map 接口

    文章目录 1 概述 2 常用 API 3 遍历 Map 集合 4 HashMap 和 Hashtable 5 LinkedHashMap 6 TreeMap 7 Properties 8 Set 集合与 Map 集合的关系 9 总结 1 概
  • C++11/14之模板全特化,偏特化

    目录 模板全特化 偏特化 类模板特化 类模板全特化 a 常规全特化 b 特化成员函数而不是模板 类模板偏特化 局部特化 a 模板参数数量 b 模板参数范围 int const int 比int小 函数模板特化 函数模板全特化 函数模板偏特化
  • LayerNorm的理解

    LayerNorm计算公式 y x E x
  • C语言实现多级反馈队列调度算法

    include
  • java架构师进阶之路

    Java架构师 应该算是一些Java程序员们的一个职业目标了吧 很多码农码了五六年的代码也没能成为架构师 那成为Java架构师要掌握哪些技术呢 总体来说呢 有两方面 一个是基础技术 另一个就是组织能力和提出解决方案能力了 如果你是想成为Ja
  • Netty入门-Channel

    目录 Channel详解 Channel的特点 Channel接口方法 ChannelOutboundInvoker接口 AttributeMap接口 ChannelHandler接口 ChannelInboundHandler接口 Cha
  • 请取件

    Part1前言 最常见的鼠标平移算法是平行于水平面 地面 的 无论相机视角如何 平移时 相机的世界Z值始终不变 因为绝大多数场景都是在观察地面上的物体 而人类的行走总是平行于地面的 但是本文要介绍的另一种小众的平移算法则平行于视锥体的截面
  • JPA使用审计功能新增时, 不自动更新@LastModifiedDate和@LastModifiedBy字段

    JPA使用审计功能新增时 不自动更新 LastModifiedDate和 LastModifiedBy字段 疑问 查询源码 解决方案 疑问 JPA使用审计功能 网上有一大堆demo 但是使用时 会发现创建的时候会自动填写 LastModif
  • Mac安装homebrew报错curl: (7) Failed to connect to raw.githubusercontent.com port 443: Operation

    homebrew安装时 一般直接在终端直接输入命令 usr bin ruby e curl fsSL https raw githubusercontent com Homebrew install master install 但是这个方
  • Numpy/Pytorch之数据类型与强制类型转换

    目录 1 数据类型简介 Numpy Pytorch 2 Python的type 函数 3 Numpy Pytorch的dtype属性 4 Numpy中的类型转换 先聊聊我为什么会用到这个函数 不看跳过 astype 函数 输出 4 Pyto
  • 【线性表的原地逆置】

    目录 前言 一 顺序表 数组 一 双指针 二 单链表 一 模拟顺序表的双指针 交换的节点的值域 二 头插法 改变节点的指针域 三 递归实现 将整体链表反向 整体代码 总结 前言 打怪升级第一天 大家好 今天我们来了解一下数组和单链表的原地逆
  • (mybatis驼峰命名导致映射错误)

    今天在复习mybatis时遇到这样的一个问题 我数据库表的字段和我定义的实体类名不一致 中间有下划线 如下图 实体类 数据库字段 结果会导致部分查询数据是null 于是我首先想到了自己定义一个resultmap映射 给数据库字段取一个别名
  • Android 学习之多状态布局的一种实现方案

    开发应用的过程中 首页的控件越来越多 布局文件的代码已经到了爆表的程度 而且不同状态下首页各个控件的 Visibility 不同 每次新增状态都是一件头疼的事情 时常遗漏控件导致出错 和 YYY 大佬交流讨论后他给出了一种巧妙的方案 特此学
  • 人工智能数学基础:费马引理、罗尔定理、拉格朗日微分中值定理、柯西中值定理

    一 费马 Fermat 引理 费马 Fermat 引理 设函数f x 在点x0的某邻域U x0 内有定义 并且在x0处可导 如果对任意的x U x0 有f x f x0 或f x f xo 那么f x0 0 老猿认为费马引理就是说明 对于某
  • 简单通俗易懂:一个小例子完美解释Naive Bayes(朴素贝叶斯)分类器

    更多深度文章 请关注 https yq aliyun com cloud 最简单的解决方案通常是最强大的解决方案 而朴素贝叶斯就是一个很好的证明 尽管机器学习在过去几年取得了巨大的进步 但朴素贝叶斯已被证明不仅简单 而且快速 准确 可靠 它