機器學習: 貝葉斯分類器

在機器學習的監督學習裏,貝葉斯分類器算是很有名的一個方法了,而且這個方法效果還不錯。

貝葉斯方程

我們先來複習一下大學裏高數的貝葉斯方程

P(A|B) = \frac{P(B|A) \times P(A)}{P(B)}

只要記住這個方程,後面就都很容易理解 了。

爲什麼要用貝葉斯

爲什麼一定是貝葉斯呢?就是因爲貝葉斯可以根據 P(A|B) 去推 P(B|A)。我們先看下面的數據集。

現在你根據這個數據集去生成一個模型(現在還不知道怎麼生成),然後我給 X = 0,你預測 X=0 時是 Bad 還是 Good。如果用條件概率來表示應該就是求

P(Y=Good|X=0)

P(Y=Bad|X=0)

兩個概率,然後比一下哪個概率大,概率大的那個就是預測值嘍~。現在看傻眼了,這概率我怎麼求呀,一點線索沒有。OK,現在貝葉斯就出來求這兩個概率了,這裏就求上面的概率吧。

P(Y=Good|X=0) = \frac{P(X=0|Y=Good) \times P(Y=Good)}{P(X=0)}

其中,已知 Y=Good 是有 15+287+5 個了,所以

P(X=0|Y=Good) = \frac{15}{15+287+5}=\frac{15}{307}

P(Y=Good) = \frac{15+287+5}{15+287+5+42+338+3}=\frac{307}{690}

P(X=0) = \frac{42+15}{42+15+338+287+3+5}=\frac{57}{690}

整合一下概率爲

P(Y=Good|X=0) = \frac{P(X=0|Y=Good) \times P(Y=Good)}{P(X=0)} =\frac{15}{57} \approx 0.2632

以此類推我們把其它的概率都算出來,下面最右邊的表格就是我們對給定 X 值的預測概率,其中綠色爲較高的概率,會分到那個類。

貝葉斯分類器就沒了,原理就是這麼簡單。不過,像上面使用貝葉斯在細節上會有一點問題,下面來說說這些問題。

Normalization

現在我們慢慢優化上面的分類器。假設現在我們的特徵值變成 3 個,分別是 A,B,C 三個,數據集是這樣的

不錯呀,那麼擼起袖子算預測值唄。但是你有沒有想到一種情況是 A,B,C 對應的值是 0 呢?如下表。換句話說我的數據集裏就沒 有一項是 A=0,B=0,C=0,那該怎麼辦呢?

所以一般計算後的結果會加一個小數使其結果不爲 0 就好了,這個過程叫做 Normalization.

Naive Bayes

Naive Bayes 分類器應該都很耳熟了,它主要解決的問題是貝葉斯的計算問題。剛剛也就三個特徵值,那如果再多一點那計算量就很大了。公式可能寫成這樣

P(Y=y∣F_1=f_1,…,F_k=f_k)=\max_y {\frac{P(F_1=f_1,…,F_k=f_k|Y=y) \times P(Y=y)}{P(F_1=f_1,…,F_k=f_k)}}

而且我們不能保證所有特徵值都會有對應的 Y 值,如有可能存在 A_1=0,A_2=0,...A_10000=0 沒有對應的 Y 值。那這樣就計算不了了。所以我們“大概地”,“理想化地”把所有特徵值都看成是獨立的,於是計算預測概率時就有

P(F_1=f_1,…,F_k=f_k|Y=y) \approx P(F_1=f_1|Y=y) \times P(F_2=f_2|Y=y) \times ... \times P(F_k=f_k|Y=y)

將上面的式子整理一下

P(F_1=f_1|Y=y) \times P(F_2=f_2|Y=y) \times ... \times P(F_k=f_k|Y=y) = \prod^k_{i=1}{P(F_i=f_i|Y=y)}

再代回原來的公式變成

P(Y=y∣F_1=f_1,…,F_k=f_k) \approx \max_y {\frac{P(Y=y) \times \max_y {\prod^k_{i=1}{P(F_i=f_i|Y=y)}}}{P(F_1=f_1,…,F_k=f_k)}}

因爲我們只是每次對給定相同的特徵值去對比預測值,所以分母是一樣的,我們只需要關注分子就可以了。因此,我們直接把分母去掉,只比較分子

要對比的預測值 \approx P(Y=y) \times \max_y {\prod^k_{i=1}{P(F_i=f_i|Y=y)}}

因爲這只是我們假想所有特徵值是獨立的,因此這個方法很 Naive,也就叫成了 Naive Bayes Classifier.

Naive Bayes vs Joint Bayes

下面通過一個例子來對比一下這兩個方法

Naive Bayes

因爲特徵值是獨立的,所以 \hat{p}(x_1, x_2|y=1) 不是 0 而是 \hat{p}(x_1|y=1)\hat{p}(x_2|y=1) 的乘積。

Joint Bayes

Joint Bayes 也就是之前的 Bayes 啦。這裏特徵值不是獨立的,而且我們找不到 y=1 的條件下 x_1=1x_2=1 同時成立的樣本,因此 \hat{p}(x_1, x_2|y=1) = 0

從上面例子可以看到,如果不用 Naive Bayes 來做,會出現預測概率爲 0 的情況,這是很不好的。Naive Bayes 就可以避免這種結果,而且在實際使用中 Naive Bayes 效果還挺不錯的,雖然它是一個估算值。

Gaussian Bayes

下面說說高斯貝葉斯分類器。首先說下高斯模型,也就是正態分佈模型。

這裏面 \mu 表示平均數, \sigma 表示方差,函數的公式是

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

爲什麼又搞這個玩意呢?因爲有些特徵值是服從高斯分佈的(正態分佈),我們首先可以通過數據集裏的特徵值算出這個特徵值服從高斯分佈的平均值和方差,然後就得到了對應的高斯分佈方程。以後在給定特徵值 F_1=f1 時,我們就可以用這個方程去求對應的概率了,如下面代入 x = f_1,這裏假定已經算出 \mu\sigma

p(F_1=f_1|Y=y)=\frac{1}{\sigma \sqrt{2\pi}}e^{- \frac{{(f_1-\mu)}^2}{2\sigma^2}}

這樣就不用去找總數是多少,符合條件的有多少個,然後再一除得到概率值 。

錯誤率

最後應該要講講這個分類器的錯誤率了。在分兩個種類時,一般使用下面的不等式去看屬於 1 類還是 0 類。

p(y=0|x) < p(y=1|x)
p(y=0|x) > p(y=1|x)

可視化這兩個概率會得到圖

這裏有兩個相交的地方,紅色陰影表示 False Negative,也就是本來應該判爲 1 類的,這裏判成了 0 類;藍色陰影表示 False Positive,本來應該判爲 0 類,但是判成了 1 類。所以我們有以下公式去算每個區域的概率

  • True Positive Rate: \frac{p(y=1, \hat{y}=1)}{p(y=1)}
  • False Positive Rate: \frac{p(y=1, \hat{y}=0)}{p(y=1)}
  • False Negative Rate: \frac{p(y=0, \hat{y}=1)}{p(y=0)}
  • True Negative Rate: \frac{p(y=0, \hat{y}=0)}{p(y=0)}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章