從概率模型到邏輯分類
- 2019 年 10 月 3 日
- 筆記
我今天來推導一下根據 概率模型 來推導一下分類的問題。
題目的大概就是,我們抽取一個樣本,然後去判斷這個樣本應該屬於哪個分類。
首先大概的複習一下跟概率論相關的知識概率論的一些基礎知識
我們把問題限定為兩個類別的分類。即我們有一個(C_1)和(C_2)分類。然後抽取一個樣本(X_i),去判斷(X_i)應該屬於哪個分類。用概率的公式來描述我們的問題
(P(C_?|X_i)) 換言之 (P(C_1|X_i)=1-P(C_2|X_i)) 那麼我們只要求出其中一個概率即可。
根據貝葉斯公式,我們可知 (P(C_1|X_i) = frac{P(X_i|C_1)*P(C_1)}{P(X_i|C_1) * P(C_1) + P(X_i|C_2)*P(C_2)})
我們對公式進行一些簡單的變換:分子和分母同除以分子可以得到 (P(C_1|X_i)=frac{1}{1+frac{P(X_i|C_2)*P(C_2)}{P(X_i|C_1)*P(C_1)}})
我們設:(Z=ln(frac{P(X_i|C_1)P(C_1)}{P(X_i|C_2)P(C_2)}))得到了(P(C_1|X_i)=frac{1}{1+exp(-Z)})
我們進一步對Z進行變換:(Z=lnfrac{P(X_i|C_1)}{P(X_i|C_2)} + lnfrac{P(C_1)}{P(C_2)})
而(frac{P(C_1)}{P(C_2)}) 我們得到的辦法主要是查學習樣本的數量,(C_1)的數量為(N_1),(C_2)的數量為(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}]
帶入Z中可以得到[Z=lnfrac{P(X_i|C_1)}{P(X_i|C_1)}+ lnfrac{N_1}{N_2}]
我們假定我們的樣本是符合高斯(正態)分佈的,高斯分佈的概率密度公式如下
[f(x)=frac{1}{sqrt{2pi}sigma} exp(frac{(x-u)^2}{2sigma^2})]
即:
[P(X_i|C_1) = frac{1}{sqrt{2pi}sigma_1} exp(frac{(x_i-u_1)^2}{2sigma_1^2})]
[P(X_i|C_2) = frac{1}{sqrt{2pi}sigma_2} exp(frac{(x_i-u_2)^2}{2sigma_2^2})]
帶入以後,我們得到原式子簡化以後
[Z=lnfrac{frac{1}{sigma_1}}{frac{1}{sigma_2}} + lnfrac{exp(frac{(x_i-u_1)^2}{2sigma_1^2})}{exp(frac{(x_i-u_2)^2}{2sigma_2^2})}+lnfrac{N_1}{N_2}]
進一步簡化
[Z=lnfrac{sigma_2}{sigma_1} + frac{(x-u_1)^2}{2sigma_1^2} + frac{(x-u_2)^2}{2sigma_2^2}+lnfrac{N_1}{N_2}]
我們假定兩個分類的高斯分佈的方差是相等的,即(sigma_1==sigma_2==sigma) 得到
[Z=frac{-2U_1X+2U_2X+U_1^2-U_2^2}{2sigma^2}+lnfrac{N_1}{N_2}=frac{U_2-U_1}{Sigma^2}X + frac{U_1^2-U_2^2}{2sigma^2}+lnfrac{N_1}{N_2}]
我們得知U和(sigma)都是根據樣本統計得到,我們並不關係他們具體的數值,所以我們可以假設(W=frac{U_2-U_1}{Sigma^2})和 (b=frac{U_1^2-U_2^2}{2sigma^2}+lnfrac{N_1}{N_2})
我們可以得到[Z=Wx+b]
所以我們的機器學習如果我們利用極大似然函數,求得樣本的均值和方差,我們就可以根據特徵分佈來估計一個樣本是否屬於一個分類,通過變化,我們完全可以不去計算樣本的均值和方差,只需要找到合適的W和B,我們一樣可以判斷樣本屬於的分類。
我們只需要找到一個合適的評估函數,去評估我們找到的W和b是否合適。然後不斷的去測試我們找到的W和b即可。而我們要找的這個函數如下:
[loss=-[ylnhat{y}+(1-y)ln(1-hat{y})]]
至於為什麼選擇這樣的損失函數呢?吳恩達老師在機器學習的課程中大概提了下,可以分成兩種情況,去分別計算
[ loss= begin{cases} -lnhat{y} quad y=1 \ -ln(1-hat{y}) quad y=0 end{cases} ]
把這兩個式子整合成一個就得到了上述的損失函數,我們不適用(loss=(y-hat{y})^2)作為損失函數呢?吳恩達老師大概解釋是因為他在邏輯回歸中不是凸函數,沒法進行很好的梯度下降。李宏毅老師的課程中詳細進行了分析。
具體的分析如下:加入我們選擇了(loss=(y-hat{y})^2)作為損失函數,我們在求梯度下降的時候,需要求得該函數的導數
(frac{dloss}{dw}=2(y-hat{y})hat{y}(1-hat{y})*X)
當我們得到的輸出為0或者1時候,不管label是0還是1,得到的導數都是0,梯度就無法下降。這個是根本你的原因。