微信搜索:“二十同学” 公众号,欢迎关注一条不一样的成长之路

我个人认为,在数据挖掘领域,分类算法是最为重要。它根据以往的数据来对新的数据做预测。垃圾邮件判断,潜在用户挖掘等都会用到分类算法。今天把总结朴素贝叶斯算法(NaiveBayes)的学习心得。

Bayes是谁
Thomas Bayes,英国数学家。约1701年出生于伦敦,做过神甫。1742年成为英国皇家学会会员。1761年4月7日逝世。贝叶斯在数学方面主要研究概率论。他首先将归纳推理法用于概率论基础理论,并创立了贝叶斯统计理论,对于统计决策函数、统计推断、统计的估算等做出了贡献。

Bayes定理
通俗来说就是:
已知事件B的发生概率P(B)
已知在事件B已经发生的情况下,事件A发生的概率P(A|B)
则可根据Bayes定理,计算事件A发生的条件下,事件B发生的概率P(B|A)。
计算方法为:
P(B|A)=P(A|B)× P(B)/ P(A)

NaiveBayes分类算法实例
门诊部一共就诊了6位患者,情况如下:

这时,来了第七位患者,一位“打喷嚏的工人”,请推断他得了啥病。

这就是一个分类问题。现状把所有患者分成了三类“感冒”“过敏”“脑震荡”,我们的目的是把“打喷嚏的工人”分到这三类中的一类中。具体做法为:根据Bayes定理,计算这个“打喷嚏的工人”患三种疾病的概率。

P(感冒|打喷嚏&工人)
= P(打喷嚏&工人|感冒)×P(感冒) / P(打喷嚏&工人)
= P(打喷嚏|感冒)× P(工人|感冒)× P(感冒) / P(打喷嚏)× P(工人)
= (2/3 × 1/3 × 1/2)/ (1/2 × 1/3)
= 66.7%

解释:

  • '&'项可以分成两个,是因为“症状”变量和“职业”变量是相互独立的,没什么联系
  • 感冒的有3个,其中打喷嚏的2个,所以P(打喷嚏|感冒)=2/3
  • 感冒的有3个,其中工人1个,所以P(工人|感冒)=1/3
  • 一共六个人,感冒3个,所以P(感冒)=1/2
  • 一共六个人,打喷嚏的3个,所以P(打喷嚏)=1/2
  • 一共六个人,其中工人2个,所以P(工人)=1/3

按照这个方法,计算“打喷嚏的工人”另外两种疾病的概率;

P(过敏|打喷嚏&工人)
= P(打喷嚏&工人|过敏)×P(过敏) / P(打喷嚏&工人)
= P(打喷嚏|过敏)× P(工人|过敏)× P(过敏) / P(打喷嚏)× P(工人)
= (1 × 0 × 1/6)/ (1/2 × 1/3)
= 0%
P(脑震荡|打喷嚏&工人)
= P(打喷嚏&工人|脑震荡)×P(脑震荡) / P(打喷嚏&工人)
= P(打喷嚏|脑震荡)× P(工人|脑震荡)× P(脑震荡) / P(打喷嚏)× P(工人)
= (0 × 1/2 × 1/3)/ (1/2 × 1/3)
= 0%

可见,“打喷嚏的工人”患感冒概率66.7%,初步判断应该是感冒。但是一般的分类器都要根据具体业务设置阈值,对于人命关天的事,最好严格一些,比如95%以上才做出判断,那么这里最好的答案应该是“机器无法判断,建议去让医生看看”。

补充说明

  • 算法叫做朴素贝叶斯(NaiveBayes),是因为算法是在太简单了
  • ‘&’能分开两个概率相乘是因为变量的独立性,如果不独立的话,这样计算会有误差
  • 分母项 P(打喷嚏)× P(工人)在每次计算中都一样,可以只互相比较分子计算的结果作出判断
  • 例子中最初的6个病人的数据叫做训练集

训练集样本较小情况下的概率调整
P(打喷嚏|过敏)和P(工人|过敏)分别为1,0,实际中不可能是这样的,因为没有什么是一定不发生,也没有什么100%发生。出现这种情况是因为我们的样本太少,如果样本足够多,概率会相对靠谱。
在起步阶段,样本就是很少,为了避免0,1这种极端概率,需要人为做一些数学变换。
比如,对过敏来说,每个症状的初始概率都为50%,当来了一个过敏病人,如果出现打喷嚏,那么P(打喷嚏|过敏)的概率就提升一点点,反之如果不打喷嚏,则P(打喷嚏|过敏)的概率就下降一点点。
这样使得每一个概率都变得在(0,1)之间平滑变化,对其他的变量也这样处理。
在《Programming Collective Intelligence》这本书中给出了这个变换的公式,我套用到过敏来说就是:

P(打喷嚏|过敏)调整 =(1×0.5 + 打喷嚏数 × P(打喷嚏|过敏)) / (1+打喷嚏数)
所以调整后的概率为:
P(打喷嚏|过敏)调整 = (0.5 + 3 ×1 )/(1+3 )=87.5%
P(工人|过敏)调整 = (0.5 + 2 ×0)/ (1+2)=16.7%

所以,在上例中计算第二种疾病的时候,如果用调整后的概率结果如下:

P(过敏|打喷嚏&工人)
= P(打喷嚏&工人|过敏)×P(过敏) / P(打喷嚏&工人)
= P(打喷嚏|过敏)× P(工人|过敏)× P(过敏) / P(打喷嚏)× P(工人)
= (87.5% × 16.7% × 1/6)/ (1/2 × 1/3)

= 14.6%

连续变量处理
对于上例来说,不论是职业还是症状,都是离散变量,也就是取值数有限,这样都可以通过数个数的方式来计算概率(古典概率模型),但是如果出现连续型变量就不能靠数个数了,比如身高,可以有175cm 176cm 176.1cm 176.11cm,无穷尽……

  1. 处理方式一:离散化
    身高来说,可以就精确到cm,那么基于现实世界从40cm(婴儿)到230cm(姚明)基本就够用了,可以数个数。要么就分段【小于100cm】【100-150cm】【150-180cm】……这样也可以。
  2. 处理方式二:利用变量的分布来计算概率
    一般来说自然界中的大部分变量都是符合正态分布的,正态分布是一个钟型曲线,概率意义是,一次实验取到均值附近概率最大,去到远离均值的值的概率越来越小。那么可以计算样本的均值和标准差,利用Z值【(实际值-均值)/标准差】,查标准正态分布表,查出取到每个样本值的概率。
    当然,如果明确知道变量属于某个其他分布,如泊松分布,那么就直接用分布函数求概率即可。

数学表达以备装B之需

非常感谢:点赞收藏评论

微信搜索:“二十同学” 公众号,或者直接扫一扫,关注一条不一样的成长之路

数据挖掘-朴素贝叶斯算法相关推荐

  1. 数据挖掘-朴素贝叶斯算法的R实现

    本次为学生时期所写的实验报告,代码程序为课堂学习和自学,对网络程序有所参考,如有雷同,望指出出处,谢谢! 基础知识来自教材:李航的<统计学习方法> 本人小白,仍在不断学习中,有错误的地方恳 ...

  2. 基于.NET实现数据挖掘--朴素贝叶斯算法

    本篇文章主要是继续上两篇Microsoft决策树分析算法和Microsoft聚类分析算法后,采用另外更为简单一种分析算法对目标顾客群体的挖掘,同样的利用微软案例数据进行简要总结.有兴趣的同学可以先参照 ...

  3. 数据挖掘之朴素贝叶斯算法

    1.贝叶斯公式推理: A和B是两个事件,在B发生的条件下,A发生的条件概率记为 条件概率:  (1) 条件概率:  (2) (2)式得将其代入(1)得到贝叶斯公式: 可以写为 表示没有使用数据来训练分 ...

  4. 【朴素贝叶斯】深入浅出讲解朴素贝叶斯算法(公式、原理)

    本文收录于<深入浅出讲解自然语言处理>专栏,此专栏聚焦于自然语言处理领域的各大经典算法,将持续更新,欢迎大家订阅! ​个人主页:有梦想的程序星空 ​个人介绍:小编是人工智能领域硕士,全栈工 ...

  5. 文本分类(朴素贝叶斯算法)

    一.贝叶斯定理引入 1.朴素贝叶斯:   朴素贝叶斯中的朴素一词的来源就是假设各特征之间相互独立.这一假设使得朴素贝叶斯算法变得简单,但有时会牺牲一定的分类准确率. 2.贝叶斯公式: 3.换成分类任务 ...

  6. 朴素贝叶斯算法与应用实例

    本文为转载博客,转自: http://www.cnblogs.com/marc01in/p/4775440.html 引 和师弟师妹聊天时经常提及,若有志于从事数据挖掘.机器学习方面的工作,在大学阶段 ...

  7. python贝叶斯算法的论文_朴素贝叶斯算法从入门到Python实践

    1,前言 很久不发文章,整理些干货,希望相互学习吧.进入主题,本文主要时说的为朴素贝叶斯分类算法.与逻辑回归,决策树一样,是较为广泛使用的有监督分类算法,简单且易于理解(号称十大数据挖掘算法中最简单的 ...

  8. 朴素贝叶斯算法实现 豆瓣Top250电影评价的情感分析与预测。​

    前言 本文使用朴素贝叶斯算法实现 豆瓣Top250电影评价的情感分析与预测. 最近在学习自然语言正负面情感的处理问题,但是绝大部分能搜索到的实践都是Kggle上IMDB影评的情感分析. 所以在这里我就 ...

  9. 机器学习(8)朴素贝叶斯算法(20条新闻分类)

    目录 一.基础理论 二.实战:20条新闻分类 1.读取数据 2.训练集划分 3.特征工程(文本特征提取) 4.朴素贝叶斯算法训练 5.模型评估 方法一:预测值与真实值比对 方法二:计算准确率 总代码 ...

最新文章

  1. html文字垂直居中_文字垂直居中
  2. 原创 | R的基础及进阶数据可视化功能包介绍
  3. opencv和HALCON坐标系的不同
  4. Redis 高级教程 Redis 基准(3)
  5. ubuntu 图形化更换apt源
  6. tomcat7+nginx+memcached 配置tomcat 集群以及负载均衡
  7. pku 3159 Candies 差分约束
  8. mysql多实例访问代理_MySql-Proxy之多路结果集归并
  9. 嵌入式论文3000字_SCI英文论文一般多少字
  10. Win7有多条隧道适配器(isatap、teredo、6to4)的原因及关闭方法
  11. kafka原理_P8架构师带你参透Kafka:设计原理、消息存储、消息消费原理等等
  12. BZOJ1298:[SCOI2009]骰子的学问
  13. NYOJ-水池数目(bfs)
  14. 20.案例实战:为@Async实现一个自定义线程池
  15. python打印tensor_如何在TensorFlow中打印SparseTensor内容?
  16. iTextSharp笔记
  17. uniapp scroll-view组件横向滚动不生效
  18. JAVA中无法加载主类什么意思_找不到或无法加载主类什么意思?
  19. 《Python程序设计(第3版)》[美] 约翰·策勒(John Zelle) 第 9 章 答案
  20. VB.Net实现身份证读卡器调用读取身份证信息和社保卡信息

热门文章

  1. IT在计算机语言是什么意思,什么是编程语言?编程语言都有哪些?以及主要用途...
  2. matlab选址与GIS选址,ArcGIS入门教程(13)——多条件学校选址分析
  3. java 幻影_Java之抽象
  4. vue 报错avoid mutating a prop directly since the value will be overwritten whenever
  5. 字幕滚动效果---非常酷哦
  6. 视频滚动字幕怎么批量添加
  7. 小程序或者公众号授权给第三方平台流程
  8. Android在Manifest里的权限配置
  9. vivo T2什么时候上市 vivo T2配置怎么样
  10. HarmonyOS实现点亮LED