朴素贝叶斯分类器可以说是最经典的基于统计的机器学习模型了。首先,暂且不管贝叶斯是什么意思,朴素这个名字放在分类器中好像有所深意。

一查,发现这个分类器的英文是“Naïve Bayes”。Naïve(读作“哪义务”)即幼稚的、天真的(但是总不能叫“幼稚贝叶斯”阿),Bayes即贝叶斯。那么这里的naïve是什么意思呢?其实就是代表着简化问题复杂度,像一个小孩子一样,不考虑复杂的东西。

一句话描述naïve就是“特征独立性假设”。详细的说,这里的独立性有两个意思,一个是“条件独立性“,一个是“位置独立性”,分别是什么意思呢?

如果我们要识别一个人的肖像,要用到“身高”和“体重”这两个特征。然而“身高”和“体重”明明是有关系的,身高1米8的人是不太能体重低于100斤的,但是在朴素贝叶斯分类器的眼里,身高和体重没有关系。这个例子的数学表达就是P(B|A)=P(A)*P(B),意思即特征A与特征B相互独立(毫无关系)。这种假设就叫“条件独立性假设”。

位置独立性的意思是先考虑特征A再考虑特征B,跟先考虑特征B再考虑特征A所带来的结果是完全一样的。很好理解,比如在文本挖掘中,“我|喜欢|狗”中有三个特征,分别是“我”“喜欢”“狗”,如果我们按照先后顺序来考虑这三个特征的话,就能得出你喜欢狗这个事实。但是如果按照“狗”“喜欢”“我”这样的顺序的话,得到的意思就完全变了。显然,这里各个特征之间的先后顺序,即位置是很重要的。然而,朴素贝叶斯的假设就是位置之间是独立的,即毫无关系的。因此在朴素贝叶斯看来,“我|喜欢|狗”与“狗|喜欢|我”是同一个分类任务。

好,朴素的意思我们懂了,那么核心就是贝叶斯了。

显然,在统计理论中,与贝叶斯最相关的就是贝叶斯定理,也叫贝叶斯公式。不用管能不能看懂,先贴公式:

这个公式看似有点绕,其实如果我们把公式里的A看作我们已经知道的特征的值,(注意这里我们仅仅考虑一个特征,即仅考虑用一个特征对目标进行分类的任务)把B看作分类目标的一个类别,就会发现非常非常简单啦。所以呢,这个公式的意思就是,已知特征的值为A的情况下,目标类别为B的概率(P(B|A))就等于已知目标类别是B的情况下,特征的值为A的概率(P(A|B))乘以什么都不知道的情况下,目标类别为B的概率(P(B),专业说法叫B的先验概率),再除以什么都不知道的情况下,特征的值为A的概率。

诶?细心的读者有没有发现什么呢?相信此时肯定已经有人激动了!我们这里看一个栗子。

就是这个栗子。

哈哈,是下面的栗子啦。

假如小夕捕获了一批鱼,这批鱼中只有黑鱼和三文鱼。虽然小夕并不认识这两种鱼,但是小夕有设备可以测量出每条鱼肚皮的亮度等级(比如最白为10级,最黑为1级。然后有一位好心的粉丝送给了小夕一批标好类别的黑鱼和三文鱼。那么小夕借助上面这些已经知道的东西,用朴素贝叶斯分类器来给小夕捕的那些鱼的类别贴标签,怎么做呢?

诶?这里不是说鱼肚皮的亮度等级都能测出来嘛?那鱼肚皮的亮度等级不就是一个特征咯,每条鱼测出来的亮度等级不就是特征的值嘛。有没有灵光一现?

对!还记得贝叶斯定理的等式左边的P(B|A)的意思吗?假如某条鱼测得的亮度等级为2,那么我们只需要计算并比较 P(类别=黑鱼|特征=2) 与 P(类别=三文鱼|特征=2) 的大小不就可以啦!肯定是值更大的,也就是概率更大的,就是我们要输出的类别呀!专业说法叫取最大后验概率。

那么怎么计算呢?显然就是用等式右边那三坨(噗,好不文明的说)。为了方便阅读,在这里再贴一遍。

首先,这三坨中,除号底下的P(A)代表特征取某值的概率,然而我们要预测某一条鱼的类别,显然这条鱼的特征的值我们已经知道了,即定值,因此不管是求 P(类别=黑鱼|特征=2) 也好,求 P(类别=三文鱼|特征=2) 也好, P(A) 是相同的值,对于比较这两个概率的大小没有任何帮助。因此干脆不计算了。

然后,这三坨中的 P(B) 代表 P(类别取某类) ,也就是某类别的先验概率,怎么计算得到呢?还记得粉丝给了小夕一堆鱼吗?那我们直接用这一堆鱼来近似得到 P(B) 不就可以啦!

(按照概率论的大数定律的意思,当样本足够多时,样本的统计比率就可以近似真实概率。回想一下抛10000次均匀硬币时会有接近5000次正面向上,由此得到正面向上的概率为0.5)
因此,假如粉丝给了小夕10000条鱼,其中3000条是黑鱼,7000条是三文鱼,那显然 P(黑鱼)=3000/10000=0.3 ,同理 P(三文鱼)=0.7 。看,P(B) 解决了吧。

三坨中的最后一坨, P(A|B) ,也就是 P(特征为某值|已知类别为某类) 怎么得到呢?也很轻松啊,同样是利用粉丝给的10000条鱼,小夕用设备将这10000条鱼的亮度等级测出来后,只需要从每个类别的鱼群中,统计一下特征的每个取值下的鱼占该类别的鱼总数的比率就好啦。

比如黑鱼有3000条,其中亮度等级为8的鱼一共有1000条,那么 P(特征=8|类别=黑鱼)=1000/3000=0.3 。同理可以得到其他 P(A|B) 的值啦。

至此,等式右边全都解决了,因此等式左边也能算出来了。所以对于下面这种情况的话(粉丝给了小夕100来条鱼):

小夕做好的朴素贝叶斯分类器肯定会将亮度等级小于x*的鱼都认为是三文鱼(在此情况下,类别判定为三文鱼的概率总是比黑鱼的概率大),反之都认为是黑鱼。

那么我们也发现了,诶?这样的话,对于亮度等级为4-7之间的鱼,很难判定呀。怎么办呢?当然是增加特征啦!比如小夕又买了个尺子,可以测量鱼身的长度。

诶?那两个特征的情况下,怎么做呢?还记得本文开头时提到的独立性假设吗,就在这里派上用场了。对于多个特征的情况,只需要分别计算出每个特征的情况,然后将这些情况直接相乘就ok了~

也就是假设A为特征集合,包含M和N这两个特征,那么只需要将等式右边的这个 P(A|B) 展开成 P(M|B)*P(N|B) 就可以啦,也就是只需要在代码里迭代一下可以啦。看吧,naïve一点是可以避免很多麻烦的。

加上鱼长这个特征后,可能就成这样子了。

看,一下子好分多了吧~这样出来的朴素贝叶斯分类器的精度就高多啦。至此小夕成功完成了拣鱼任务!

喜欢小夕的文章可以关注小夕的微信订阅号“夕小瑶的卖萌屋”哦,这里的干货很好吃O(∩_∩)O

0基础讲解机器学习算法-朴素贝叶斯分类器相关推荐

  1. 机器学习算法 - 朴素贝叶斯分类器

    ​ 一.算法简介 1.1 背景 监督学习分为生成模型 (generative model) 与判别模型 (discriminative model) 判别模型:SVM, LR, KNN, NN, CR ...

  2. 【机器学习算法-朴素贝叶斯、支持向量机】

    机器学习算法-朴素贝叶斯算法 1.朴素贝叶斯算法 2.支持向量机 2.1SVM基本综述 1.朴素贝叶斯算法 朴素贝叶斯是生成模型,需要根据已有的数据求出先验概率. 1.联合概率 2.条件概率 3.相互 ...

  3. 机器学习算法——朴素贝叶斯(贝努利模型和多项式模型实现分类)

    朴素贝叶斯算法 0.朴素贝叶斯是贝叶斯决策理论的一部分.之所以称之为"朴素",是因为整个形式化过程只做最原始.最简单的假设. 1.文本分类实例 2.朴素贝叶斯过滤垃圾邮件 3.使用 ...

  4. 基础算法-朴素贝叶斯分类器

    一.算法简介 1.1 背景 监督学习分为生成模型 (generative model) 与判别模型 (discriminative model),贝叶斯方法正是生成模型的代表 (还有隐马尔科夫模型). ...

  5. a*算法的优缺点_轻松理解机器学习算法-朴素贝叶斯

    1.预备知识 贝叶斯定理(Bayes' theorem)是概率论中的一个定理,它跟随机变量的条件概率以及边缘概率分布有关.通常事件A在事件B发生的条件下的概率,与事件B在事件A发生的条件下的概率是不一 ...

  6. 机器学习实验 - 朴素贝叶斯分类器

    目录 一.报告摘要 1.1 实验要求 1.2 实验思路 1.3 实验结论 二.实验内容 2.1 方法介绍 2.2 实验细节 2.2.1 实验环境 2.2.2 实验过程 2.2.3 实验与理论内容的不同 ...

  7. 机器学习实战 朴素贝叶斯分类器

    基于概率论的分类方法: 朴素贝叶斯 我的微信公众号: s406205391; 欢迎大家一起学习,一起进步!!! k-近邻算法和决策树会给出"该数据属于哪一类"的明确回答.不过,分类 ...

  8. 机器学习:朴素贝叶斯分类器,决策函数向量化处理,mask使用技巧

    文章目录 前面实现的朴素贝叶斯分类器,决策函数是非向量化的: 借助于numpy向量化处理,相当于并行计算,注意mask使用技巧,用途较广: 前面实现的朴素贝叶斯分类器,决策函数是非向量化的: 前面提到 ...

  9. 机器学习算法-朴素贝叶斯

    一.概述 概率分类器 在许多分类算法应用中,特征和标签之间的关系并非是决定性的.比如说,我们想预测一个人究竟是否会在泰坦尼克号海难中生存下来,那我们可以建一棵决策树来学习我们的训练集.在训练中,其中一 ...

最新文章

  1. windows平台 python生成 pyd文件
  2. PAT甲级1007 Maximum Subsequence Sum :[C++题解]DP,最大子序列和、求最优的区间方案
  3. python中enumerate()函数_Python enumerate() 函数
  4. 【图论】【最短路】【SPFA】香甜的黄油 Sweet Butter (luogu 1828)
  5. Mac 键盘符号整理
  6. 【kafka】Apache Kafka 0.11版本新功能简介
  7. 关于小微商户反欺诈监控指标的内容参考
  8. modbus_tk与Modubs Slave结合使用
  9. linux内核设计与实现 epub_mongodb内核源码设计实现、性能优化、最佳运维系列-网络传输层模块源码实现四...
  10. HDU1877 又一版 A+B【进制】
  11. 【Objective-C】08-self关键字
  12. LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)...他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话(简单易懂)
  13. Hello,CNDS!(第一次博客)
  14. java调用webService方法
  15. npm安装依赖包 版本冲突怎么办 --legacy-peer-deps的正确使用方
  16. openfire4.2.1 + smack4.2.2即时通信工具开发(android端登录、发送消息、接收消息)
  17. App云测试平台有哪些?
  18. 一个字节8位,无符号类型,最大值为什么是2的8次方-1,范围0-255
  19. Apache Marmony
  20. MySQL 8.0安装教程

热门文章

  1. 【dll 返回字符串 】2
  2. bitmap 转 drawable
  3. 排序算法之希尔排序(Java)
  4. Linux内核LED子系统、请务必看
  5. gpg96244qs1屏驱动起来了
  6. python网络编程证书_python 网络编程——客户端
  7. 【Pytorch神经网络实战案例】21 基于Cora数据集实现Multi_Sample Dropout图卷积网络模型的论文分类
  8. java excel 模板 替换_JAVA POI替换EXCEL模板中自定义标签(XLSX版本)满足替换多个SHEET中自定义标签...
  9. React中的fragment和StrictMode
  10. Express Session 的基本使用