程序员的数学基础课
黄申
LinkedIn资深数据科学家
立即订阅
23391 人已学习
课程目录
已完结 57 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 作为程序员,为什么你应该学好数学?
免费
导读 (1讲)
导读:程序员应该怎么学数学?
基础思想篇 (18讲)
01 | 二进制:不了解计算机的源头,你学什么编程
02 | 余数:原来取余操作本身就是个哈希函数
03 | 迭代法:不用编程语言的自带函数,你会如何计算平方根?
04 | 数学归纳法:如何用数学归纳提升代码的运行效率?
05 | 递归(上):泛化数学归纳,如何将复杂问题简单化?
06 | 递归(下):分而治之,从归并排序到MapReduce
07 | 排列:如何让计算机学会“田忌赛马”?
08 | 组合:如何让计算机安排世界杯的赛程?
09 | 动态规划(上):如何实现基于编辑距离的查询推荐?
10 | 动态规划(下):如何求得状态转移方程并进行编程实现?
11 | 树的深度优先搜索(上):如何才能高效率地查字典?
12 | 树的深度优先搜索(下):如何才能高效率地查字典?
13 | 树的广度优先搜索(上):人际关系的六度理论是真的吗?
14 | 树的广度优先搜索(下):为什么双向广度优先搜索的效率更高?
15 | 从树到图:如何让计算机学会看地图?
16 | 时间和空间复杂度(上):优化性能是否只是“纸上谈兵”?
17 | 时间和空间复杂度(下):如何使用六个法则进行复杂度分析?
18 | 总结课:数据结构、编程语句和基础算法体现了哪些数学思想?
概率统计篇 (14讲)
19 | 概率和统计:编程为什么需要概率和统计?
20 | 概率基础(上):一篇文章帮你理解随机变量、概率分布和期望值
21 | 概率基础(下):联合概率、条件概率和贝叶斯法则,这些概率公式究竟能做什么?
22 | 朴素贝叶斯:如何让计算机学会自动分类?
23 | 文本分类:如何区分特定类型的新闻?
24 | 语言模型:如何使用链式法则和马尔科夫假设简化概率模型?
25 | 马尔科夫模型:从PageRank到语音识别,背后是什么模型在支撑?
26 | 信息熵:如何通过几个问题,测出你对应的武侠人物?
27 | 决策树:信息增益、增益比率和基尼指数的运用
28 | 熵、信息增益和卡方:如何寻找关键特征?
29 | 归一化和标准化:各种特征如何综合才是最合理的?
30 | 统计意义(上):如何通过显著性检验,判断你的A/B测试结果是不是巧合?
31 | 统计意义(下):如何通过显著性检验,判断你的A/B测试结果是不是巧合?
32 | 概率统计篇答疑和总结:为什么会有欠拟合和过拟合?
线性代数篇 (13讲)
33 | 线性代数:线性代数到底都讲了些什么?
34 | 向量空间模型:如何让计算机理解现实事物之间的关系?
35 | 文本检索:如何让计算机处理自然语言?
36 | 文本聚类:如何过滤冗余的新闻?
37 | 矩阵(上):如何使用矩阵操作进行PageRank计算?
38 | 矩阵(下):如何使用矩阵操作进行协同过滤推荐?
39 | 线性回归(上):如何使用高斯消元求解线性方程组?
40 | 线性回归(中):如何使用最小二乘法进行直线拟合?
41 | 线性回归(下):如何使用最小二乘法进行效果验证?
42 | PCA主成分分析(上):如何利用协方差矩阵来降维?
43 | PCA主成分分析(下):为什么要计算协方差矩阵的特征值和特征向量?
44 | 奇异值分解:如何挖掘潜在的语义关系?
45 | 线性代数篇答疑和总结:矩阵乘法的几何意义是什么?
综合应用篇 (6讲)
46 | 缓存系统:如何通过哈希表和队列实现高效访问?
47 | 搜索引擎(上):如何通过倒排索引和向量空间模型,打造一个简单的搜索引擎?
48 | 搜索引擎(下):如何通过查询的分类,让电商平台的搜索结果更相关?
49 | 推荐系统(上):如何实现基于相似度的协同过滤?
50 | 推荐系统(下):如何通过SVD分析用户和物品的矩阵?
51 | 综合应用篇答疑和总结:如何进行个性化用户画像的设计?
加餐 (3讲)
数学专栏课外加餐(一) | 我们为什么需要反码和补码?
数学专栏课外加餐(二) | 位操作的三个应用实例
数学专栏课外加餐(三):程序员需要读哪些数学书?
结束语 (1讲)
结束语 | 从数学到编程,本身就是一个很长的链条
程序员的数学基础课
登录|注册

22 | 朴素贝叶斯:如何让计算机学会自动分类?

黄申 2019-02-04
你好,我是黄申。今天我们来聊聊朴素贝叶斯。
在开始正式的内容之前,我想问你一个问题,你是如何区分苹果、甜橙和西瓜的?你可能要说了,这个问题还用得着讲吗?是不是你们博士都喜欢将简单的问题复杂化?还真不是,如果你将计算机想象成一个两三岁的孩子,你会怎么教一个孩子区分这些水果呢?
比如我曾经就和一个小朋友有过这样一段对话:
小朋友:黄叔叔,你和我讲讲,什么样的水果才是苹果呀?
我:圆形的、绿色的水果。
小朋友:那西瓜也是圆形的、绿色的呀?
我:嗯……苹果也有可能是黄色或红色的,但西瓜不是。
小朋友:那甜橙也是圆形的、黄色的呀?
我:好吧,你看到的大部分情况下的甜橙都是黄色的,而苹果只有很少情况(少数品种)是黄色的。而且你还可以尝尝,它们的味道也是不同的。
哈哈,你是不是觉得想要描述清楚,并没有想象中的那么容易?但是,在这个对话中,有两点我觉得你需要关注一下:
我使用了“可能”“大部分情况”“很少情况”等等这种词语,这些词包含了概率的概念;
我使用了多个条件来判断一个水果属于哪个类别。
基于此,我接下来就要聊聊,我们是如何通过数学的思想和方法,系统性地解决这个问题的。这其中,朴素贝叶斯(Naive Bayesian)就提供了一个切实可行的方案。不过,在深入了解它之前,我们还需要做点准备工作。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《程序员的数学基础课》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(26)

  • 冰冷的梦
    请问老师p(c|fi,fj) = p(c|fi) * p(c|fj)这一步是怎么推导出来的呀?
    2019-03-07
    2
    11
  • Bora.Don
    感觉老师讲得特别好,谢谢老师!同时还在极客上购买了人工智能和数据分析的课程,都讲了朴素贝叶斯,在这讲得最明白

    作者回复: 感谢支持🙏

    2019-03-02
    7
  • Joe
    朴素贝叶斯,朴素的原因是假设各个特征是相互独立的。
    2019-02-11
    5
  • 山中清泉明月照
    p(c|f1,f2)=p(c|f1)*p(c|f2)/p(c) 应该是这样子吧

    作者回复: 严格来说,应该这样推导 p(c|f1,f2)=p(c,f1,f2)/p(f1,f2)=p(c)*p(f1|c)*p(f2|f1,c)/p(f1,f2)
    由于朴素贝叶斯中的马尔科夫假设,f1和f2独立,p(c)*p(f1|c)*p(f2|f1,c)=p(c)*p(f1|c)*p(f2|c),而p(f1,f2)=p(f1)*p(f2),所以p(c)*p(f1|c)*p(f2|f1,c)/p(f1,f2) = p(c)*p(f1|c)*p(f2|c)/(p(f1)*p(f2))

    2019-07-07
    3
    4
  • 机智的捞球布
    请问老师:
    P(c|fi)的值不也是可以直接从训练样本中统计出来的么,为什么要用贝叶斯定理转换成p(fi|c) * p(c) / p(fi), 用另外三个统计值计算出来呢。

    作者回复: 这是一个非常好的问题。确实从实现的角度来说,我们也可以直接统计p(c|fi),不过这需要一些额外的数据结构,例如类似搜索引擎的倒排索引,以及对应的预处理。这会引入一些额外的空间和实际复杂度开销,特别是在大规模并行处理的时候,更加复杂一点。

    2019-06-02
    4
  • 邓艺晋_Jim
    为何三个概率加起来不是等于1,新来的水果不是苹果就是橙子或者西瓜啊,另外想问极客的机器学习课程在哪里有,谢谢

    作者回复: 需要把三个概率再归一化,因为这个概率都只是近似值,是根据贝叶斯规则推算的,所以不是真实的概率,只是一个推算值,看相对大小。

    另外,极客时间里有机器学习的课程,你可以看看专栏或者视频课程的列表

    2019-03-25
    4
  • 唯她命
    朴素贝叶斯 必须各个特征相互独立的吗?

    作者回复: 是的,朴素贝叶斯的“朴素”或者说naive就是指这个“天真”的假设。当然,很多时候并不成立,我们可以使用多阶马尔科夫模型来稍作修改,后面几节会有介绍。

    2019-02-16
    4
  • temool
    越看到后面越吃力,前面的也要再重新捋一遍

    作者回复: 反复阅读和练习,就能加深印象,加油!

    2019-02-11
    4
  • 🐻🔫🐸
    太牛逼了,以前看过数学之美,就立志以后得安排一下数学,这次看老师的文章,真正意义上进行正面接触了,而且讲的相当接地气,易于理解。👍🏻

    作者回复: 很高兴这个专栏对你有价值

    2019-07-03
    1
  • 刘超
    老师,有个问题,我感觉好像只要用朴素的方法,不用贝叶斯公式就能得到结果了。
              但是有的地方结果又不对。比如在计算p(西瓜的时候|o),前面部分p(西瓜|shape-2)和贝叶斯算的一样,但是p(西瓜|taste-2)算出来的是0。

    作者回复: 你可以参考前面那个推导

    2019-04-30
    1
  • so敏仪
    听君一席话,胜读十年书 这钱花得值了 谢谢老师浅入深出的讲解

    作者回复: 很高兴对你有用👍

    2019-11-15
  • 刘清斌
    老师,这一讲真的很清楚明白,比其他的书籍和教程讲的形象和容易理解

    作者回复: 感谢支持!

    2019-10-28
  • Paul Shan
    我个人觉得联合分布是贝叶斯公式的枢纽,由已知的条件概率求出联合分布,再由联合分布求出待求的条件概率,老师这样理解正确吗,多谢!

    作者回复: 是的

    2019-09-02
  • Temme
    关于评论中的证明我还是不太明白,如果
    p(c)*p(f1|c)*p(f2|f1,c)=p(c)*p(f1|c)*p(f2|c)成立,
    那么p(f2|f1,c)=p(f2|c)怎么通过条件独立的前提得出的?
    而且证出的结论也和文中的不一样
    结论是p(c)*p(f1|c)*p(f2|c)/p(f1)*p(f2),
    而文中的换算下来p(c)*p(f1|c)*p(c)*p(f2|c)/p(f1)*p(f2),
    不知道是我哪里搞错了

    作者回复: 两者对于后验概率最大化来说是一致的,p(c)*p(f1|c)*p(f2|c)/p(f1)*p(f2)是基于马尔科夫假设的推导

    2019-07-09
  • 阿信
    P(c|o) = P(c|(fi, fj)) = P(c|fi) * P(c|fj),
    这一步的推导,是基于上面朴素贝叶斯假设得到的。
    如苹果中口味是甜、形状是圆的概率:P(甜的、圆的)=P(甜的) * P(圆的),口味、形状对分析的对象属于苹果的概率是独立的。即不考虑一个苹果既是圆的又是甜的。虽然和实际不符,但这就是朴素的表现。

    黄老师,上面这样理解对吗

    作者回复: 对,直观上理解是这样的

    2019-06-27
  • 大秦岭
    看了两边,照猫画虎了好几遍,貌似懂了,继续加油中........
    谢谢老师~

    作者回复: 可以自己动手实现一个NB的分类器,加深印象

    2019-06-12
  • 大熊
    重点还是对贝叶斯公式的理解,后面的都是基于公式的变形

    作者回复: 没错👍

    2019-05-20
  • 予悠悠
    老师朴素贝叶斯和逻辑回归有什么区别呢?

    作者回复: 两者理论基础不一样,朴素贝叶斯是从概率论的角度出发,而逻辑回归在回归时和线性回归类似,不过把输出转换成非线性的输出,而且把连续的数值分为两个类别。

    2019-05-02
  • zzz
    请问“支持模糊分类”是什么意思呢,是当算出的多个分类概率差不多时?

    作者回复: 通常模糊分类是指一个数据对象可以属于多个分类,并具有不同的分数或者置信度。而精确分类是指数据对象只能属于一个分类

    2019-04-21
  • qinggeouye
    「如果一个分类的应用场景中,待分类对象的属性值大部分都是离散的(或者很容易转化为离散的)、需要支持模糊分类,并且需要快速可靠的实时分类,那么这种场景通常就非常适合使用朴素贝叶斯方法。」

    比如,花朵分类(属于哪一种花),花的属性有花瓣颜色、花瓣形状、花瓣大小、花瓣数量等..

    作者回复: 是的

    2019-03-04
收起评论
26
返回
顶部