機器學習入門之概率分類模型

分類

x -> function -> Class n

分類問題就是要找到一個函數使得給定輸入能輸出它所屬的類別。

又以寶可夢爲例,寶可夢有十八種屬性:電、火等

在這裏插入圖片描述

比如輸入是皮卡丘輸出就是電。

如何分類

首先要收集訓練數據

在二元分類模型(只有兩個類別)中:

輸入x,g(x) > 0 則 class1 否則 class2

那麼損失函數可以這樣定義:

L ( f ) = n δ ( f ( x n ) y ^ n ) L(f) = \sum_n \delta(f(x^n) ≠ \hat y^n)
也就是它的錯誤次數,越小說明這個函數越好。

下面通過概率論的知識來解決找到最好的函數問題。

在這裏插入圖片描述

給定兩個盒子,從這兩個盒子中隨機抽一個球出來,它是藍色的。
那麼這藍色的球從盒子1和盒子2中抽出來的機率分別是多少?

假設從盒子1中抽球的概率 P ( B 1 ) = 2 / 3 P(B_1)= 2/3 ,從盒子2中抽球的概率 P ( B 2 ) = 1 / 3 P(B_2)=1/3

並且盒子1裏面藍球的概率是 P ( B l u e B 1 ) = 4 / 5 P(Blue|B_1)=4/5 ,綠球的概率是 P ( G r e e n B 1 ) = 1 / 5 P(Green|B_1)=1/5
盒子2中藍球的概率是 P ( B l u e B 2 ) = 2 / 5 P(Blue|B_2)=2/5 ,綠球的概率是 P ( G r e e n B 2 ) = 3 / 5 P(Green|B_2)=3/5

那麼根據貝葉斯公式,可以計算出藍球從盒子1中抽出來的概率是:

P ( B 1 B l u e ) = P ( B l u e B 1 ) P ( B 1 ) P ( B l u e B 1 ) P ( B 1 ) + P ( B l u e B 2 ) P ( B 2 ) P(B_1|Blue) = \frac{P(Blue|B_1)P(B_1)}{P(Blue|B_1)P(B_1)+P(Blue|B_2)P(B_2)}

現在把盒子換成類別的話:

在這裏插入圖片描述

假設有兩個類別Class1和Class2。

給定一個x,那麼它屬於哪個類別呢?
如果知道從Class1中抽x的概率 P ( C 1 ) P(C_1) 和從Class2中抽x的概率 P ( C 2 ) P(C_2)

從Class1中抽到x的概率 P ( x C 1 ) P(x|C_1) 以及從Class2中抽到x的概率 P ( x C 2 ) P(x|C_2)

那麼可以計算x屬於Class1的概率有多大:

P ( C 1 x ) = P ( x C 1 ) P ( C 1 ) P ( x C 1 ) P ( C 1 ) + P ( x C 2 ) P ( C 2 ) P(C_1|x) = \frac{P(x|C_1)P(C_1)}{P(x|C_1)P(C_1)+P(x|C_2)P(C_2)}

這就叫做生成模型(Generative Mode)。顧名思義,有了這個模型,這可以用來生成x。

可以計算某一個x出現的機率 P ( x ) = P ( x C 1 ) P ( C 1 ) + P ( x C 2 ) P ( C 2 ) P(x)=P(x|C_1)P(C_1) +P(x|C_2)P(C_2) ,就可以知道x的分佈,然後就可以用這個分佈來生成x。

假設我們考慮水系(Water)和一般系(Normal)的神奇寶貝。

在這裏插入圖片描述

在訓練數據中,共有79只水系的,61只一般系的。

那從Class1中取得一隻寶可夢的機率是 P ( C 1 ) = 79 / ( 79 + 61 ) = 0.56 P(C_1)=79/(79+61)=0.56
那從Class2中取得一隻寶可夢的機率是 P ( C 1 ) = 61 / ( 79 + 61 ) = 0.44 = 1 P ( C 1 ) P(C_1)=61/(79+61)=0.44 = 1 - P(C_1)

在這裏插入圖片描述

那麼從水系的神奇寶貝中挑出一隻是海龜的機率( P ( W a t e r ) P(海龜|Water) )有多大?

也就是 P ( x C 1 ) = ? P(x|C_1) = ?

我們知道每個神奇寶貝都是用特徵(feature)向量來描述。

我們首先考慮防禦力(Defense)和特殊防禦力(SP Defense)這兩個特徵(因爲沒法畫出7個特徵的圖像出來…)

在這裏插入圖片描述

每個點都代表一隻寶可夢,如果給我們一個不在訓練數據中的新的神奇寶貝,比如海龜。

在這裏插入圖片描述

那麼從水系中挑出一隻神奇寶貝是海龜的機率是多少? P ( x W a t e r ) = ? P(x|Water) = ?

可以想象這79只神奇寶貝是從某個高斯分佈(正態分佈)中取樣出來,那麼找到海龜代表的那個點的機率就不是0。

那給定這79個點,怎麼找到這個高斯分佈。

高斯分佈常見的形式是:

f ( x ; μ , σ ) = 1 2 π σ e x p ( x μ ) 2 2 σ 2 f(x;\mu,\sigma)=\frac{1}{\sqrt{2\pi}\sigma}exp^{-\frac{(x-\mu)^2}{2\sigma^2}}

視頻中給出了另一個種形式:

在這裏插入圖片描述

可以把高斯分佈想成一個函數,這個函數的輸入就是向量x,代表某隻寶可夢的數值;
輸出就是這隻寶可夢從這個分佈中取樣出來的機率。

這個機率由均值 μ \mu 和協方差矩陣 Σ \Sigma 組成。

把不同的 μ \mu Σ \Sigma 代入這個函數,就能得到不同的圖像,x的機率也不一樣。

在這裏插入圖片描述

同樣的 Σ \Sigma 不同的 μ \mu 得出來的圖形中機率分佈最高點的位置不一樣;

在這裏插入圖片描述

同樣的 μ \mu 和不同的 Σ \Sigma 的機率分佈最高點位置一樣,但是分佈發散的程度不一樣。

假設有一個高斯分佈存在,從這個分佈中取樣79次後,取出這79個點。

那麼這個高斯分佈到底是什麼樣的呢?

假設我們可以根據這個79個點估測出高斯分佈的 μ \mu Σ \Sigma

在這裏插入圖片描述

接着給一個新的點x,它不在我們過去所見過的79個點裏面,我們已經知道了 μ \mu Σ \Sigma ,我們就可以寫出高斯函數

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-PGlK5jBU-1574262013387)(_v_images/20191119222340393_28360.png)]

然後把x代進去,就可以算出這個x從這個分佈出取樣出來的機率,如果x越接近中心點,那麼取樣出來的概率就越大。

那麼現在的問題就是如何找到這個 μ \mu Σ \Sigma ,用的方法是極大似然。

極大似然

可以想象這個79個點能從任何 μ \mu Σ \Sigma 的高斯分佈中生成出來。

從高斯分佈中生成能生成任何一個點,不過幾率有高低之別。

在這裏插入圖片描述

如上圖,左下角那個分佈生成這個79個點的可能性(Likelihood)比右上角的分佈要高。

所以給定 μ \mu Σ \Sigma ,就可以算出生成這些點的可能性 就是取樣出每個點的機率之積:

L ( μ , Σ ) = f μ , Σ ( x 1 ) f μ , Σ ( x 2 ) f μ , Σ ( x 3 ) f μ , Σ ( x 79 ) L(\mu,\Sigma) = f_{\mu,\Sigma}(x^1)f_{\mu,\Sigma}(x^2)f_{\mu,\Sigma}(x^3)\cdots f_{\mu,\Sigma}(x^{79})

上面的 L L 不是代表損失函數,而是取Likelihood中的首字母。

所以,接下來要做的事情是找到生成這個79個點可能性最大(maximum likelihood)的高斯分佈( ( μ , Σ ) (\mu^*,\Sigma^*) )。

μ , Σ = a r g max μ , Σ L ( μ , Σ ) \mu^*,\Sigma^*=arg\,\max_{\mu,\Sigma}L(\mu,\Sigma)

我們可以窮舉所有的 μ \mu Σ \Sigma ,找到使上面式子結果最大。

平均就是 μ \mu^*

μ = 1 79 n = 1 79 x n \mu^* = \frac{1}{79} \sum_{n=1}^{79} x^n
Σ \Sigma^*

Σ = 1 79 n = 1 79 ( x n μ ) ( x n μ ) T \Sigma^* = \frac{1}{79} \sum_{n=1}^{79} (x^n - \mu^*)(x^n - \mu^*)^T

然後根據上面的公式算出來兩個類別的 μ \mu Σ \Sigma :

在這裏插入圖片描述

現在我們就可以進行分類了!
我們只要算出 P ( C 1 x ) P(C_1|x) 的機率,根據下式:

P ( C 1 x ) = P ( x C 1 ) P ( C 1 ) P ( x C 1 ) P ( C 1 ) + P ( x C 2 ) P ( C 2 ) P(C_1|x) = \frac{P(x|C_1)P(C_1)}{P(x|C_1)P(C_1)+P(x|C_2)P(C_2)}

如果 P ( C 1 x ) > 0.5 P(C_1|x) > 0.5 ,那麼x就屬於類別1(水系)。

我們已知了 P ( C 1 ) P(C_1) P ( C 2 ) P(C_2) ,然後代入 μ 1 \mu^1 Σ 1 \Sigma^1 得出 P ( x C 1 ) P(x|C_1) 的值,同理可得出 P ( x C 2 ) P(x|C_2) 的值,整個式子的結果就可以計算出來了。

那結果怎樣?

在這裏插入圖片描述

藍色的點是水系的神奇寶貝的分佈,紅點時一般系的分佈。

在這裏插入圖片描述

紅色區域機率大於0.5是類別1;藍色區間機率小於0.5,是類別2。

然後把這個模型用於測試數據,發現正確率只有47%,但此時我們只考慮了兩個特徵。

我們把所有特徵都考慮進來(共7個),結果準確率也只有54%。
上面得出的分類結果不太好,我們優化一下模型,讓兩個類別共用同一個 Σ \Sigma

在這裏插入圖片描述

假設水系79個神奇寶貝是從 μ 1 , Σ \mu^1,\Sigma 的高斯分佈生成出來的,同時另外61只(編號從80開始)神奇寶貝從 μ 2 , Σ \mu^2,\Sigma 的高斯分佈生成出來,這兩個分佈的協方差矩陣是同一個。

那該怎麼計算最大似然呢?

L ( μ 1 , μ 2 , Σ ) = f μ 1 , Σ ( x 1 ) f μ 1 , Σ ( x 2 ) f μ 1 , Σ ( x 3 ) f μ 1 , Σ ( x 79 ) × f μ 2 , Σ ( x 80 ) f μ 2 , Σ ( x 81 ) f μ 2 , Σ ( x 82 ) f μ 2 , Σ ( x 140 ) L(\mu^1,\mu^2,\Sigma) = f_{\mu^1,\Sigma}(x^1)f_{\mu^1,\Sigma}(x^2)f_{\mu^1,\Sigma}(x^3)\cdots f_{\mu^1,\Sigma}(x^{79}) \\ \times f_{\mu^2,\Sigma}(x^{80})f_{\mu^2,\Sigma}(x^{81})f_{\mu^2,\Sigma}(x^{82})\cdots f_{\mu^2,\Sigma}(x^{140})

μ 1 , Σ \mu^1,\Sigma 產生 x 1 x^1 x 79 x^{79} ,用 μ 2 , Σ \mu^2,\Sigma 產生 x 80 x^{80} x 140 x^{140}

μ 1 \mu^1 μ 2 \mu^2 的計算方法和前面的相同。

Σ \Sigma 的取值爲

Σ = 79 140 Σ 1 + 61 140 Σ 2 \Sigma = \frac{79}{140}\Sigma^1 + \frac{61}{140}\Sigma^2

然後再看一下結果,看有什麼改進沒

在這裏插入圖片描述
在考慮了所有特徵的情況下,準確率到了73%,右邊的模型也稱爲線性模型。

總結一下上面的步驟

在這裏插入圖片描述

如果所有特徵(維度)都是獨立的,那麼你可以嘗試使用樸素貝葉斯分類器

Sigmoid 函數

P ( C 1 x ) = P ( x C 1 ) P ( C 1 ) P ( x C 1 ) P ( C 1 ) + P ( x C 2 ) P ( C 2 ) P(C_1 | x ) = \frac{P(x|C_1)P(C_1)}{P(x|C_1)P(C_1) + P(x|C_2)P(C_2)}

我們來整理下這個式子,上下同除分子,得到:

1 1 + P ( x C 2 ) P ( C 2 ) P ( x C 1 ) P ( C 1 ) \frac{1}{1 + \frac{P(x|C_2)P(C_2)}{P(x|C_1)P(C_1)}}
z = l n P ( x C 1 ) P ( C 1 ) P ( x C 2 ) P ( C 2 ) z = ln \frac{P(x|C_1)P(C_1)}{P(x|C_2)P(C_2)}

因爲 l n 1 x = l n x 1 = l n x ln \frac{1}{x} = ln x^{-1} = - ln x 以及 e l n x = x e ^ {ln x} = x

所以就有上式等於:

1 1 + e z = σ ( z ) \frac{1}{1 + e ^{-z}} = \sigma (z)

這個函數叫做Sigmoid函數,它的圖形爲:

在這裏插入圖片描述

接下來算一下 z z 應該是怎樣的 z = l n P ( x C 1 ) P ( C 1 ) P ( x C 2 ) P ( C 2 ) z = ln \frac{P(x|C_1)P(C_1)}{P(x|C_2)P(C_2)}

P ( C 1 x ) = σ ( z ) ,    z = l n P ( x C 1 ) P ( C 1 ) P ( x C 2 ) P ( C 2 ) P(C_1|x)=\sigma(z),\,\,z = ln \frac{P(x|C_1)P(C_1)}{P(x|C_2)P(C_2)} \\
把相乘的部分變成相加得

z = l n P ( x C 1 ) P ( x C 2 ) + l n P ( C 1 ) P ( C 2 ) z = ln \frac{P(x|C_1)}{P(x|C_2)} + ln \frac{P(C_1)}{P(C_2)}

P ( C 1 ) P ( C 2 ) = N 1 N 1 + N 2 N 2 N 1 + N 2 = N 1 N 2 \frac{P(C_1)}{P(C_2)} = \frac{\frac{N_1}{N_1 + N_2}}{\frac{N_2}{N_1 + N_2}} = \frac{N_1}{N_2}

N 1 N_1 代表Class1在訓練數據集中出現的次數, N 2 N_2 代表Class2在訓練集中出現的次數。

P ( X C 1 ) = 1 ( 2 π ) D / 2 1 Σ 1 1 / 2 e x p { 1 2 ( x μ 1 ) T ( Σ 1 ) 1 ( x μ 1 ) } P(X|C_1) = \frac{1}{(2\pi)^{D/2}} \frac{1}{|\Sigma^1|^{1/2}}exp\{-\frac{1}{2}(x-\mu^1)^T(\Sigma^1)^{-1}(x-\mu^1)\}

P ( X C 2 ) = 1 ( 2 π ) D / 2 1 Σ 2 1 / 2 e x p { 1 2 ( x μ 2 ) T ( Σ 2 ) 1 ( x μ 2 ) } P(X|C_2) = \frac{1}{(2\pi)^{D/2}} \frac{1}{|\Sigma^2|^{1/2}}exp\{-\frac{1}{2}(x-\mu^2)^T(\Sigma^2)^{-1}(x-\mu^2)\}

l n P ( x C 1 ) P ( x C 2 ) = l n 1 ( 2 π ) D / 2 1 Σ 1 1 / 2 e x p { 1 2 ( x μ 1 ) T ( Σ 1 ) 1 ( x μ 1 ) } 1 ( 2 π ) D / 2 1 Σ 2 1 / 2 e x p { 1 2 ( x μ 2 ) T ( Σ 2 ) 1 ( x μ 2 ) } = l n Σ 2 1 / 2 Σ 1 1 / 2 e x p { 1 2 [ ( x μ 1 ) T ( Σ 1 ) 1 ( x μ 1 ) ( x μ 2 ) T ( Σ 2 ) 1 ( x μ 2 ) ] } = l n Σ 2 1 / 2 Σ 1 1 / 2 1 2 [ ( x μ 1 ) T ( Σ 1 ) 1 ( x μ 1 ) ( x μ 2 ) T ( Σ 2 ) 1 ( x μ 2 ) ] \begin{aligned} ln \frac{P(x|C_1)}{P(x|C_2)} &= ln \frac{\bcancel{\frac{1}{(2\pi)^{D/2}}} \frac{1}{|\Sigma^1|^{1/2}}exp\{-\frac{1}{2}(x-\mu^1)^T(\Sigma^1)^{-1}(x-\mu^1)\}} {\bcancel{\frac{1}{(2\pi)^{D/2}}} \frac{1}{|\Sigma^2|^{1/2}}exp\{-\frac{1}{2}(x-\mu^2)^T(\Sigma^2)^{-1}(x-\mu^2)\}} \\ &= ln \frac{|\Sigma^2|^{1/2}}{|\Sigma^1|^{1/2}} exp\{-\frac{1}{2}[(x-\mu^1)^T(\Sigma^1)^{-1}(x-\mu^1) - (x-\mu^2)^T(\Sigma^2)^{-1}(x-\mu^2)]\} \\ &= ln \frac{|\Sigma^2|^{1/2}}{|\Sigma^1|^{1/2}} - \frac{1}{2}[(x-\mu^1)^T(\Sigma^1)^{-1}(x-\mu^1) - (x-\mu^2)^T(\Sigma^2)^{-1}(x-\mu^2)] \end{aligned}
接下來把 ( x μ 1 ) T ( Σ 1 ) 1 ( x μ 1 ) (x-\mu^1)^T(\Sigma^1)^{-1}(x-\mu^1) 展開

( x μ 1 ) T ( Σ 1 ) 1 ( x μ 1 ) = x T ( Σ 1 ) 1 x x T ( Σ 1 ) μ 1 ( μ 1 ) T ( Σ 1 ) 1 x + ( μ 1 ) T ( Σ 1 ) 1 μ 1 = x T ( Σ 1 ) 1 x 2 ( μ 1 ) T ( Σ 1 ) 1 x + ( μ 1 ) T ( Σ 1 ) 1 μ 1 \begin{aligned} (x-\mu^1)^T(\Sigma^1)^{-1}(x-\mu^1) &= x^T(\Sigma^1)^{-1}x - x^T(\Sigma^1)\mu^1 - (\mu^1)^T(\Sigma^1)^{-1}x + (\mu^1)^T(\Sigma^1)^{-1}\mu^1 \\ &= x^T(\Sigma^1)^{-1}x - 2(\mu^1)^T(\Sigma^1)^{-1}x + (\mu^1)^T(\Sigma^1)^{-1}\mu^1 \end{aligned}

( x μ 2 ) T ( Σ 2 ) 1 ( x μ 2 ) (x-\mu^2)^T(\Sigma^2)^{-1}(x-\mu^2) 展開:

( x μ 2 ) T ( Σ 2 ) 1 ( x μ 2 ) = x T ( Σ 2 ) 1 x 2 ( μ 2 ) T ( Σ 2 ) 1 x + ( μ 2 ) T ( Σ 2 ) 1 μ 2 \begin{aligned} (x-\mu^2)^T(\Sigma^2)^{-1}(x-\mu^2) &= x^T(\Sigma^2)^{-1}x - 2(\mu^2)^T(\Sigma^2)^{-1}x + (\mu^2)^T(\Sigma^2)^{-1}\mu^2 \end{aligned}

所以 z z 可以寫成:

z = l n Σ 2 1 / 2 Σ 1 1 / 2 1 2 x T ( Σ 1 ) 1 x + ( μ 1 ) T ( Σ 1 ) 1 x 1 2 ( μ 1 ) T ( Σ 1 ) 1 μ 1 + 1 2 x T ( Σ 2 ) 1 x ( μ 2 ) T ( Σ 2 ) 1 x + 1 2 ( μ 2 ) T ( Σ 2 ) 1 μ 2 + l n N 1 N 2 \begin{aligned} z &= ln \frac{|\Sigma^2|^{1/2}}{|\Sigma^1|^{1/2}} - \frac{1}{2} x^T(\Sigma^1)^{-1}x + (\mu^1)^T(\Sigma^1)^{-1}x - \frac{1}{2} (\mu^1)^T(\Sigma^1)^{-1}\mu^1 \\ &+ \frac{1}{2}x^T(\Sigma^2)^{-1}x -(\mu^2)^T(\Sigma^2)^{-1}x + \frac{1}{2} (\mu^2)^T(\Sigma^2)^{-1}\mu^2 + ln \frac{N_1}{N_2} \end{aligned}

而我們上面說過,如果共用 Σ \Sigma 的話,那麼就有 Σ 1 = Σ 2 = Σ \Sigma_1 = \Sigma_2 = \Sigma

那麼上式有:

z = l n Σ 2 1 / 2 Σ 1 1 / 2 1 2 x T ( Σ 1 ) 1 x + ( μ 1 ) T ( Σ 1 ) 1 x 1 2 ( μ 1 ) T ( Σ 1 ) 1 μ 1 + 1 2 x T ( Σ 2 ) 1 x ( μ 2 ) T ( Σ 2 ) 1 x + 1 2 ( μ 2 ) T ( Σ 2 ) 1 μ 2 + l n N 1 N 2 = ( μ 1 μ 2 ) T Σ 1 x 1 2 ( μ 1 ) T ( Σ 1 ) 1 + 1 2 ( μ 2 ) T ( Σ 2 ) 1 μ 2 + l n N 1 N 2 \begin{aligned} z &= \bcancel{ln \frac{|\Sigma^2|^{1/2}}{|\Sigma^1|^{1/2}}} - \cancel{\frac{1}{2} x^T(\Sigma^1)^{-1}x} + (\mu^1)^T(\Sigma^1)^{-1}x - \frac{1}{2} (\mu^1)^T(\Sigma^1)^{-1}\mu^1 \\ &+ \cancel{\frac{1}{2}x^T(\Sigma^2)^{-1}x} -(\mu^2)^T(\Sigma^2)^{-1}x + \frac{1}{2} (\mu^2)^T(\Sigma^2)^{-1}\mu^2 + ln \frac{N_1}{N_2} \\ &= (\mu^1-\mu^2)^T\Sigma^{-1}x - \frac{1}{2}(\mu^1)^T(\Sigma^1)^{-1} + \frac{1}{2}(\mu^2)^T(\Sigma^2)^{-1}\mu^2 + ln \frac{N_1}{N_2} \end{aligned}

相關文章
相關標籤/搜索