贝叶斯更新/平均

【自取】最近整理的,有需要可以领取学习:

上一节我们聊了聊用Wilson区间估计来处理小样本估计,但从原理上来说这种方法更像是一种Trick,它没有从本质上解决样本量小的时候估计不置信的问题,而是给估计加上一个和样本量相关的置信下界,然后用这个下界替代估计进行打分。

为了从根本上解决对小样本估计的不信任问题,更符合逻辑的方式是我们根据经验给出预期估计,然后用收集到的样本不断更新我们的预期。这样,当样本量较小时,样本量不会对我们的预期产生太大影响,估计值会接近我们预先设定的经验值。以避免像小样本一样的不信任问题。

[En]

In order to essentially solve the problem of disbelief in the estimation of small samples, a more logical way is for us to give an expected estimate based on experience, and then constantly update our expectations with the collected samples. in this way, when the sample size is small, the sample will not have a great impact on our expectations, and the estimated value will be close to our pre-set empirical value. So as to avoid the problem of disbelief like a small sample.

假设(\theta)是我们要给出的估计,x是我们收集的数据, (\pi(\theta))是我们基于经验给出的预期。贝叶斯表达式如下:

[\begin{align} p(\theta|x) \propto p(x|\theta) * \pi(\theta) \end{align} ]

原理看似简单,但落实到实际应用就会出现几个问题:

  • 如何把实际问题抽象成概率分布(p(x|\theta))
  • 如何设置预期概率分布(\pi(\theta))
  • 如何用新样本对分布进行更新得到参数估计

让我们继续用之前点赞的例子,一个一个解答上面的问题

二元贝叶斯更新

  1. 样本分布抽象 (p(x|\theta))
    我们上一章已经讨论如何对用户的点赞拍砖行为进行抽象。简单来说每一个用户是否点赞(\sim Bernoulli(p)),用户间相互独立,所以N个用户对某一篇文章点赞量(\sim Binomial(n,p) = \left(! \begin{array}{c} n \ k \end{array} ! \right)p^k(1-p)^{(n-k)})
    抽象出了样本的概率分布,,我们要如何用这些样本对我们想要估计的参数p(点赞率)进行更新呢?
  2. 预期分布抽象- 共轭分布(\pi(\theta))
    这就涉及到另一个概念- 共轭先验分布。名字非常高大上难以记住(刚刚wiki过才找到对应的中文…)。简单解释如果你的先验分布和后验分布一致,它们就分别是共轭先验和共轭后验。这个性质之所以如此吸引人就在于,可以持续用新样本更新先验分布。因为如果分布不变 (p(\theta|x_i) \propto p(x_i|\theta) * \pi(\theta))就可以一直连着乘下去(x_i , i \in (1,2,..N))
    有这种性质的分布有几种,而适用于二项分布的就是Beta分布。把先验分布设为beta分布,不断用二项分布的样本数据去更新先验分布,后验分布还是beta分布。

    记忆卡片~Beta分布
    Beta函数: (Beta(a,b) = \frac{(a-1)!(b-1)!}{(a+b-1)!})
    Beta分布概率密度 (f(x;a,b) = x^{(a-1)}(1-x)^{(b-1)}/Beta(a,b))
    Beta分布统计值:(\mu = \frac{a}{a+b})

  3. 分布更新-贝叶斯更新
    看到Beta分布的概率密度很容易联想到二项分布,因为它们十分相似。和二项分布对比x就是我们要估计的参数p,Beta分布的两个参数a,b分别对应正负样本数量k,n-k。换言之Beta分布是二项分布参数的分布。
    下一步我们就需要用到Beta分布作为共轭分布的性质(先验后验分布不变)来对参数进行更新:

[\begin{align} \pi(p|\alpha+k, \beta+n-k) &= P(X=k|p, n) * \pi(p|\alpha, \beta)\ E(\hat{p}) &= \frac{\alpha + k}{\alpha + \beta + n} \leftarrow \frac{\alpha}{\alpha + \beta} \ where & \quad \pi(\alpha, \beta) \sim Beta(\alpha, \beta) \ & \quad x \sim Binomial(n,p) \end{align} ]

如果我们预期点赞和拍砖的概率是50%/50%,既(\alpha=\beta)。当我们对预期不是非常肯定的时候(对用户行为更相信),我们的(\alpha,\beta)可以给的相对比较小,这样样本会很快修正先验概率,反之(\alpha,\beta)给更大值。这里(\alpha,\beta)可以理解为我们根据预期设定的虚拟样本,下面是一个直观的例子:
(\alpha =2, \beta = 2,\hat{p}=0.5), 当收集到1个点赞样本,更新后的参数变为,$\alpha = 3, \beta=2, \hat{p} \to 0.67 ( )\alpha =10, \beta = 10, \hat{p}=0.5 (, 当收集到1个点赞样本更新后的参数变为,)\alpha = 11, \beta=10, \hat{p} \to 0.52 ( 一个更直观的)\alpha, \beta$取值变化对参数p分布的影响如下图:

贝叶斯更新/平均
  • (\alpha, \beta)越大方差越小,p的分布越集中
  • (\alpha)增加,p估计均值越大
  • (\beta)增加,p估计均值越小
    抛开数学的部分,用贝叶斯更新的方法来估计用户评分可以非常简单的用下面的表达式来表示,其中(\alpha)是预设的点赞量,(\beta)是预设的拍砖量, n是收集到的全部样本量,其中k是收集到的样本中点赞的数量。

[\hat{p} = \frac{\alpha + k}{\alpha + \beta + n} ]

如何设定(\alpha \beta)决定了最终打分从哪里开始更新,以及最终打分对新样本的敏感程度。

多元贝叶斯更新

在上面,我们对用户的行为进行了最简单的抽象,只包括点赞和砖块。现实往往更为复杂,比如用户评分(五星评分)。我们如何使用贝叶斯来获得更稳健的分数估计?

[En]

Above, we have made the simplest abstraction of the user’s behavior, including only likes and bricks. The reality is often more complex, such as user ratings (five-star scores). How can we use Bayesian to get more robust score estimates?

让我们对照着上面二项分布的思路来梳理一下

  1. 样本分布抽象(p(x|\theta))
    假设用户的评分从1分-5分,用户最终打了3分,则可以抽象成一个有5种可能的多项分布,用户的选择用向量表示就是((0,0,1,0,0)) 。多项分布的表达式如下

[\begin{align} P(x|\theta) &= \begin{pmatrix} N \ x_1,…,x_5 \ \end{pmatrix} \prod_{i=1}^5 \theta_i^{x_i} \ score &= \sum_{i=1}^5 p_i * i \end{align} ]

其中N是用户量,(x_i)是选择打i分的用户数,满足$\sum_{i=1}^5 x_i = N $, (\theta_i)是打i分的概率,满足 (\sum_{i=1}^5 \theta_i = 1)
我们通过收集到的用户打分来给出打1分-5分的概率,最终用多项分布的期望作为最终打分。

  1. 共轭先验
    和二项分布一样,现在我们需要找到多项分布的共轭先验分布 – Dirchlet分布,也就是beta分布推广到多项。Dirchlet的分布概率密度如下:

[Dir(\theta|\alpha) = \frac{\Gamma(\alpha_0)}{\Gamma(\alpha_1)…\Gamma(\alpha_K)} \prod_{k=1}^K \theta^{\alpha_k-1} ]

其中(\alpha_0 = \sum_i^K \alpha_k),当K=2的时候Dirchlet就是beta分布。和Beta分布相同, 其中(\alpha_i)可以理解为对打分为i的预期先验。

  1. 贝叶斯更新
    确定了先验分布和后验分布,我们用和beta相同的方法用收集到的样本对参数进行更新。

[\begin{align} Dir(\theta|D) &\propto P(D|\theta) * Dir(\theta|\alpha)\ Dir(\theta|D) &= \frac{\Gamma(\alpha_0 + N)}{\Gamma(\alpha_1 + m_1)…\Gamma(\alpha_K + m_k)} \prod_{k=1}^K \theta^{\alpha_k + m_k-1}\ \end{align} ]

上述的条件概率可以被简单理解为,当我们收集到N个样本其中(m_i)个样本打了i分,则打i分的概率会从预置的先验概率(\frac{\alpha_i}{\sum_i^k\alpha_i})被更新为 (\frac{\alpha_i + m_i}{\sum_i^k\alpha_i + N })
有了后验概率,我们就可以得到最终打分如下

[\frac{\sum_{i=1}^K i * (\alpha_i + m_i)}{\sum_i^k\alpha_i + N } ]

  1. 贝叶斯平均
    一种常用的小样本评分方法被称为贝叶斯平均,这是许多电影网站评分方法的来源。让我们先写下这个表达式:
    [En]

    A commonly used method for scoring small samples is called Bayesian averaging, which is the source of the scoring methods for many movie websites. Let’s write the expression first:

[x = \frac{C*m + \sum_{i=1}^K{x_i}}{C+N} ]

其中C是预置样本量(给小样本加一些先验样本), N是收集的样本量,m是先验的总体平均打分,(x_i)是每个用户的打分。贝叶斯平均可以简单理解为用整体的先验平均打分来对样本估计进行平滑。
其实让我们对上述基于Dirchlet分布给出的打分式进行一下变形 $\sum_{i=1}^K i * \alpha_i = C m $, (\sum_{i=1}^K i * m_i = \sum_{i=1}^K x_i), 会发现两种计算方式是完全 一致的!!*

对于评分,我们讨论了时间衰减和两种方法来解决小样本估计的置信度。但这只是评分系统的一小部分,另一个有趣的部分是如何根据偏好调整最终的分数。那事儿以后再说吧。

[En]

For scoring, we discuss time attenuation and two methods to solve the disbelief of small sample estimates. But this is only a small part of the scoring system, and another interesting part is how to adjust the final score based on preference. Let’s talk about it later.

To be continue

Reference

  1. http://www.evanmiller.org/bayesian-average-ratings.html
  2. http://www.ruanyifeng.com/blog/2012/03/ranking_algorithm_bayesian_average.html
  3. https://www.quantstart.com/articles/Bayesian-Inference-of-a-Binomial-Proportion-The-Analytical-Approach
  4. https://en.wikipedia.org/wiki/Beta_function

Original: https://www.cnblogs.com/gogoSandy/p/11031234.html
Author: 风雨中的小七
Title: 贝叶斯更新/平均

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/15940/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

发表回复

登录后才能评论
免费咨询
免费咨询
扫码关注
扫码关注
联系站长

站长Johngo!

大数据和算法重度研究者!

持续产出大数据、算法、LeetCode干货,以及业界好资源!

2022012703491714

微信来撩,免费咨询:xiaozhu_tec

分享本页
返回顶部