前言
筆者一直在ipad上做手寫筆記,最近突然想把筆記搬到博客上來,也就有了下面這些。因爲本是給自己看的筆記,所以內容很簡陋,只是提了一些要點。隨緣更新。
正文
生成模型和判別模型的區別
生成模型:學習得到聯合概率分佈P(x,y),即特徵x和標記y共同出現的概率,然後求條件概率分佈。能夠學習到數據生成的機制。
判別模型:學習得到條件概率分佈P(y|x),即在特徵x出現的情況下標記y出現的概率。
引用知乎上我看到的一個舉例,要確定一個羊是山羊還是綿羊
用判別模型的方法是從歷史數據中學習到模型,然後通過提取這隻羊的特徵來預測出這隻羊是山羊的概率,是綿羊的概率。
利用生成模型是根據山羊的特徵首先學習出一個山羊的模型,然後根據綿羊的特徵學習出一個綿羊的模型,然後從這隻羊中提取特徵,放到山羊模型中看概率是多少,在放到綿羊模型中看概率是多少,哪個大就是哪個。
爲什麼不使用迴歸模型
分類問題也是確定一條線,將我們要分類的數據集分成若干種。分類問題應該是這條線將兩邊的模型分得越開越好,但是如果我們採用迴歸模型去確定這條線,迴歸模型的loss function是計算點到線的距離的平方和,那距離越遠loss function的值越大,那和我們的意願就背道而馳了。所以我們如果把分類問題應迴歸模型硬解,會得不到一個好的模型。例如下圖中綠線是我們想要得到的,但是紫線是迴歸模型所認爲的最佳的模型。
在多分類問題中,類別1設爲1,類別2設爲2,類別3設爲3,如果採用迴歸模型,會認爲1、2或2、3比較接近,但實際上並沒有這種關係的存在,這會導致我們的model出現問題。
生成模型 —— 後驗概率
高斯分佈
f μ , Σ = 1 ( 2 π ) D 2 1 ∣ Σ ∣ 1 2 exp [ − 1 2 ( x − μ ) T Σ − 1 ( x − μ ) ] f_{\mu ,\Sigma }=\frac {1}{( 2\pi ) ^{\frac {D}{2}}}
\dfrac {1}{\left| \Sigma \right| ^{\frac {1}{2}}}\exp[-\dfrac {1}{2}\left( x-\mu \right) ^{T}\Sigma ^{-1}\left( x- \mu \right)] f μ , Σ = ( 2 π ) 2 D 1 ∣ Σ ∣ 2 1 1 exp [ − 2 1 ( x − μ ) T Σ − 1 ( x − μ ) ]
μ \mu μ 爲均值向量
Σ \Sigma Σ 爲方差矩陣
D D D 爲 x x x 的維數
這是一個概率密度函數,簡單的說可以把它看成一個function,輸入 x x x 輸出 x x x 的概率(當然這不是概率,但和概率成正比)。
分類模型(Step1:build model)
C 1 = C_1= C 1 = { 種類一 },C 2 = C_2= C 2 = { 種類二 }
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 ) = P ( x ∣ C 1 ) P ( C 1 ) + P ( x ∣ C 2 ) P ( C 2 ) P ( x ∣ C 1 ) P ( C 1 )
P ( x ∣ C 1 ) = f μ 1 , Σ 1 P(x|C_1)=f_{\mu^1 ,\Sigma^1 } P ( x ∣ C 1 ) = f μ 1 , Σ 1
P ( x ∣ C 2 ) = f μ 2 , Σ 2 P(x|C_2)=f_{\mu^2 ,\Sigma^2 } P ( x ∣ C 2 ) = f μ 2 , Σ 2
需要求解出兩組 μ , Σ \mu,\Sigma μ , Σ
最大似然估計
假設有 n n n 個點,L ( μ , Σ ) = f μ , Σ ( x 1 ) f μ , Σ ( x 2 ) . . . f μ , Σ ( x n ) L(\mu,\Sigma)=f_{\mu,\Sigma}(x_1)f_{\mu,\Sigma}(x_2)...f_{\mu,\Sigma}(x_n) L ( μ , Σ ) = f μ , Σ ( x 1 ) f μ , Σ ( x 2 ) . . . f μ , Σ ( x n ) 是生成這些點的概率(說成概率更容易理解),也成爲樣本的似然函數。
爲使得 L ( μ , Σ ) L(\mu,\Sigma) L ( μ , Σ ) 最大的 L ( μ , Σ ) L(\mu,\Sigma) L ( μ , Σ ) 記爲( μ ∗ , Σ ∗ ) (\mu^*,\Sigma^*) ( μ ∗ , Σ ∗ ) ,即所有 L ( μ , Σ ) L(\mu,\Sigma) L ( μ , Σ ) 的最大似然估計。
我們的目標是使生成這些的點概率最大,即我們要求 ( μ ∗ , Σ ∗ ) (\mu^*,\Sigma^*) ( μ ∗ , Σ ∗ )
總結一下:極大似然估計就是先假設生成數據(數據分佈)的模型已知(比如高斯分佈),但是模型的具體參數不知(不知道高斯分佈中的均值和標準差),通過已有的數據,進行參數的推斷求解,使得該模型(高斯分佈)生成已有觀測數據的可能性最大。
目標函數(Step2:Goodness of function)
arg max μ , Σ L ( μ , Σ ) \arg \max _{\mu ,\Sigma } L(\mu ,\Sigma ) arg μ , Σ max L ( μ , Σ )
求解(Step3:the best function)
利用微分等於0,易得:
μ ∗ = 1 n ∑ i = 1 n x i \mu^* = \frac{1}{n}\sum ^{n}_{i=1}x_i μ ∗ = n 1 i = 1 ∑ n x i
Σ ∗ = 1 n ∑ i = 1 n ( x i − μ ∗ ) ( x i − μ ∗ ) T \Sigma^*=\frac{1}{n}\sum^{n}_{i=1}(x_i-\mu^*)(x_i-\mu^*)^T Σ ∗ = n 1 i = 1 ∑ n ( x i − μ ∗ ) ( x i − μ ∗ ) T
模型優化(協方差)
我們通常不會給每個高斯分佈都去計算一套不同的最大似然估計,Σ \Sigma Σ 和輸入的feature成平方關係,當平方很大時,Σ \Sigma Σ 就會變的非常巨大,一是計算時間太長,二是容易過擬合。因此我們給每個高斯分佈相同的 Σ \Sigma Σ 。
公式轉變爲(以二分類爲例):
arg max μ 1 , μ 2 , Σ L ( μ 1 , μ 2 , Σ ) \arg \max _{\mu_1, \mu_2 ,\Sigma } L(\mu_1,\mu_2 ,\Sigma ) arg μ 1 , μ 2 , Σ max L ( μ 1 , μ 2 , Σ )
L ( μ 1 , μ 2 , Σ ) = f μ 1 , Σ ( x 1 ) . . . f μ , Σ ( x n ) ∗ f μ 2 , Σ ( x n + 1 ) . . . f μ 2 , Σ ( x n + m ) L(\mu^1,\mu^2,\Sigma)=f_{\mu^1,\Sigma}(x_1)...f_{\mu,\Sigma}(x_n)*f_{\mu^2,\Sigma}(x_{n+1})...f_{\mu^2,\Sigma}(x_{n+m}) L ( μ 1 , μ 2 , Σ ) = f μ 1 , Σ ( x 1 ) . . . f μ , Σ ( x n ) ∗ f μ 2 , Σ ( x n + 1 ) . . . f μ 2 , Σ ( x n + m )
求解:
μ 1 , μ 2 \mu_1,\mu_2 μ 1 , μ 2 和原先一致
μ 1 = 1 n ∑ i = 1 n x i \mu_1 = \frac{1}{n}\sum ^{n}_{i=1}x_i μ 1 = n 1 i = 1 ∑ n x i
μ 2 = 1 n ∑ i = n + 1 n + m x i \mu_2 = \frac{1}{n}\sum ^{n+m}_{i=n+1}x_i μ 2 = n 1 i = n + 1 ∑ n + m x i
Σ \Sigma Σ 爲二者加權平均
Σ = n m + n Σ 1 + m n + m Σ 2 \Sigma=\frac{n}{m+n}\Sigma_1+\frac{m}{n+m}\Sigma_2 Σ = m + n n Σ 1 + n + m m Σ 2
優化過後的分類曲線變成了線性的
一個合適的概率分佈模型
你可能會問爲什麼用高斯分佈,用李宏毅老師的話來說就是,如果我用別的分佈模型你也會問同樣的問題。
別的分佈模型當然可以使用,例如二分類問題我們可以使用伯努利分佈。高斯分佈更加通用、普遍,所以我們在此用是用高斯分佈舉例,並不是一定要用高斯分佈。
後驗概率公式推導
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 ) = P ( x ∣ C 1 ) P ( C 1 ) + P ( x ∣ C 2 ) P ( C 2 ) P ( x ∣ C 1 ) P ( C 1 )
經過處理你會發現這是一個關於 z z z 的sigmiod函數(這下知道Sigmoid函數是哪來的吧)
= 1 1 + p ( x ∣ C 2 ) P ( C 2 ) p ( x / C 1 ) p ( C 1 ) = 1 1 + e x p ( z ) = σ ( z ) =\dfrac {1}{1+\dfrac {p\left( x|C_2 \right) P\left( C_2\right) }{p\left( x/C_{1}\right) p\left( C_{1}\right) }}=\frac{1}{1+exp(z)}=\sigma(z) = 1 + p ( x / C 1 ) p ( C 1 ) p ( x ∣ C 2 ) P ( C 2 ) 1 = 1 + e x p ( z ) 1 = σ ( 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)} z = l n P ( x ∣ C 2 ) P ( C 2 ) P ( x ∣ C 1 ) P ( C 1 )
然後一同操作猛如虎,公式我就不打了,太長了,估計你們也沒有興趣看。反正最後得到
z = ( μ 1 − μ 2 ) T Σ − 1 x − 1 2 ( μ 1 ) T μ 1 + 1 2 ( μ 2 ) T Σ − 1 μ 2 + l n n m z=(\mu_1-\mu_2)^T\Sigma^{-1}x-\frac{1}{2}(\mu_1)^T\mu_1+\frac{1}{2}(\mu_2)^T\Sigma^{-1}\mu_2+ln\frac{n}{m} z = ( μ 1 − μ 2 ) T Σ − 1 x − 2 1 ( μ 1 ) T μ 1 + 2 1 ( μ 2 ) T Σ − 1 μ 2 + l n m n
我們令
w = ( μ 1 − μ 2 ) T Σ − 1 w=(\mu_1-\mu_2)^T\Sigma^{-1} w = ( μ 1 − μ 2 ) T Σ − 1
b = 1 2 ( μ 1 ) T μ 1 + 1 2 ( μ 2 ) T Σ − 1 μ 2 + l n n m b=\frac{1}{2}(\mu_1)^T\mu_1+\frac{1}{2}(\mu_2)^T\Sigma^{-1}\mu_2+ln\frac{n}{m} b = 2 1 ( μ 1 ) T μ 1 + 2 1 ( μ 2 ) T Σ − 1 μ 2 + l n m n
w w w 和 b b b 都是常數,也就是說,最後我們得到的後驗模型是個線性模型。
後記
其實判別模型和生成模型應該一起講的,因爲這兩個模型的推到思路是連貫的。但是實在太長了,就先把生成模型寫出來了,判別模型改天再寫。