导读

经典机器学习算法中,Naive Bayes可占一席之地,也是唯一一个纯粹的概率分类算法模型。考虑其原理简单却不失强悍性能,Naive Bayes是个人最喜爱的算法之一——当然,另一个是决策树。

贝叶斯其人,据说只是业余数学家

Naive Bayes,中文译作朴素贝叶斯,这里Naive的原义是幼稚的,常常带有一点贬义的味道,用在这个算法命名中翻译为朴素,也称得上是一种包容了。另一个关键词贝叶斯,则是因为朴素贝叶斯算法的主要理论依据是贝叶斯定理,所以本文首先介绍贝叶斯定理,然后引出朴素贝叶斯算法的基本思想和原理。

01 贝叶斯定理

贝叶斯定理一般用于求解后验概率,核心公式为:

其中:

  • P(A|B)称作后验概率,为待求目标

  • P(A)为先验概率,一般用大量数据统计得出,当数据量较少时也可根据经验提供

  • P(B|A)为条件概率,可根据大量数据统计得出,一般采用极大似然估计的方式给出,实际上也属于先验概率

  • P(B)实际上当然也属于先验概率,而且仅涉及到单变量,所以与P(A)类似,也可用数据统计得出,但由于P(B)在贝叶斯定理中独立处于分母中,其具体数值的大小不会影响最大后验概率的判定结果,一般无需计算。如果在先验概率未知且确需计算的话,那么一般会引入贝叶斯全概率公式:

即遍历可能触发B的所有条件Ai,得到其最终的P(B)。

在此基础上,贝叶斯定理常用于解决这样一类场景,这里引用一个经典的贝叶斯条件概率问题:

假设在某居民区, 一种罕见的疾病以1‰的概率传染其他人。该疾病有一种检验方法:若有人传染上了这种病,其检验结果有99%的概率呈阳性;同时此检验也会产生一些虚假的阳性,即未传染的患者有2%的概率也呈阳性。问当前一名居民检验呈阳性,传染该病的真实概率有多大?

在这一问题中,简单对应一下几个概率为:

  • 先验概率:P(传染)=0.001,P(未传染)=0.999

  • 条件概率:P(阳性|传染)=0.99,P(阴性|传染)=0.01;P(阳性|未传染)=0.02,P(阴性|未传染)=0.98

  • 待求目标概率:P(传染|阳性)

其中分子的推导即用到全概率公式。带入相应的基础概率值,可以得出在检测为阳性的情况下真实传染的概率仅为4.7%,未传染的概率即为95.3%。

这可能是一个令人大跌眼镜的计算结果,但确实是经过理论计算得出。一个直观的理解是虽然在传染后检测呈阳性的概率很大,但由于传染的基数过小,导致小基数大概率的作用结果未能抵过大基数小概率的影响。

02 朴素贝叶斯算法

在介绍贝叶斯定理的基础上,那么朴素贝叶斯的思想其实已经非常简单:单特征条件下可以应用贝叶斯定理得出不同条件的概率(比如前例中根据检测呈现阳性还是阴性这个特征计算传染和未传染的概率),那么能否根据多维特征来推广这个概率求解公式呢?这就涉及到朴素贝叶斯的一个核心假设:朴素(Naive)!

问题可描述为:

用机器学习语言描述:B1……Bn表示每一列特征取值,A代表分类标签结果。

其中:

  • P(Ai|B1, B2, …, Bn)是在已知观测特征B1,B2,…,Bn的情况下计算Ai发生的概率,为待求目标

  • P(B1, B2, …, Bn|Ai)为在Ai条件下出现B1,B2,…,Bn的一组特定特征的条件概率

  • P(Ai)为A事件的先验概率

  • P(B1, B2, …, Bn)作为分母,不影响相对大小,其实可以不用求解

那么,为了求出观测特征发生的相对概率大小,则需分别计算P(Ai)和P(B1, B2, …, Bn|Ai)两类概率,其中前者涉及单变量自然比较好求解,难点在于后者。这个概率的求解难度有多大呢?设想一下,假如每个B1……Bn每个事件取值都只有两类,那么对于每个分类标签Ai,要根据数据统计计算的先验概率P(B1, B2, …, Bn|Ai)则有2^n个,这是一个随特征列数指数增长的概率结果,还只是一个分类标签,K个分类标签理论上最多有K*2^n个先验概率。这是一个不可接受的事实。于是,朴素贝叶斯的关键假设浮出水面:假设各特征间相互独立!进而:

于是,K*2^n个先验概率瞬间变为K*2*n个先验概率,即可分别对每列特征Bj求解不同分类标签下的先验概率P(Bj|Ai),其中每个分类标签对应的单特征Bj仅需2个先验概率。这是一个可以接受的计算量。

至此,朴素贝叶斯算法训练的过程实际上就是求解各个先验概率P(Ai)和条件概率P(Bj|Ai)的过程,然后在预测分类过程中则仅需将训练过程中得到的各个概率值代入贝叶斯公式中,即可得到当前特征下的各分类标签的相对概率结果。其中相对概率较大的自然就作为预测结果标签。

朴素贝叶斯算法就是这么简单易懂!

03 几个值得注意的点

朴素贝叶斯算法原理简单,实现起来也不复杂,在某些特定场景下也有着较好的算法性能(例如垃圾邮件识别),但以下几点值得注意:

  • 朴素贝叶斯算法仅可用于分类,而不能执行回归任务。可能也是唯一一个仅可用于分类而不能用于回归的算法模型

  • 根据特征数值离散或连续,在求解或拟合条件概率时可分别得到离散下多项式分布或连续条件下高斯分布

  • 在计算条件概率过程中,一个不容忽视的细节是拉普拉斯平滑:即考虑条件概率是由有限的训练样本统计计算得出,那么自然可能存在未覆盖的特殊情况,例如在分类标签Ai下Bj的某特征出现概率为0,那么在Bj出现该特征时作用的所有结果都会是0。这是一个过于简单粗暴的处理,毕竟训练中未曾出现不代表不可能出现。所以,在实际建模中会以最小出现1次参与计算条件概率。类似地,在特征取值连续条件下,也被赋予了一个特定的最小概率来避免0概率出现时的一刀切。

最后,Naive Bayes中的Naive,难道仅表示各特征列相对独立的这一朴素的假设吗?其实不然!还有另外一层隐藏的含义在于:Naive Bayes还假设各特征对标签预测的重要程度(feature_importance)是一致的!

相关阅读:

  • 写在1024:一名数据分析师的修炼之路

  • 数据科学系列:sklearn库主要模块简介

  • 数据科学系列:seaborn入门详细教程

  • 数据科学系列:pandas入门详细教程

  • 数据科学系列:matplotlib入门详细教程

  • 数据科学系列:numpy入门详细教程

Naive Bayes——Naive在哪?相关推荐

  1. R构建朴素贝叶斯分类器(Naive Bayes Classifier)

    R构建朴素贝叶斯分类器(Naive Bayes Classifier) 目录 R构建朴素贝叶斯分类器(Naive Bayes Classifier) 朴素贝叶斯原理及分类器

  2. 数据挖掘十大经典算法之——Naive Bayes 算法

    数据挖掘十大经典算法系列,点击链接直接跳转: 数据挖掘简介及十大经典算法(大纲索引) 1. 数据挖掘十大经典算法之--C4.5 算法 2. 数据挖掘十大经典算法之--K-Means 算法 3. 数据挖 ...

  3. 朴素贝叶斯(naive bayes)

    朴素贝叶斯(naive bayes) 标签: Python 机器学习 主要參考资料:<机器学习实战><统计学习方法> 1.朴素贝叶斯分类原理 朴素贝叶斯法是基于贝叶斯定理和特征 ...

  4. matlab中的分类器使用小结(SVM、KNN、RF、AdaBoost、Naive Bayes、DAC)

    1.前言 目前了解到的MATLAB分类器有:K近邻,随机森林,朴素贝叶斯,集成学习方法,鉴别分析,支持向量机.现将其主要函数使用方法总结如下,更多细节需参考MATLAB 帮助文件. 设: 训练样本:t ...

  5. 朴素贝叶斯(Naive Bayes),“Naive”在何处?

    加上条件独立假设的贝叶斯方法就是朴素贝叶斯方法(Naive Bayes). Naive的发音是"乃一污",意思是"朴素的"."幼稚的".&q ...

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

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

  7. Mahout分类算法学习之实现Naive Bayes分类示例

    1.简介 (1) 贝叶斯分类器的分类原理发源于古典概率理论,是通过某对象的先验概率,利用贝叶斯公式计算出其后验概率,即该对象属于某一类的概率,选择具有最大后验概率的类作为该对象所属的类.朴素贝叶斯分类 ...

  8. Naive Bayes Classifier - 朴素贝叶斯分类器

    Naive Bayes Classifier - 朴素贝叶斯分类器 简介 在机器学习中,朴素贝叶斯分类器是一系列基于"贝叶斯原理"和"特征之间独立分布假设"的概 ...

  9. java naive方法_朴素贝叶斯方法(Naive Bayes Method)

    朴素贝叶斯是一种很简单的分类方法,之所以称之为朴素,是因为它有着非常强的前提条件-其所有特征都是相互独立的,是一种典型的生成学习算法.所谓生成学习算法,是指由训练数据学习联合概率分布P(X,Y),然后 ...

最新文章

  1. “十四五”大数据产业发展锚定3万亿目标
  2. C#中读取xml文件指定节点
  3. RaDirect交换器-搭建环境
  4. 三层架构与设计模式思想部署企业级数据库业务系统开发
  5. 腾讯云再登 KVM 开源贡献榜,Linux 虚拟化技术将走向何方?
  6. 第四章(数组) 编程题 1
  7. nginx 配置入门 进行跨域
  8. 宇宙质量估算为10^53KG
  9. Atitit 计算机的组成与设计 目录 1. 计算机系统是由硬件系统和软件系统两大部分组成。  1 1.1. Cpu(alu+cu ) 1 1.2. 存储内存 外村 1 1.3. Io设备 鼠标
  10. 用计算机做初中模拟物理实验,仿真物理实验室初中完整版
  11. OpenJudge NOI 2.1 1813:熄灯问题
  12. 【树形DP】保镖排队
  13. sm缩写代表什么意思_在嘉庚,这些缩写都是SM意思???
  14. 适用于高速公路的查询软件,数据稳定、免维护,可查询高速路况、路线规划、未来天气等信息
  15. rancher部署安装好后,无法部署pod
  16. Cura切片3d打印设置
  17. 前端实现图片快速反转替换_在canvas上实现元素图片镜像翻转动画效果的方法
  18. 【BLE】蓝牙Profile
  19. linux 命令运行kodi,在Ubuntu/Debian/Raspbian中安装Kodi for Linux的方法
  20. camera接口---MIPI CSI-2接口、DVP接口和FPD-Link III LVDS、GMSL等接口对比(转)

热门文章

  1. PostgreSQL hint用法(兼容oracle)
  2. Doves and bombs UVA - 10765
  3. texlive写论文源代码_使用Latex写论文
  4. K-近邻算法(分类算法)
  5. 神经网络的基本原理,神经网络算法三大类
  6. python自动获取号码归属地_Python批量获取并保存手机号归属地和运营商的示例
  7. matlab报错之未定义与 ‘double‘ 类型的输入参数相对应的函数 ‘tf‘
  8. 用python画函数图像
  9. Excel 2010 SQL应用116 分组统计之GROUP BY续
  10. android 模拟工具 mac,夜神模拟器mac版-夜神安卓模拟器Mac版下载 V3.8.5.5-PC6苹果网...