欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

概率统计16——均匀分布、先验与后验

程序员文章站 2024-02-16 10:50:28
...

 

相关阅读:

最大似然估计(概率10)

重要公式(概率4)

概率统计13——二项分布与多项分布

贝叶斯决策理论(1)基础知识 | 数据来自于一个不完全清楚的过程……

均匀分布

  简单来说,均匀分布是指事件的结果是等可能的。掷骰子的结果就是一个典型的均匀分布,每次的结果是6个离散型数据,它们的发生是等可能的,都是1/6。均匀分布也包括连续形态,比如一份外卖的配送时间是10~20分钟,如果我点了一份外卖,那么配送员会在接单后的10~20分钟内的任意时间送到,每个时间点送到的概率都是等可能的。

  很多时候,均匀分布是源于我们对事件的无知,比如面对中途踏上公交车的陌生人,我们会判断他在之后任意一站下车的可能性均相等。正是由于不认识这个人,也不知道他的目的地是哪里,因此只好认为在每一站下车的概率是等可能的。如果上车的是一个孕妇,并且接下来公交车会经过医院,那么她很可能是去医院做检查,她在医院附近下车的概率会远大于其他地方。虽然不认识这名孕妇,但孕妇的属性为我们提供了额外的信息,让我们稍稍变的“有知”,从而打破了分布的均匀性。

  根据“均匀”的概念,如果随机变量X在[a, b]区间内服从均匀分布,则它的密度函数是:

概率统计16——均匀分布、先验与后验

概率统计16——均匀分布、先验与后验

  这里的区间是(a,b)还是[a,b]没什么太大关系。

  均匀分布记作X~U(a, b),当a ≤ x ≤ b时,分布函数是:

概率统计16——均匀分布、先验与后验

  由此可知X~U(a, b)在随机变量是任意取值时的分布函数:

概率统计16——均匀分布、先验与后验

  假设某个外卖配送员送单的速度在10~15分钟之间,那么这个配送员接单后在13分钟之内送到的概率是多少?

  我们同样对这名配送员缺乏了解,也不知道他的具体行进路线,因此认为他在10~15分钟之间送到的概率是等可能的,每个时间点送到的概率都是dx/(15-10),因此在13分钟内送到的概率是:

概率统计16——均匀分布、先验与后验

  其实也没必要每次都用积分,直接用概率分布的公式就可以了:

概率统计16——均匀分布、先验与后验

先验与后验

  某个城市有10万人,其中有一个是机器人伪装的。现在有关部门提供了一台检测仪,当检测仪认为被检测对象是机器人时就会发出刺耳的警报。但这台检测仪并不完美,仍有1%的错误率,也就是说有1%的概率把一个正常人判断成机器人,也有1%的概率把机器人误判为正常人。对于全城的任何一个居民来说,如果检测仪将他判断为机器人,那么他真是机器人的概率是多大?

  我们用随机变量θ表示一个居民的真实身份,X表示检测结果(有警报和正常两种结果),上面的问题可以用以下概率表示:

概率统计16——均匀分布、先验与后验

  我们根据上面的式子来解释先验概率和后验概率。

  先验概率(prior probability),是指根据以往经验和分析得到的概率,与试验结果无关。这里的“以往经验”可能是一批历史数据的统计,也可能是主观的预估。值得注意的是,主观预估绝非瞎猜,实际上主观预估也是一种不精确的统计分析。比如我们估计一个外卖配送员的交通工具是电瓶车,虽然是一个主观的猜测,但准确率相当高,毕竟在方圆五公里之内,电瓶车是最灵活快捷的交通工具。上面的P(θ=机器人)是一个先验概率,它是事先知道的,不管有没有检测仪,检测结果怎么样,我们都事先认定这个城市中有一个机器人伪装成人类的概率是10万分之一,至于是怎么知道的就是另外一回事了,可能是接到群众的举报,也可能是有关部门提供的消息。

  10万人中有一个是机器人伪装的,先验概率是P(θ= 机器人) = 1/100000。是否有可能有另一个先验概率,比如10万人中有1/100是机器人伪装的?当然可以。按照这个逻辑,先验概率可以是0~1之间的任何数值。

  这里的参数θ代表居民的身份,有两个取值,机器人和人类,P(θ)表示θ是某个取值的概率,既然是概率,那么θ也必然服从某个分布,这个分布就称为先验分布。

  简单而言,先验概率是对随机变量θ的取值的预估,先验分布是关于先验概率的概率分布(即P(θ)中θ取值的分布)。如果θ的取值是连续型的,它的先验分布就是连续型分布。

 

  后验概率(posterior probability),是在相关结果或者背景给定并纳入考虑之后的条件概率。比如一个熊孩子持续三分钟没有动静,以此为前提,这个熊孩子在“干大事”的概率就是一个后验分布,表示为P(干大事|三分钟没动静)。对P(θ=机器人|X=警报)来说,检测结果已经有了,是X=警报,在此基础上求接受检测的居民是否真是机器人的概率,因此这是一个后验概率。

  

  似然函数(likelihood function)用来描述已知随机变量输出结果时,未知参数的可能取值。关于似然的概念前面已经详细介绍过,可参考 最大似然估计(概率10)

  

  最后看看问题的答案。贝叶斯公式告诉我们:

概率统计16——均匀分布、先验与后验

校正先验

  假设有两枚硬币C1和C2,它们投出正面的概率分别是0.6和0.3。现在取其中一枚连投10次,得到的结果是前5次正面朝上,后5次反面朝上,试验中选择的最可能是哪枚硬币?

  

  我们把参数θ看成硬币的选择,只有两枚硬币,也许在现实中它们长的不一样,大多数人会选择更漂亮的C1,但是在题目中,实验前我们对两枚硬币都缺乏了解,基于“无知”的原则,认为选择C1和C2的概率是等可能的,即P(θ=C1)= P(θ=C2)=0.5。有了先验概率后,可以代入贝叶斯公式计算后验概率:

概率统计16——均匀分布、先验与后验

  这里data是10次投硬币的结果,无论选择那枚硬币,投掷的结果都符合伯努利分布:

概率统计16——均匀分布、先验与后验

  P(data)则需要借助全概率公式:

概率统计16——均匀分布、先验与后验

  现在可以分别计算实验前选择C1硬币或C2硬币的概率:

概率统计16——均匀分布、先验与后验

  这个数字符合直觉。对于分类来说,在比较C1和C2的后验概率时,二者的分母都是P(data),也就是说P(data)并没有起到实际作用,因此对于分类器来说无需计算P(data):

概率统计16——均匀分布、先验与后验

  

  贝叶斯公式告诉我们,先验概率是在实验前对原因的预估,后验概率是在试验后根据结果反推原因,或者说是根据结果对最初预估的修正。既然如此,一次修正得到的并不一定是最佳结果,可以尝试多次修正,前一个样本点的后验会被下一次估计当作先验。我们根据这种思路重新计算一下C1的后验概率。

  一共抛了10次硬币,用{x1, x2, …, x10}代表每次抛硬币的结果,x1~x5是正面,x6~x10是反面,仍然在实验前认为选择C1和C2的概率是等可能的,下面是已知信息:

概率统计16——均匀分布、先验与后验

  与之前不同,这次我们每次只看一枚硬币,以此来计算θ的后验概率:

概率统计16——均匀分布、先验与后验

  后验信息代表一次历史经验,比试验前的“无知”稍强一些。接下来,我们用后验概率作为下一次迭代的先验概率:

概率统计16——均匀分布、先验与后验

  继续迭代,直到x10为止,将最终得到的先验概率就是最终结果。

p_1_c1, p_0_c1 = 0.6, 0.4  # P(1|c1) = 0.6, P(0|c1) = 0.4, 1和0分别代表正反
p_1_c2, p_0_c2 = 0.3, 0.7  # P(1|c2) = 0.3, P(0|c2) = 0.7


def posterior_theta(p_c1, p_c2, x):
    '''
    计算θ的后验概率
    :param p_c1: c1的先验概率P(C1)
    :param p_c2: c2的先验概率P(C2)
    :param x: 硬币的结果
    :return: 后验概率P(C1|x)和P(C2|x)
    '''
    p_x_c1 = p_1_c1 if x == 1 else p_0_c1
    p_x_c2 = p_1_c2 if x == 1 else p_0_c2
    # 计算后验概率P(C1|x)
    p_c1_x = p_c1 * p_x_c1 / (p_x_c1 * p_c1 + p_x_c2 * p_c2)
    p_c2_x = 1 - p_c1_x
    return p_c1_x, p_c2_x


data = [1, 1, 1, 1, 1, 0, 0, 0, 0, 0]  # 5正5反
p_c1, p_c2 = 0.5, 0.5  # 初始先验P(C1) = P(C2) = 0.5
for x in data:
    # 用后验作为下一个样本点的先验
    p_c1, p_c2 = posterior_theta(p_c1, p_c2, x)
    print('P(C1)={0}, P(C2)={1}'.format(p_c1, p_c2))

  P(C1)=0.6666666666666667, P(C2)=0.33333333333333326

  P(C1)=0.8, P(C2)=0.19999999999999996

  P(C1)=0.888888888888889, P(C2)=0.11111111111111105

  P(C1)=0.9411764705882353, P(C2)=0.05882352941176472

  P(C1)=0.9696969696969696, P(C2)=0.030303030303030387

  P(C1)=0.948148148148148, P(C2)=0.05185185185185204

  P(C1)=0.9126559714795006, P(C2)=0.08734402852049938

  P(C1)=0.8565453785027182, P(C2)=0.14345462149728183

  P(C1)=0.7733408854904177, P(C2)=0.22665911450958232

  P(C1)=0.6609783156833076, P(C2)=0.33902168431669244

  上面的迭代过程是一个将样本点逐步增加到学习器的过程,前一个样本点的后验会被下一次估计当作先验。可以说,贝叶斯学习是在逐步地更新先验,逐步通过新样本对原有的分布进行修正。

  

  在实际应用中当然不会每次仅仅增加一个样本点。下面的例子更好地说明了这个逐步更新先验的过程。

  为了提高产品的质量,公司经理考虑增加投资来改进生产设备,预计投资90万元,但从投资效果来看,两个顾问给出了不同的预言:

  θ1顾问:改进生产设备后,高质量产品可占90%

  θ2顾问:改进生产设备后,高质量产品可占70%

  根据经理的以往经验,两个顾问的靠谱率是P(θ1)=0.4, P(θ2)=0.6。这两个概率是先验概率,是经理的主观判断。似乎θ2更靠谱一些,但是这次,θ2顾问意见太保守了,为了得到更准确的信息,经理进行了小规模的试验,结果第一批制作的5个产品全是令人兴奋的高质量产品。

  用D1表示本次实验的5个产品,可以得到下面的结论:

概率统计16——均匀分布、先验与后验

  在第一次试验后,经理针对本次实验对两个顾问的靠谱率做出了修正,认为P(θ1)=0.700, P(θ2)=0.300,这个概率更符合本次实验的结果,或者说试验结果改变了经理的主观看法。

  当然5个产品说明不了太大问题,于是经理又试制了10个产品(用D2表示),结果有9个是高质量的,根据这个结果继续对顾问的靠谱率进行修正:

概率统计16——均匀分布、先验与后验

  两个顾问的靠谱率在D2中再次得到修正。

  


  出处:微信公众号 "我是8位的"

  本文以学习、研究和分享为主,如需转载,请联系本人,标明作者和出处,非商业用途! 

  扫描二维码关注作者公众号“我是8位的”

概率统计16——均匀分布、先验与后验