標籤(空格分隔): 博客園 統計 打分系統 待完成html
上一節咱們聊了聊用Wilson區間估計來處理小樣本估計,但從原理上來講這種方法更像是一種Trick,它沒有從本質上解決樣本量小的時候估計不置信的問題,而是給估計加上一個和樣本量相關的置信下界,而後用這個下界替代估計進行打分。函數
想要從本質上解決小樣本估計不置信的問題,一個更符合思惟邏輯的方法是咱們先基於經驗給出一個預期估計,而後不斷用收集到的樣原本對咱們的預期進行更新,這樣在樣本量小的時候,樣本不會對咱們的預期有較大影響,估計值會近似於咱們預先設定的經驗值,從而避免像小樣本估計不置信的問題。網站
假設\(\theta\)是咱們要給出的估計,x是咱們收集的數據, \(\pi(\theta)\)是咱們基於經驗給出的預期。貝葉斯表達式以下:spa
\[ \begin{align} p(\theta|x) \propto p(x|\theta) * \pi(\theta) \end{align} \]htm
原理看似簡單,但落實到實際應用就會出現幾個問題:blog
讓咱們繼續用以前點讚的例子,一個一個解答上面的問題排序
樣本分佈抽象 \(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(點贊率)進行更新呢?ip
預期分佈抽象- 共軛分佈\(\pi(\theta)\)
這就涉及到另外一個概念- 共軛先驗分佈。名字很是高大上難以記住(剛剛wiki過才找到對應的中文...)。簡單解釋若是你的先驗分佈和後驗分佈一致,它們就分別是共軛先驗和共軛後驗。這個性質之因此如此吸引人就在於,能夠持續用新樣本更新先驗分佈。由於若是分佈不變 \(p(\theta|x_i) \propto p(x_i|\theta) * \pi(\theta)\)就能夠一直連着乘下去\(x_i , i \in (1,2,..N)\)
有這種性質的分佈有幾種,而適用於二項分佈的就是Beta分佈。把先驗分佈設爲beta分佈,不斷用二項分佈的樣本數據去更新先驗分佈,後驗分佈仍是beta分佈。get
記憶卡片~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}\)博客
上述咱們對用戶的行爲作了一個最簡單的抽象,只包括點贊和拍磚兩種行爲。現實狀況每每更復雜,好比用戶打分(五星評分),這種狀況咱們應該如何使用貝葉斯來獲得更加穩健的分數估計呢?
讓咱們對照着上面二項分佈的思路來梳理一下
樣本分佈抽象 \(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分的機率,最終用多項分佈的指望做爲最終打分。
共軛先驗
和二項分佈同樣,如今咱們須要找到多項分佈的共軛先驗分佈 - 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的預期先驗。
貝葉斯更新
肯定了先驗分佈和後驗分佈,咱們用和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 } \]
貝葉斯平均
針對小樣本打分一種很經常使用的方法叫作貝葉斯平均,許多電影網站的打分方法都來源它。讓咱們先寫一下表達式:
\[ 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\), 會發現兩種計算方式是徹底一致的!!
針對打分咱們分別討論了時間衰減,以及兩種解決小樣本估計不置信的方法。 但這只是打分系統很小的一部分,還有一塊頗有趣的是如何基於偏好調整最終的打分。之後有機會再聊吧
To be continue
Reference