美文网首页
程序员的概率基础课

程序员的概率基础课

作者: 豆腐匠 | 来源:发表于2020-04-18 22:53 被阅读0次

    前言

    本篇内容主要来自极客时间里的《程序员的数学基础课》,本来去年就买的课一直懒得看,赶上这次疫情才老老实实翻出来看看。看完瞬间觉得自己基础好差,尤其到后面的线性代数相关的直接就看不懂了。目前唯一有点感觉的也就是概率这一部分,配合《程序员的数学:概率统计》,这里简单记录一下,也算是学习笔记了吧。

    基本概念

    我们用随机变量(Random Variable)来描述事件所有可能出现的状态,并使用概率分布(Probability Distribution)来描述每个状态出现的可能性。而随机变量又可以分为离散型随机变量(Discrete Random Variable)连续型随机变量(Continuous Random Variable)

    概率分布

    假设我们使用一个随机变量 x 来表示新闻类型,如果在 100 篇新闻中,有 60 篇是娱乐新闻,有 20 篇是科技新闻,有 20 篇是体育新闻,那么你看到娱乐新闻的概率就是 60%,看到科技新闻的概率就是 20%,看到体育新闻的概率就是 20%。而这三组数据就可以构成变量 x 的概率分布P(x)。

    以抛硬币为例,我们抛的次数越多,正反面的次数就越接近。也就是说,统计的采样次数越多,越趋近于我们理论上的情况。因此,从这个统计实验我们可以看出,概率分布描述的其实就是随机变量的概率规律

    伯努利分布(Bernoulli Distribution)

    P(x=0) = 1-\lambda
    P(x=1) = \lambda
    或者写作: P(x) = \lambda^x(1-\lambda)^{1-x} 其中x只能为0或1

    抛硬币就属于伯努利分布。别被名字唬到,伯努利分布是较为简单的一种分布,应用于两种实验结果。要么成功,要么失败,一定程度上是二元的性质。

    分类分布(Categorical Distribution) 或 Multinoulli 分布

    P(x=k) = \lambda_k 当k=2 的时候就变成了伯努利分布,他们两个都数据离散型分布。从计算的角度来说,我们可以直接求和得出的,就是“离散的”,需要用积分计算的,就是“连续的”。

    正态分布 也叫 高斯分布(这个概念对于本篇文章没啥用,纯粹为了练习用markdown写数学公式)

    比较经典的连续分布有正态分布、均匀分布、指数分布、拉普拉斯分布等等。如果你只需要掌握一个的话,那肯定是正态分布。

    P(x) = \frac{1}{\sqrt{2\pi\sigma^2}}exp(- \frac{{(x-\mu)}^2}{2\sigma^2})

    神说,要有正态分布,于是就有了正态分布。
    如果你也和我一样,看不懂公式了,这里简单记录一下,帮你回忆回忆。
    (exp 高等数学里指以自然常数e为底的指数函数。)
    \mu是均值,\sigma是标准差 \sigma =\sqrt{\frac{1}{N}\sum_{i=1}^{N}(x_i-\mu)^2}
    如果你说标准差我也忘了,简单来说标准差就是一组数值,自平均值分散开来的程度的一种测量观念。

    正态分布

    多个变量之间的关系

    联合概率

    由多个随机变量决定的概率我们就叫联合概率,它的概率分布就是联合概率分布。随机变量 x 和 y 的联合概率使用 P(x, y) 表示。联合分布中,联合概率之和为1。

    边缘概率

    对于连续型随机变量,我们可以通过联合概率 P(x, y) 在 y 上的积分,推导出概率 P(x)。这个时候,我们称 P(x) 为边缘概率。

    联合概率与边缘概率的关系如下:
    P( x=a ) = \sum_{b}^{ } P( x=a , Y=b)
    这里的求和符号表示穷举Y可取的值b后,有所有这些值对应的概率的和
    P( x=b ) = \sum_{a}^{ } P( x=a , Y=b)

    来举个例子理解一下上面的概念。


    image.png

    答案如下:这个比较好理解


    image.png

    代入上面的公式,


    image.png

    注意:如果只知道边缘分布,无法反推联合分布

    条件概率

    条件概率也是由多个随机变量决定,但是和联合概率不同的是,它计算了给定某个(或多个)随机变量的情况下,另一个(或多个)随机变量出现的概率,其概率分布叫做条件概率分布。给定随机变量 x的前提下,随机变量 y 的条件概率使用 P(y | x) 表示。

    条件概率的通用定义:P( Y = b | X = a ) = \frac{P( X = a , Y = b ) }{ P(X = a) }

    还是上面扑克牌的例子,请问在X=红色的前提下,Y=数字牌的概率是多少?答案:1/3。这个应该好理解吧。
    用条件概率表示如下。


    image.png

    如果你也听说过“三门问题”的话,可以用条件概率来计算一下结果。条件变成了三个,稍微复杂了一些,这里就不进一步记录了。

    练习一下

    我们再举一个例子来巩固一下上面的知识。

    某家长一直在操心儿子的教育问题,所以一直在研究他班级的成绩单。为了弄清儿子在班级上的成绩排名,向老师要了张全班成绩的分布表。

    image.png

    男生的概率是 P(男生)=10/20=50%
    90 分及以上的学生的概率是 P(90-100)=4/20=20%
    那全班考了 90 分以上的男生的概率是多少呢?(联合概率)也就是 P(男生, 90-100)=2/20=10%。
    在男生中,考 90 分及以上的概率是多少?(条件概率)P(90-100|男生)= 2/10=20%。

    • |男, 90-100|表示考了 90 分以上的男生人数;
    • |男|表示男生人数;
    • |全班|表示全班人数。
      已知 P(90-100 | 男生) = |男生, 90-100| / |男生|,P(男) = |男生| / |全班|
      则p(90-100 | 男生)✖️P(男) = P(男生, 90-100)

    下面我们假设这样一种场景,想知道男生考了 90~100 分的概率有多少,来评估一下儿子在男生中算什么水平。可是老师出于隐私保护,并没有把全班数据的分布告诉我,她说道“我可以告诉你全班考 90~100 分的概率,以及 90~100 分中男生的概率。
    也就是已知P(男生)、P(90-100)和P(男生|90-100),求 P(90-100|男生)

    由之前的条件概率通用公式,我们可以得到
    P( x | y ) \times P(y) = P(x,y) = P(y,x) = P( y | x ) \times P(x)
    也就是
    P( x | y ) = \frac{P( y | x ) \times P(x)}{P(y)}
    这样我们就能求得结果了,这个公式也就是贝叶斯公式
    贝叶斯的应用场景,简单说就是充分利用统计和先验,转化为预测。

    朴素贝叶斯分类

    现在有三个水果,苹果,甜橙和西瓜,请问这三个水果摆在你面前,你要如何区分它们?可能有大小,颜色等等


    image.png

    那么请问你要如何让计算机来认识这三种水果呢?

    image.png
    当然了,仅仅只有三种水果的数据还是太少了,我们可以把样本量扩充。基于我们前面提到的贝叶斯定理,我们首先计算出各种水果特征的概率。对于上表中出现的 0.00 概率,在做贝叶斯公式中的乘积计算时,会出现结果为 0 的情况,因此我们通常取一个比这个数据集里最小统计概率还要小的极小值,来代替“零概率”。这里我们取0.01
    image.png
    假定数据对象的不同属性对其归类影响时是相互独立的。现在我们手上有一个水果,它是圆形,口感是甜的。
    image.png
    同理可得,甜橙的概率是0.269 ,西瓜的概率是0.007。所以从概率上来说这个水果应该甜橙。

    所以什么是朴素贝叶斯分类,简单总结一下就是:

    • 准备数据:针对水果分类这个案例,我们收集了若干水果的实例,并从水果的常见属性入手,将其转化为计算机所能理解的数据。这种数据也被称为训练样本
    • 建立模型:通过手头上水果的实例,我们让计算机统计每种水果、属性出现的先验概率,以及在某个水果分类下某种属性出现的条件概率。这个过程也被称为基于样本的训练
    • 分类新数据:对于一颗新水果的属性数据,计算机根据已经建立的模型进行推导计算,得到该水果属于每个分类的概率,实现了分类的目的。这个过程也被称为预测

    之所以名字中带有“朴素”,因为前提是各种变量是相互独立的,同时也只能处理离散型分布。

    关于朴素贝叶斯分类,这里推荐下面这个视频,
    网易公开课概率推理2 没有耐心的小伙伴可以从24分钟开始。

    马尔科夫模型

    在讲语言模型之前,我们先来了解两个基本概念:链式法则和马尔科夫假设

    链式法则

    image.png
    推导过程如下
    image.png
    这个法则有什么用呢?这里可参见
    网易公开课概率推理1 没有耐心的小伙伴可以从28分开始看
    简单来说,利用条件独立性,可大大减少联合概率的计算量。当然还有其他更厉害的应用,感兴趣的在视频中了解吧。

    马尔科夫假设

    任何一个词 wi​ 出现的概率只和它前面的 1 个或若干个词有关。基于这个假设,我们可以提出多元文法(Ngram)模型。Ngram 中的“N”很重要,它表示任何一个词出现的概率,只和它前面的 N-1 个词有关。
    我以二元文法模型为例,某个单词出现的概率只和它前面的 1 个单词有关。
    P(w_n|w_1w_2w_3...w_{n-1}) \approx P(w_n|w_{n-1})

    这有什么用呢?比如我现在想在一个文档中寻找一个特殊的句子,s 表示某个有意义的句子,由一连串按照特定顺序排列的词 w1​,w2​,…,wn​ 组成,这里 n 是句子里单词的数量。
    那个这个特殊句子出现的概率是多少呢?
    P(s) = P(w_1,w_2,w_3,...,w_n)
    使用链式法则展开后数量级过于庞大,对于计算机计算难度也很高。这时使用二元文法优化后,系统复杂度就可以降到我们能够接受的量级。

    举一个使用上述知识的例子,信息检索。
    q 表示一个查询,d 表示一篇文档。现在想知道哪个文档更符合用户的查询条件,即求P(d∣q),根据贝叶斯定理得到如下公式,


    image.png

    对于同一个查询,其出现概率 P(q) 都是相同的,同一个文档 d 的出现概率 P(d) 也是固定的。所以我们只需要关心求P(q∣d)。根据链式法则,我们可以展开成为


    image.png

    为了提升效率,我们也使用马尔科夫假设和多元文法。假设是三元文法,那么我们可以写成这样:


    image.png

    最终,根据每篇文档所获得的 P(d∣q) 这个值,由高到低对所有的文档进行排序。我就实现了信息检索。

    那语言模型是不是也可以用于估算其他序列出现的概率呢?答案是肯定的。
    前文提到了二元文法、三元文法。对于二元文法来说,某个词出现的概率只和前一个词有关。对应的,在马尔科夫模型中,如果一个状态出现的概率只和前一个状态有关,那么我们称它为一阶马尔科夫模型或者马尔科夫链

    Google 公司最引以为傲的 PageRank 链接分析算法,它的核心思想也和马尔科夫链有关。感兴趣的小伙伴可以去网上查找一些相关知识。

    信息熵

    有个公众号上有一个做的不错的视频,感兴趣的可以参考一下。
    https://mp.weixin.qq.com/s/8_XAK3Drrh7fDMQKdbePXA
    这个视频很好的回答了两个问题,
    信息是怎么计算的?
    为什么信息还有单位?

    这里盗用一下里面的思维导图,其中离散分布的位置就是信息熵的计算公式。


    image.png

    信息熵,我们通常简称为熵,其实就是用来刻画给定集合的纯净度的一个指标。

    image.png

    那么集合中分组的数量 n 为 1,A 分组的元素在集合中出现的概率为 100%,所以这个集合的熵为 -100%*log(100%, 2) = 0


    image.png

    那么集合中分组的数量 n 为 2,A 和 B 分组的元素在集合中出现的概率各为 50%,所以这个集合的熵为 2(-50%log(50%, 2)) = 1

    从上述两个集合的对比可以看出,一个集合中所包含的分组越多、元素在这些分组里分布得越均匀,熵值也越大。而熵值表示了纯净的程度,或者从相反的角度来说,是混乱的程度。

    如果你已经看懂了上面的部分,相信你已经知道单个集合的熵是如何计算的了。那么,如果将一个集合划分成多个更小的集合之后,又该如何根据这些小集合,来计算整体的熵呢?

    image.png

    其中,T 表示一种划分,Pv​ 表示划分后其中某个小集合,Entropy(Pv​) 表示某个小集合的熵, 而 ∣Pv∣除以|P|​ 表示某个小集合出现的概率。所以这个公式其实就表示,对于多个小集合而言,其整体的熵等于各个小集合之熵的加权平均。而每个小集合的权重是其在整体中出现的概率。

    image.png

    根据之前单个集合的熵计算,A 和 B 组元素所组成的小集合,它的熵是 1。而 C 组没有和其他组混合,所形成的小集合其熵为 0。在计算前两个小集合的整体熵时,A 组和 B 组形成的集合出现的概率为 2/3​,而 C 组形成的集合出现概率为 1/3​,所有整体熵 =2/3​∗1+1/3​∗0=0.67。

    如果我们将划分前后的整体熵做个对比,你会发现划分后的整体熵要小于划分之前的整体熵。

    我们将划分后整体熵的下降,称为信息增益(Information Gain)

    结语

    再向后基本就进入决策树,归一化相关的知识了,我目前的水平应该也就到这里了,后面慢慢努力吧。

    相关文章

      网友评论

          本文标题:程序员的概率基础课

          本文链接:https://www.haomeiwen.com/subject/jcwwmhtx.html