bayes公式与机器学习 - 再从零开始理解

从本科时候(大约9年前)刚接触Bayes公式,只知道P(A|B)×P(B) = P(AB) = P(B|A)×P(A)

到硕士期间,机器学习课上对P(B|A)P(A)冠以“先验概率”,而不知“先验”二字到底从何而来。

再到工作了几年之后重回校园,重新拾起对求知的热情,重新用向小白讲述Bayes公式的态度,让自己对它有最朴素的理解。尽量让像我一样刚入门的小白同学们,能用生活中最朴素的例子找到bayes公式中,“先验”二字的由来。

要理解bayes公式,需从全概率公式讲起:

\[
P(A_i|B)=\frac {P(B|A_i)P(A_i)}{\displaystyle\sum_{j=1}^nP(B|A_j)\times P(A_j)}
\]
其中的全概率公式:
\[
\displaystyle\sum_{j=1}^nP(B|A_j)\times P(A_j) = P(B)
\]

这里,可理解:
\(A_j \rightarrow Class_j\) (这是你样本可能从属的类别)
$B \rightarrow Events \space or \space Data $ (这是你看到的样本的表象)

2.进一步理解

2.1 设有一幅扑克牌(这是一种等概率的情况)

摸到一张J,想知道它属于♥️这一类的概率。
这里,A是现象,是观察到的属性。♥️,♣️,♦️,♠️是对所有除了大王小王外的扑克牌的四个类别。
任务就是要根据现象J,对这张牌进行归类,求这张牌属于♥️这一类的概率。

\[
P(A|B) \text{就是看到J的情况下,属于} \heartsuit \text{的概率}
\]
这是我们要求的量。
\[
P(A|B)=\frac {P(B|A)P(A)}{P(B)}
\]
\(P(B|A)\) - 在已知♥️的牌中,有几个J,显然,1/13

\(P(A)\) - 在整副牌中,红桃出现的概率:13/54

\(P(B)\) - 在整副牌中,J出现的概率:4/54
这里这个P(B)可以是如下公式计算的:
\[
\displaystyle\sum_{j=1}^nP(B|A_j)\times P(A_j) = P(B)
\]
即,\(A_j\)代表的是♥️,♣️,♦️,♠️中的某一个类别。例如,j=1, 我们认为是♥️,则,P(B|A1) = 1/13
P(A1) = 13/54
此时,
\[
P(B|A_1) \times P(A_1) = \frac1{13} \times \frac {13}{54} = \frac{1}{54}
\]
当 j = 1,2,3,4 时,由于这里每个
$
P(B|A_j)
$
都是相等的,所以
\[
P(B) = 4 \times \frac{1}{54} = \frac{4}{54}
\]
所以,上面的P(A|B) 就能算出来了。因为P(B|A) ,P(A) ,P(B)都知道了。

==以上是一个等概率的问题。更一般地,我们要用Bayes公式解决不等概率、根据观察对对象进行分类的问题。==

2.2 设有三棵橘子树(这是更一般的场景)

有甲乙丙三颗橘子树,到了秋收的季节,老农对他们进行采摘。
第一年:

  • 甲橘子树出来的果子多数都偏红,口感好。
  • 乙橘子树出来的果子多数都普通,口感一般。
  • 丙橘子树出来的果子多数都偏黄,口感不好。

果农从此知道P(A), P(A|B), P(B)

第二年:
       新来的果农和老农一起工作,他们拿起一个橘子,要判断这个果子出自甲乙丙三棵果树里的哪一棵。

找一个案例编程实现

  1. 用Bayes公式完成分类任务的例子

todo.. (网上的例子很多了,就不知道何时来todo了,呵呵)

bayes公式 - 再从零开始理解的更多相关文章

  1. 用bayes公式进行机器学习的经典案例

    用bayes公式进行机器学习的经典案例 从本科时候(大约9年前)刚接触Bayes公式,只知道P(A|B)×P(B) = P(AB) = P(B|A)×P(A) 到硕士期间,机器学习课上对P(B|A)P ...

  2. 从零开始理解JAVA事件处理机制(2)

    第一节中的示例过于简单<从零开始理解JAVA事件处理机制(1)>,简单到让大家觉得这样的代码简直毫无用处.但是没办法,我们要继续写这毫无用处的代码,然后引出下一阶段真正有益的代码. 一:事 ...

  3. 最大似然判别法和Bayes公式判别法

    最大似然判别法 Bayes公式判别法

  4. 从零开始理解JAVA事件处理机制(3)

    我们连续写了两小节的教师-学生的例子,必然觉得无聊死了,这样的例子我们就是玩上100遍,还是不知道该怎么写真实的代码.那从本节开始,我们开始往真实代码上面去靠拢. 事件最容易理解的例子是鼠标事件:我们 ...

  5. 从零开始理解JAVA事件处理机制(1)

    “事件”这个词已经被滥用了.正因为“事件”的被滥用,很多人在用到事件的时候不求甚解,依样画葫芦,导致学习工作了很多年,还是不清楚什么是事件处理器.什么是事件持有者.所以,如果你对于Event这个词还是 ...

  6. 再深刻理解下web3.js中estimateGas如何计算智能合约消耗的gas量

    我们可使用web3.js框架的estimateGas函数获得一个以太坊智能合约的Gas估计值 ,通过执行一个消息调用或交易,该消息调用或交易直接在节点的VM中执行,并未在区块链中确认,函数会返回估算使 ...

  7. 从零开始一起学习SLAM | 不推公式,如何真正理解对极约束?

    自从小白向师兄学习了李群李代数和相机成像模型的基本原理后,感觉书上的内容没那么难了,公式推导也能推得动了,感觉进步神速,不过最近小白在学习对极几何,貌似又遇到了麻烦... 小白:师兄,对极几何这块你觉 ...

  8. 【十大算法实现之naive bayes】朴素贝叶斯算法之文本分类算法的理解与实现

    关于bayes的基础知识,请参考: 基于朴素贝叶斯分类器的文本聚类算法 (上) http://www.cnblogs.com/phinecos/archive/2008/10/21/1315948.h ...

  9. 【转】你真的理解Python中MRO算法吗?

    你真的理解Python中MRO算法吗? MRO(Method Resolution Order):方法解析顺序. Python语言包含了很多优秀的特性,其中多重继承就是其中之一,但是多重继承会引发很多 ...

随机推荐

  1. 编译小米mini openwrt

    编译小米mini openwrt 1.下载openwrt源码包:进入要下载保存的文件目录,输入 git clone git://git.openwrt.org/15.05/openwrt.git 2. ...

  2. XE5 Android 开发数据访问手机端 解决乱码的办法 [转]

    经过测试,将sqlserver里的字段由varchar 或者char  改为  nvarchar 或者nchar 然后在手机端的clientdataset 增加字段的时候数据类型选择widestrin ...

  3. [NEWS]Microsoft expands partnerships with AOL and AppNexus, Bing to power search for AOL properties

    http://advertising.microsoft.com/en/blog/33906/microsoft-expands-partnerships-with-aol-and-appnexus- ...

  4. Winform 实现无边框窗体移动功能

    #region 窗体移动 [DllImport("user32.dll")] public static extern bool ReleaseCapture(); [DllImp ...

  5. %cd% 与 %~dp0% 区别

    @echo off echo path:%~dpnx0% ipconfig /all|findstr "\<IPv4 适配器\>" %cd%  在批处理和命令窗口都能使 ...

  6. IDE0022 使用方法的表达式主体

    这错误提示意思应该是:推荐您将此方法改为用“表达式主体”形式实现 所谓表达式主体,是类似 public void DisplayName() => Console.WriteLine(ToStr ...

  7. 不可小视的String字符串

    String印象 String是java中的无处不在的类,使用也很简单.初学java,就已经有字符串是不可变的盖棺定论,解释通常是:它是final的. 不过,String是有字面量这一说法的,这是其他 ...

  8. 【java】之类加载机制

    类加载: 类加载机制是指.class文件加载到jvm,并形成Class对象的机制,之后的应用就可对Class对象进行实例化并调用,类加载机制可在运行时动态加载外部的类,远程网络下载过来的class文件 ...

  9. 基于Kafka消息驱动最终一致事务(一)

    基本可用软状态最终一致事务 本用例分两个数据库分别是用户库和交易库,不使用分布式事务,使用基于消息驱动实现基本可用软状态最终一致事务(BASE).现在说明下事务逻辑演化步骤,尊从CAP原则,即分布式系 ...

  10. python列表中的值转换为字符串,及列表里的所有值拼接成一个字符串 的方法

    后记: ls3='%'.join(ls2) 会把%加入拼接成的字符里面,同理,加入其它字符也一样,''空就是什么都不加,如上图 最后输出 1%我%22