樸素貝葉斯模型

發表於2024-03-13

樸素貝葉斯法

樸素貝葉斯是一種用先驗機率估計後驗機率的模型,透過估計先驗機率得到樣本和類別的近似聯合機率,隨後透過聯合機率分佈獲得需要的後驗機率分佈進而實現分類。本次介紹的樸素貝葉斯法主要包括三塊:總體思想(將後驗機率轉換為先驗機率)、極大似然估計(使用極大似然法估計先驗機率)、貝葉斯估計(使用貝葉斯估計得到先驗機率)。

符號說明

設輸入空間\(\mathcal{X}\subseteq \mathbf{R}^n\)\(n\)維向量的集合,輸出空間的集合\(\mathcal{Y}=\{c_1,c_2,\cdots,c_K\}\),則在樣本(示例,特徵向量)\((\bm{x},y)\)\(\bm{x}\in \mathcal{X}\)\(y\in \mathcal{Y}\)。繼續定義\(X,Y\)分別是在輸入空間\(\mathcal{X}\)和輸出空間\(\mathcal{Y}\)上的隨機變數,\(P(X,Y)\)表示\(X\)\(Y\)的聯合機率分佈,且訓練資料集

\[T=\{(\bm{x_1},y_1), (\bm{x_2},y_2),\cdots, (\bm{x_N},y_N)\} \]

\(P(X,Y)\)獨立同分布產生。

貝葉斯總體模型

對於一個分類任務,我們可以使用判別方法直接計算樣本\(x\)為所有類別的機率,並透過最大的類別機率來獲得其類別即:
\begin{equation}
y^{hat} = \mathop\arg\max\limits_{c_k}P(Y=c_k|X=\bm{x}), k=1,2,\cdots,K
\end{equation}
我們也可以透過生成方法估計樣本的總體分佈並間接獲得樣本為每個類別的機率即:

\[\begin{align} P(Y=c_k|X=\bm{x})&=\frac{P(X=\bm{x},Y=c_k)}{P(X=\bm{x})}\notag \\ &=\frac{P(Y=c_k)P(X=\bm{x}|Y=c_k)}{P(X=\bm{x})}\notag \\ &=\frac{P(Y=c_k)P(X=\bm{x}|Y=c_k)}{\sum\limits_{i=1}^k P(Y=c_k)P(X=\bm{x}|Y=c_k)}\\ \end{align} \]

這樣就基本構成了貝葉斯模型,但僅僅這樣是不夠的,因為\(P(X=\bm{x}|Y=c_k)\)是很難求得的,\(\bm{x}\)\(n\)維的向量,其組合太大,若假設在\(\bm{x}\)中,其每維維可取值\(S_j\)\(j\)代表每一維,\(j=1,2,\cdots,n\),那麼對於一個樣本\(\bm{x}\)其預測為\(c_k\)一個類別所含有的引數就為\(\prod\limits_{j=1}^{n}S_j\),若要得到這個樣本的全部類別,那麼需要的引數量就是\(K\prod\limits_{j=1}^{n}S_j\),顯然這樣做太複雜了,我們需要統計的組合太多,怎麼辦?

一種簡化計算的方式是,假定每個維度的特徵之前是互不相關的,雖然這樣會損失掉很多原有相關的資訊,但是可以大大的減少引數量,如下所示:

\[\begin{align} P(X=\bm{x}|Y=c_k)&=P(X^{(1)}=x^{(1)},X^{(2)}=x^{(2)},\cdots,X^{(n)}=x^{(n)}|Y=c_k)\notag \\ &=P(X^{(1)}=x^{(1)}|Y=c_k)P(X^{(2)}=x^{(2)}|Y=c_k)\cdots P(X^{(n)}=x^{(n)}|Y=c_k)\notag \\ &=\prod\limits_{j=1}^nP(X^{(j)}=x^{(j)}|Y=c_k) \end{align} \]

這樣引數量可以由\(K\prod\limits_{j=1}^nS_j\)降低為\(K\sum\limits_{j=1}^nS_j\),毫無疑問,這無疑是一個巨大的突破,儘管失去了特徵之間的相關性資訊。
\((3)\)帶入\((2)\)中可得:

\[\begin{align} P(Y=c_k|X=\bm{x})&=\frac{P(Y=c_k)P(X=\bm{x}|Y=c_k)}{\sum\limits_{i=1}^k P(Y=c_k)P(X=\bm{x}|Y=c_k)}\notag \\ &=\frac{P(Y=c_k)\prod\limits_{j=1}^nP(X^{(j)}=x^{(j)}|Y=c_k)}{\sum\limits_{i=1}^k\{P(Y=c_k)\prod\limits_{j=1}^nP(X^{(j)}=x^{(j)}|Y=c_k)\}} \end{align} \]

對於同一個樣本\(\bm{x}\),其共需要預測\(K\)個類別\(c_1,c_2,\cdots,c_K\),但從上式可知,無論預測哪個類別,在分母中,會計算所有類別的相關資訊,而這對於所有類別都是相同的,所以分母部分可以省略。故最終的模型為:

\[\begin{align} P(Y=c_k|X=\bm{x})&={P(Y=c_k)\prod\limits_{j=1}^nP(X^{(j)}=x^{(j)}|Y=c_k)} \end{align} \]

另外幾個需要區分的點是:
先驗機率:即透過樣本可以統計出來的機率。
後驗機率:需要透過轉換求取的機率,不能直接統計得到。

極大似然估計

透過貝葉斯模型,我們將一個後驗機率透過條件機率公式轉換成了求解\(P(X, Y)\)的分佈並透過簡化版的先驗機率(特徵獨立)來估計分佈\(P(X,Y)\)。但是這裡面有一個問題沒有解決,那就是先驗機率\(P(X^{(j)}=x^{(j)}|Y=c_k)\)\(P(Y=c_k)\)如何求解?
當然一種非常直觀的計算方式就是直接統計滿足上面條件的樣本佔總體樣本的比例,所以很自然的我們可以得到下面的兩個計算式子:

\[\begin{equation} P(Y=c_k) = \frac{\sum\limits_{i=1}^{N}I(y_i=c_k)}{N} \end{equation} \]

\[\begin{equation} P(X^{(j)}=a_{jl}|Y=c_k)=\frac{\sum\limits_{i=1}^N I(x_i^{(j)}=a_{jl},y_i=c_k)}{\sum\limits_{i=1}^N I(y_i=c_k)} \end{equation} \]

其中\(a_{jl}\)表示第\(j\)個特徵的第\(i\)個可能取的值,\(x_i^{(j)}\)表示第\(i\)個樣本的第\(j\)個特徵的值。
但是為什麼可能這樣表示呢?我們透過極大似然估計來證明上述兩個等式成立。
\(P(Y=c_k)\)的機率,按照極大似然函式的思想就是求解當\(P(Y=c_k)\)為多少時,可以使得能夠最有可能產生這麼一群樣本。
因此,我們可以假設\(\theta=P(Y=c_k)\)為引數,那麼\(1-\theta=P(Y\neq c_k)\)。並且我們已經假設過所有樣本是獨立同分布產生的,故可以構造如下的似然函式:

\[L(\{\bm{x_1},y_1\},\{\bm{x_2},y_2\},\{\bm{x_N},y_N\};\theta)=\theta^{\sum\limits_{i=1}^N I(y_i=c_k)}(1-\theta)^{N-\sum\limits_{i=1}^NI(y_i=c_k)} \]

兩邊取自然對數得:

\[\ln L=\sum\limits_{i=1}^N I(y_i=c_k)\ln\theta + (N-\sum\limits_{i=1}^NI(y_i=c_k)) \ln(1-\theta) \]

兩邊求導

\[\frac{L^{'}}{L}=\frac{\sum\limits_{i=1}^N I(y_i=c_k)}{\theta} + \frac{\sum\limits_{i=1}^NI(y_i=c_k)-N}{1-\theta} \]

令其為0\(\Rightarrow\)\(\theta=\frac{\sum\limits_{i=1}^{N}I(y_i=c_k)}{N}\)

對於\(P(X^{(j)}=a_{jl}|Y=c_k)\),我們先對其進行轉換:

\[P(X^{(j)}=a_{jl}|Y=c_k)=\frac{P(X^{(j)}=a_{jl},Y=c_k)}{P(Y=c_k)} \]

由於分母已經求出,因此只需再求出分子即可,我們使用相同的思想,將樣本分為兩部分,第一部分樣本滿足$$P(X^{(j)}=a_{jl},Y=c_k)$$,第二部分取其補集。同樣的,我們讓機率引數\(\theta=P(X^{(j)}=a_{jl},Y=c_k)\),那麼\(1-\theta\)=不同時滿足上述條件的機率。
根據樣本都是獨立同分布產生的,我們構造相似的似然函式

\[L(\theta)=\theta^{\sum\limits_{i=1}^N I(x_i^{(j)}=a_{jl},y_i=c_k)}(1-\theta)^{N-\sum\limits_{i=1}^N I(x_i^{(j)}=a_{jl},y_i=c_k)} \]

顯然可以求出極大值\(\theta=\frac{\sum\limits_{i=1}^N I(x_i^{(j)}=a_{jl},y_i=c_k)}{N}\),所以易得

\[P(X^{(j)}=a_{jl}|Y=c_k)=\frac{\sum\limits_{i=1}^N I(x_i^{(j)}=a_{jl},y_i=c_k)}{\sum\limits_{i=1}^N I(y_i=c_k)} \]

貝葉斯估計

極大似然估計雖然可以計算出先驗機率,但是可能會出現估計引數的機率值為0的情況,即滿足\(x_i^{(j)}=a_{jl}\)\(y_i=c_k\)的樣本數量為0。(這通常是不合理的,因為我們得到的樣本本就是一個取樣,無法保證完全近似全體樣本的分佈,哪怕機率很小通常也不會設為0),那麼如何避免這種情況?
一種處理方式就是新增係數,如下式:

\[\begin{equation} P(X^{(j)}=a_{jl}|Y=c_k)=\frac{\sum\limits_{i=1}^N I(x_i^{(j)}=a_{jl},y_i=c_k)+\lambda}{\sum\limits_{i=1}^N I(y_i=c_k)+S_j\lambda} \end{equation} \]

\(\lambda=0\)時為極大似然估計,當\(\lambda=1\)時成為拉普拉斯平滑,滿足下式:

\[\begin{equation} \begin{cases} P_\lambda(X^{(j)}=a_{jl}|Y=c_k)>0\\ \sum\limits_{i=1}^{S_j}P(X^{(j)}=a_{jl}|Y=c_k)=1 \end{cases} \end{equation} \]

對於第二個式子,相當於把\(j\)維的每一個值分成了一份,公有\(S_j\)份,所有機率最後相加為1。
同樣的對\(P(Y=c_k)\)也可以進行改寫。

\[\begin{equation} P(Y=c_k) = \frac{\sum\limits_{i=1}^{N}I(y_i=c_k) + \lambda}{N+K\lambda} \end{equation} \]

相關文章