贝叶斯算法详解和拉普拉斯平滑
简介
贝叶斯定理是18世纪英国数学家托马斯·贝叶斯(Thomas Bayes)提出得重要概率论理论。以下摘一段 wikipedia 上的简介:
所谓的贝叶斯定理源于他生前为解决一个“逆概”问题写的一篇文章,而这篇文章是在他死后才由他的一位朋友发表出来的。在贝叶斯写这篇文章之前,人们已经能够计算“正向概率”,如“假设袋子里面有 N 个白球,M 个黑球,你伸手进去摸一把,摸出黑球的概率是多大”。而一个自然而然的问题是反过来:“如果我们事先并不知道袋子里面黑白球的比例,而是闭着眼睛摸出一个(或好几个)球,观察这些取出来的球的颜色之后,那么我们可以就此对袋子里面的黑白球的比例作出什么样的推测”。这个问题,就是所谓的逆向概率问题。
贝叶斯定理的思想出现在18世纪,但真正大规模派上用途还得等到计算机的出现。因为这个定理需要大规模的数据计算推理才能凸显效果,它在很多计算机应用领域中都大有作为,如自然语言处理,机器学习,推荐系统,图像识别,博弈论等等。
定义
P(A)是 A 的先验概率,之所以称为“先验”是因为它不考虑任何 B 方面的因素。
P(A|B)是已知 B 发生后 A 的条件概率,也由于得自 B 的取值而被称作 A 的后验概率。
P(B|A)是已知 A 发生后 B 的条件概率,也由于得自 A 的取值而被称作 B 的后验概率。
P(B)是 B 的先验概率,也作标淮化常量(normalizing constant)。
后验概率 = (相似度 * 先验概率)/标淮化常量
另外,比例P(B|A)/P(B)也有时被称作标淮相似度(standardised likelihood),Bayes定理可表述为:
后验概率 = 标淮相似度 * 先验概率
条件概率就是事件 A 在另外一个事件 B 已经发生条件下的发生概率。条件概率表示为P(A|B),读作“在 B 发生的条件下 A 发生的概率”。
联合概率表示两个事件共同发生(数学概念上的交集)的概率。A 与 B 的联合概率表示为。
推导
根据条件概率的定义,在事件 B 发生的条件下事件 A 发生的概率为:
这个引理有时称作概率乘法规则。上式两边同除以 P(A),若P(A)是非零的,我们可以得到贝叶斯定理:
解释
通常,事件 A 在事件 B 发生的条件下的概率,与事件 B 在事件 A 发生的条件下的概率是不一样的;然而,这两者是有确定关系的,贝叶斯定理就是这种关系的陈述。
示例
示例一:应当根据新情况更新先验概率
假设有两个各装了100个球的箱子,甲箱子中有70个红球,30个绿球,乙箱子中有30个红球,70个绿球。假设随机选择其中一个箱子,从中拿出一个球记下球色再放回原箱子,如此重复12次,记录得到8次红球,4次绿球。问题来了,你认为被选择的箱子是甲箱子的概率有多大?
调查结果显示,大部分人都低估了选择的是甲箱子的概率。根据贝叶斯定理,正确答案是96.7%。下面容我来详细分析解答。
刚开始选择甲乙两箱子的先验概率都是50%,因为是随机二选一(这是贝叶斯定理二选一的特殊形式)。即有:
P(甲) = 0.5, P(乙) = 1 - P(甲);
这时在拿出一个球是红球的情况下,我们就应该根据这个信息来更新选择的是甲箱子的先验概率:
P(甲|红球1) = P(红球|甲) × P(甲) / (P(红球|甲) × P(甲) + (P(红球|乙) × P(乙)))
P(红球|甲):甲箱子中拿到红球的概率
P(红球|乙):乙箱子中拿到红球的概率
因此在出现一个红球的情况下,选择的是甲箱子的先验概率就可被修正为:
P(甲|红球1) = 0.7 × 0.5 / (0.7 × 0.5 + 0.3 × 0.5) = 0.7
即在出现一个红球之后,甲乙箱子被选中的先验概率就被修正为:
P(甲) = 0.7, P(乙) = 1 - P(甲) = 0.3;
如此重复,直到经历8次红球修正(概率增加),4此绿球修正(概率减少)之后,选择的是甲箱子的概率为:96.7%。
我写了一段 Python 代码来解这个问题:
计算选择的是甲箱子的概率
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
在这个调查问题里面,8次红球与4次绿球出现的顺序并不重要,因为红球的出现总是使选择的是甲箱子的概率增加,而绿球的出现总是减少。因此,为了简化编程,我将红球出现的情况以及绿球出现的情况摆在一起了。
程序运行结果如下:
不断修正的选择的是甲箱子的先验概率
1 2 3 4 5 6 7 8 9 10 11 12 |
|
从程序运行结果来看,很明显可以看到红球的出现是增加选择甲箱子的概率,而绿球则相反。
示例二:频率更适合用来解答概率问题
《进化心理学》第十三章(428页)讲到人类的心理从进化角度来看,更偏好使用频率(我最近十次打猎八次有收获)而不是概率(我最近打猎有80%的成功率)。
书中举了同一个问题用不同方式表述使得问题的难易程度迥然不同:
表述一:有一种疾病的发病率是千分之一,医院有一种化验技术可以对这种疾病进行诊断,但是却又百分之五的误诊率(也即是说尽管有百分之五的人没有病,但是化验结果却显示为阳性(即假阳性))。现在假设一个人的化验结果显示为有病,仅根据这一化验结果推测,那么这个人确实患病的概率有多大?
这个问题也可以用贝叶斯定理来解决,不过在看分析之前,你可以先估算下你自己的答案,然后再和正确答案比较。
这个问题的分析过程如下:
已知先验概率:P(患病) = 0.001,P(正常) = 0.999;
该化验技术的准确率(即患病化验结果显示为阳性的概率)为:P(准确率) = 1.00;
该化验技术的误诊率(即正常化验结果显示为阳性的概率)为:P(误诊率) = 0.05。
根据上面的数据,我们就能够推测出一个人化验为阳性的情况下,这个人确实患病的概率有多大:
P(患病|阳性) = P(患病) × P(准确率) / (P(患病) × P(准确率) + P(正常) × P(误诊率))
= 0.001 × 1.00 / (0.001 × 1.00 + 0.999 × 0.05)
= 0.0198
= 2%
结果让你大吃一惊吧,在没有其他症状增加患病概率的情况下,单凭化验结果显示为阳性来推测的话,其真实患病的概率还不到百分之二。
用频率作为信息来记忆或回忆更生动也更容易被提取,想想第一次打猎什么情形,第二次打猎什么情形,历历在目。正因为频率作为信息存储载体保留了事件的形象性,提高了记忆的可得性,因此在进化过程中人类的心理机制优先选择了频率而不是抽象的概率。而且在人类十多万年的进化过程中,出现概率概念的文明进程不过几千年,大脑还没有对进化到更适应抽象的概率的地步。
所以这个问题如果换成用频率来表述的话,相信你的答案会大大接近于正确答案。
表述二:在一千个人中,就有一个人患有X疾病(即发病率为千分之一),有一种化验技术,可以检验是否患有该疾病。如果一个人确实患有该病,化验结果可定显示为阳性。但有时候也会出现误诊,即在一千个完全健康的人中,有五十个人的化验结果显示为阳性(也即是说误诊率为百分之五)。
换成以频率方式来表述这个问题,答案就显然易见了:
P(患病|阳性) = 1/(1 + 50) = 1/51 = 0.0196 = 2%
通过这个例子,我们可以懂得,若能把概率问题转换成频率来表述,即便是需要使用贝叶斯这样复杂定理来计算的问题,也能轻而易举地解答。这就是《你的灯亮着么?》里面提到的“重述问题”的技巧。
示例三:在博弈论里面的应用
博弈开始时,B 认为 A 属于高阻挠成本企业的概率为70%,因此,B 估计自己在进入市场时,受到 A 阻挠的概率为:
P(阻挠) = 0.7 × 0.2 + 0.3 × 1.0 = 0.44
0.44 是在 B 给定 A 所属类型的先验概率下,A 可能采取阻挠行为的概率。
当 B 进入市场时,若 A 确实进行阻挠。根据贝叶斯定理,从 A 进行阻挠这一行为,B 可修正 A 属于高阻挠成本企业的概率为::
P(高成本阻扰企业) = 0.7 × 0.2 ÷ 0.44 × 1.0 = 0.32
根据这一新的先验概率,B 估计自己在进入市场时,受到 A 阻挠的概率为:
P(阻挠) = 0.32 × 0.2 + 0.68 × 1 = 0.744
若 B 再一次进入市场时,A 又进行了阻挠。根据贝叶斯定理,从 A 再次进行阻挠这一行为,B 可修正 A 属于高阻挠成本企业的概率为
P(高成本阻扰企业) = 0.32 × 0.2 ÷ 0.744 × 1.0 = 0.086
这样,根据 A 一次又一次的阻挠行为,B 不断修正判断 A 为高阻挠成本的概率(越来越低了),从而越来越倾向于将 A 判断为低阻挠成本企业。
徐宥翻译过 Peter Norvig 写的一篇怎样写一个拼写检查器的文章,作者只用了 20 行 Python 代码就实现了拼写检查/纠错,相当强大。文章也写得深入浅出,推荐看看,翻译版本在这里。
原文:http://blog.csdn.net/kesalin/article/details/40370325
贝叶斯算法详解和拉普拉斯平滑相关推荐
- 朴素贝叶斯算法详解及python代码实现
朴素贝叶斯算法 算法原理 对数据的要求 算法的优缺点 算法需要注意的点 算法实现(python)(待更.......) 算法原理 P(Ck∣xi)=p(xi∣ck)∗p(ck)p(xi)=p(x1∣c ...
- 【机器学习】贝叶斯算法详解 + 公式推导 + 垃圾邮件过滤实战 + Python代码实现
文章目录 一.贝叶斯简介 二.贝叶斯公式推导 三.拼写纠正案例 四.垃圾邮件过滤案例 4.1 问题描述 4.2 朴素贝叶斯引入 五.基于朴素贝叶斯的垃圾邮件过滤实战 5.1 导入相关库 5.2 邮件数 ...
- 朴素贝叶斯 php,PHP实现机器学习之朴素贝叶斯算法详解.pdf
PHP实实现现机机器器学学习习之之朴朴素素贝贝叶叶斯斯算算法法详详解解 本文实例讲述了PHP实现机器学习之朴素贝叶斯算法.分享给大家供大家参考 具体如下: 机器学习已经在我们的生活中变得随处可见了.比 ...
- 机器学习之朴素贝叶斯算法详解
文章目录 一. 朴素贝叶斯 1.概率基础知识: 2.朴素贝叶斯模型流程: ①计算流程: ②三个阶段: 3.拉普拉斯平滑 二. 半朴素贝叶斯分类器 概念 三.朴素贝叶斯的面试题 一. 朴素贝叶斯 1.概 ...
- 【学习记录】贝叶斯滤波详解
贝叶斯滤波详解 贝叶斯滤波的用途(Bayesian Filtering): 贝叶斯滤波理论的应用可谓十分广泛.我们知道,在机器人运动过程中,有两个方面的信息来源,一个是通过我们实际控制机器人的运动路线 ...
- 机器学习最易懂之贝叶斯模型详解与python实现
文章目录 0.预备知识 0.1 先验概率.条件概率.后验概率 0.2 贝叶斯公式 0.3 极大似然估计 0.4 生成模型与判别模型 1.朴素贝叶斯模型 1.1 朴素贝叶斯的符号说明 1.2 朴素贝叶斯 ...
- 图解机器学习算法(13) | 聚类算法详解(机器学习通关指南·完结)
作者:韩信子@ShowMeAI 教程地址:https://www.showmeai.tech/tutorials/34 本文地址:https://www.showmeai.tech/article-d ...
- 机器学习算法(7)—— 朴素贝叶斯算法
朴素贝叶斯算法 1 朴素贝叶斯介绍 2 贝叶斯公式 3 拉普拉斯平滑系数 4 朴素贝叶斯api使用 5 朴素贝叶斯算法总结 5.1 朴素贝叶斯优缺点 5.2 朴素贝叶斯疑难点 5.3 与逻辑回归的区别 ...
- 机器学习——朴素贝叶斯算法(垃圾邮件分类)
朴素贝叶斯算法介绍以及垃圾邮件分类实现 1.一些数学知识 2.贝叶斯公式 3.朴素贝叶斯算法 (1)介绍 (2)核心思想 (3)朴素贝叶斯算法 (4)拉普拉斯修正 (5)防溢出策略 (6)一般过程 ( ...
- 朴素贝叶斯算法和拉普拉斯平滑详细介绍及其原理详解
相关文章 K近邻算法和KD树详细介绍及其原理详解 朴素贝叶斯算法和拉普拉斯平滑详细介绍及其原理详解 决策树算法和CART决策树算法详细介绍及其原理详解 线性回归算法和逻辑斯谛回归算法详细介绍及其原理详 ...
最新文章
- Flutter开发之名篇及demo收录
- 乱码问题引申 python 中string和unicode
- Eclipse 增加打开文件路径功能
- 使用CLion的时候,对于cmake的使用
- python分布式事务_分布式事务的管理--atomikos
- Android应用程序管理系列(一)——管理对象封装概述
- 《人月神话》阅读笔记一
- 至商3000服务器信息,至商3000软件
- python运算优先级
- Httpx:针对HTTP的安全研究工具
- (附源码)计算机毕业设计SSM基于Java网络游戏后台管理系统
- 【Inpho精品教程】任务一:Inpho预处理准备(Pix4d生成未畸变图像、Pix4d生成相机参数文件)
- 雷达作用距离、干扰距离、侦查距离
- RoadRunner软件初步使用教程
- CSS基础——看这一篇就够了
- GBASE应用 | “天擎”出鞘 GBase 8a助力气象行业进入大数据时代
- 【Opencv实战】纯手工代码打造车牌检测程序,秒变智能检测你值得拥有~(附源码)
- 身份证核验、实名认证接口助力实名制
- 三分钟教会你用Python爬取心仪小姐姐图片
- tableau能导出HTML吗,将视图从 Tableau Desktop 导出到另一个应用程序