ML_NOTES_P10
P10
分類問題:什么是分類問題,如何利用樸素貝葉斯公式來做分類。以及如何從樸素貝葉斯公式推導出感知機模型(兩個之間的聯系)
什么是分類問題?
要做分類我們第一件事要做的就是把實物數值化,用具體的數字來代替某一個特征。比如在寶可夢中把攻擊力和防御力具體化,攻擊力為5,防御力為10。把這些特征組成一個向量我們就可以得到一組用來代替這個事物的特征向量。
現在我們得到特征向量了,把這組特征向量輸入到模型中,模型輸出一個代表分類的結果。比如我們現在將寶可夢分為兩個類別一類是水系一類是一般系。現在我們有一只不知屬性的寶可夢知道他的一組組特征向量為(5,5)攻擊力5,防御力5,(特征不止一個,我們用兩個來舉例子)我們需要根據他的特征向量將其分到水系或者一般系中。
樸素貝葉斯公式如何解決分類問題?
以二分類為例
先來看最熟悉的貝葉斯公式:如圖所示有兩個盒子盒子1和盒子2,盒子里面分別有藍球和綠球。現在我們拿到一個藍球求這個藍球來自盒子1和盒子2的概率分別是多少?
求這個概率我們需要知道拿到盒子1和盒子2的概率分別是多少即 p ( c 1 ) p(c_1) p(c1?) 和 p ( c 2 ) p(c_2) p(c2?) 以及藍球在盒子1,2中出現的概率分別是多少即 p ( x ∣ c 1 ) p(x|c_1) p(x∣c1?) 和 p ( x ∣ c 2 ) p(x|c_2) p(x∣c2?)
根據貝葉斯公式 (1) 即可求得藍球來自盒子1和盒子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 ) (1) p(c1|x)=\frac{p(x|c_1)p(c_1)}{p(x|c_1)p(c_1)+p(x|c_2)p(c_2)}\tag{1} p(c1∣x)=p(x∣c1?)p(c1?)+p(x∣c2?)p(c2?)p(x∣c1?)p(c1?)?(1)
現在來看下貝葉斯公式和分類之間的聯系。我們根據公式求得了藍球來自盒子1,2的概率,如果 p ( c 1 ∣ x ) p(c_1|x) p(c1?∣x) 大于0.5則認為來自盒子1。同理可得 p(c2|x) 大于0.5則認為藍球來自盒子2。現在我們把他換位寶可夢屬性分類問題。盒子1,2對應寶可夢的兩種屬性(水系,一般系)。里面的球代表特征,現在我們拿到一個特征向量為(5,5)的寶可夢,我們需要判斷他是哪一個類別的。我們需要知道訓練集中寶可夢水系的概率 p ( c 1 ) p(c_1) p(c1?) 和一般系的概率 p ( c 2 ) p(c_2) p(c2?) 以及特征向量(5,5)在水系中和一般系中出現的概率 p ( x ∣ c 1 ) p(x|c_1) p(x∣c1?) 和 p ( x ∣ c 2 ) p(x|c_2) p(x∣c2?)。現在我們將知道的這幾個概率帶入貝葉斯公式求出概率即可。
現在的問題是我們怎么知道 p ( c 1 ) , p ( c 2 ) , p ( x ∣ c 1 ) , p ( x ∣ c 2 ) p(c_1),p(c_2),p(x|c_1),p(x|c_2) p(c1?),p(c2?),p(x∣c1?),p(x∣c2?) ? 其中 p ( x ∣ c 1 ) , p ( x ∣ c 2 ) p(x|c1),p(x|c_2) p(x∣c1),p(x∣c2?) 叫做似然概率, p ( c 1 ) , p ( c 2 ) p(c_1),p(c_2) p(c1?),p(c2?) 叫做先驗 prior。
假設現在我們現在有100個已知屬性和特征向量的寶可夢訓練集,其中水系的有50只,一般系的50只,那我們現在就有了 p ( c 1 ) = 0.5 , p ( c 2 ) = 0.5 p(c_1)=0.5,p(c_2)=0.5 p(c1?)=0.5,p(c2?)=0.5 。現在如何求得 p ( x ∣ c 1 ) , p ( x ∣ c 2 ) p(x|c_1), p(x|c_2) p(x∣c1?),p(x∣c2?) ? 即在水系和一般系中已知的50只寶可夢的特征向量分別求得特征向量(5,5)出現的概率。拿水系來舉例 即求 p ( c 1 ∣ x ) p(c_1|x) p(c1?∣x) 。我們其實可以知道現在的訓練集中的50只水系寶可夢只是水系中的一部分還有很多其他未知的水系寶可夢,這50個只是正好采樣時采到了他們。假設寶可夢的特征是從高斯分布(你也可以假設你喜歡的Probability distribution概率分布函數,如果你選擇的分布函數較簡單(參數量少)那你的bias就大,variance就小.可以用data set來判斷一下用什么樣的probability distribution作為model是比較好的)中采樣得到的。那我們怎么知道是從那個高斯分布上采樣得到的呢?因為不同的高斯分布也有可能采樣時采到這50個寶可夢,怎么得到這個Gaussian的均值和方差呢?這里用到的思想是極大似然估計。把這50只寶可夢的數據分布作為整個水系寶可夢的數據分布,根據已知的50只寶可夢求得這50條數據的均值和方差作為我們的高斯分布的均值和方差。現在求得了水系寶可夢的分布就可以求得數據(5,5)在這個分布上sample(采樣)出來的概率即求得了 p(c_1|x)。同理可求 p(c_2|x)。將這4個概率帶回樸素貝葉斯公式就可以得到(5,5)最有可能是哪一個類別的寶可夢。問題得到解決。😄
如何從樸素貝葉斯推出感知機模型?
在剛剛的公式中我們需要找的高斯函數的分布 ( u , s i g m a ) (u,sigma) (u,sigma)就是我們要找的參數,不同的值對應不同的模型,我們要在所有的值中找到最有可能的值(用的方法是極大似然估計)。剛剛的公式中我們每個類別的高斯分布均值和協方差都是獨立不同的 u 1 ≠ u 2 , s i g m a 1 ≠ s i m g a 2 u_1\ne{u_2}, sigma_1\ne{simga_2} u1??=u2?,sigma1??=simga2?。這樣得到的效果往往不太好 😞 ,常用的方法是不同類別之間共用一個covariance matrix(協方差矩陣)為什么共用一個協方差矩陣效果較好見補充。
這個時候的協方差矩陣為原來兩個的加權 s i m g a = a ? s i g m a 1 + b ? s i g m a 2 simga = a*sigma_1 + b*sigma_2 simga=a?sigma1?+b?sigma2? a,b也是根據極大似然估計算出來的。 a = p ( c 1 ) , b = p ( c 2 ) a=p(c_1), b=p(c_2) a=p(c1?),b=p(c2?) 。
在兩個類別共用一個協方差的基礎上我們將樸素貝葉斯公式進行一些數學推導變形為感知機模型,下面就是見證奇跡的時刻🐵
在樸素貝葉斯公式中上下同除以分子,令 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=lnp(x∣c2?)p(c2?)p(x∣c1?)p(c1?)? ,則原式就等于 p ( c 1 ∣ x ) = 1 1 + e ? z p(c_1|x)=\frac{1}{1+e^{-z}} p(c1?∣x)=1+e?z1? 即為已知的函數sigmoid
接下來看下這個sigmoid 化簡之后是什么?
經過上面一系列的數學公式化簡最后得到了 P ( C 1 ∣ x ) = σ ( w ? x + b ) P(C_1|x)=\sigma (w\cdot x+b) P(C1?∣x)=σ(w?x+b) 所以我們找了半天的先驗,假設數據的分布,最后我們要找的就是兩個常數w,b。
看不懂上面一系列推導的看李宏毅老師的機器學習P09最后的推導部分
補充
什么是高斯分布?
高斯分布也叫做正太分布,若有一堆數據(一個變量)滿足公式 2則稱這堆數據的分布滿足均值為 u u u,方差為 σ 2 \sigma^2 σ2的高斯分布。上式公式就是我們常見的一元高斯分布。均值為0方差為1的高斯分布叫做標準正太分布。
f ( x ) = 1 σ 2 π ? e ? 1 2 ? ( x ? u σ ) 2 (2) f(x)=\frac{1}{\sigma\sqrt{2\pi}}\cdot e^{-\frac{1}{2}\cdot(\frac{x-u}{\sigma})^2}\tag{2} f(x)=σ2π?1??e?21??(σx?u?)2(2)
現在我們將高斯分布擴展到多維空間即假設有多個變量并且假設他們之間相互獨立,則獨立的n元高斯分布如公式3
f u , Σ ( x ) = 1 ( 2 π ) D 2 1 ∣ Σ ∣ 1 2 e ? 1 2 ( x ? u ) T Σ ? 1 ( x ? u ) (3) f_{u,\Sigma}(x)=\frac{1}{(2\pi)^{\frac{D}{2}}}\frac{1}{|\Sigma|^{\frac{1}{2}}}e^{-\frac{1}{2}(x-u)^T\Sigma^{-1}(x-u)}\tag{3} fu,Σ?(x)=(2π)2D?1?∣Σ∣21?1?e?21?(x?u)TΣ?1(x?u)(3)
其中\Sigma為變量x的協方差矩陣 i行,g列的元素值表示x_i,x_j的協方差(表示兩個變量之間的相關性)。由此可知\Sigma為一個關于對角線對稱的矩陣(x_i,x_j和x_j,x_i是一樣的)。由于我們現在假設變量之間相互獨立,所以除對角線以外的值全為0
Σ = σ 1 2 0 ? 0 0 σ 1 2 ? 0 ? ? ? ? 0 0 ? σ 1 2 (4) \Sigma=\begin{matrix} \sigma_1^2&0&\cdots&0 \\ 0&\sigma_1^2&\cdots&0 \\ \vdots&\cdots&\cdots&\vdots\\ 0&0&\cdots&\sigma_1^2 \end{matrix}\tag{4} Σ=σ12?0?0?0σ12??0??????00?σ12??(4)
當數據之間不獨立的時候
Σ = V ( X 1 ) C o v ( X 1 , X 2 ) ? C o v ( X 1 , X D ) C o v ( X 2 , X 1 ) V ( X 2 ) ? C o v ( X 2 , X D ) ? ? ? ? C o v ( X D , X 1 ) C o v ( X D , X 2 ) ? V ( X D ) (5) \Sigma=\begin{matrix} V(X_1) &Cov(X_1,X_2) &\cdots &Cov(X_1,X_D) \\ Cov(X_2,X_1) &V(X_2) & \cdots &Cov(X_2,X_D)\\ \cdots & \cdots & \cdots & \cdots \\ Cov(X_D,X_1)& Cov(X_D,X_2) &\cdots & V(X_D) \end{matrix}\tag{5} Σ=V(X1?)Cov(X2?,X1?)?Cov(XD?,X1?)?Cov(X1?,X2?)V(X2?)?Cov(XD?,X2?)??????Cov(X1?,XD?)Cov(X2?,XD?)?V(XD?)?(5)
比如現在我們討論兩個參數的高斯分布,下圖為不同的均值和方差的高斯分布圖投影到二維平面的等高線圖。
投影到二維平面的等高線圖
那我們怎么知道是什么樣的高斯分布可以使得P最大呢,怎么求解呢?
實際上就是該事件發生的概率就等于每個點都發生的概率之積,我們只需要把每一個點的data代進去,就可以得到一個關于u和 Σ \Sigma Σ的函數,分別求偏導,解出微分是0的點,即使L最大的那組參數,便是最終的估測值,通過微分得到的高斯函數的 u u u和 Σ \Sigma Σ的最優解如下: u ? , S i g m a ? = arg ? max ? u , Σ L ( u , Σ ) u ? = 1 10 ∑ n = 1 10 x n Σ ? = 1 10 ∑ n = 1 10 ( x n ? u ? ) ( x n ? u ? ) T . u^*,Sigma^*=\arg \max\limits_{u,\Sigma} L(u,\Sigma) \ u^*=\frac{1}{10}\sum\limits_{n=1}^{10}x^n \ \ \ \ \Sigma^*=\frac{1}{10}\sum\limits_{n=1}^{10}(x^n-u^*)(x^n-u^*)^T. u?,Sigma?=argu,Σmax?L(u,Σ)?u?=101?n=1∑10?xn????Σ?=101?n=1∑10?(xn?u?)(xn?u?)T. 當然如果你不愿意去現場求微分的話,這也可以當做公式來記憶(u*剛好是這堆數據的數學期望,\Sigma*剛好是協方差)
注:數學期望: u = E ( X ) u=E(X) u=E(X),協方差: Σ = c o v ( X , Y ) = E [ ( X ? u ) ( Y ? u ) T ] \Sigma=cov(X,Y)=E[(X-u)(Y-u)^T] Σ=cov(X,Y)=E[(X?u)(Y?u)T],對同一個變量來說,協方差為$cov(X,X)=E[(X-u)(X-u)^T $
什么是極大似然估計?
假設我們現在有一個特征共有10條數據(十個樣本點)是由某個高斯分布采樣出來的,那怎么確定這十個點是來自怎樣的高斯分布呢?實際上不管參數是什么的高斯分布都可以采樣出這十個樣本點,只是可能性的問題,我們現在假設采樣出第i個樣本的概率為 P ( X i ) P(X_i) P(Xi?) ,采樣出每個樣本點的可能性是獨立的,那么采樣出這10個樣本的概率 P = Σ 1 10 P ( X i ) P= \Sigma_1^{10}P(X_i) P=Σ110?P(Xi?)當有一組 u , σ 2 u,\sigma^2 u,σ2 使得概率P最大的時候我們就認為這10個樣本就是來自這個使得P 最大的高斯分布(用已知的部分數據去估計全部數據的分布)。那有沒有可能這10個點來自其他分布呢?完全有可能啊,當這10個點是被某個別有用心的人專門挑選的不具代表性的特殊的點這個時候完全有可能使得P最大的分布不是數據的整體分布。但是極大似然估計才不管這些,只要你這個高斯分布使得P最大了那我就認為你是采樣自這個高斯分布的。這個時候極大似然估計就歇菜了啊估計錯了啊公式里面的貝葉斯里面的似然概率都估計錯了模型訓練出來的結果能好嗎?所以為了防止這種情況我們的采樣點要盡量是能夠代表整體分布的,既然你誠心的發問了怎么保證我們采樣出來的點能夠代表整體分布呢?采取的措施是采樣的時候做到隨機采樣,采取盡可能多的數據保證數據的泛化性。
怎么通俗的理解極大似然估計呢?一句話總結就是看起來是那么回事我們就認為是那么回事。打個比分,我們在街上看見看見一個女的牽著一個小女孩的手,并且他們兩個長得很想,還穿著親子裝。我們根據這些信息推測出他們兩個是母女關系。
為什么不同類別共用一個covariance matrix效果是比較好的?😐
協方差矩陣 Σ \Sigma Σ 表示的是各變量之間關系的矩陣,矩陣的 i行,g列的元素值表示 x i , x j x_i,x_j xi?,xj?的協方差(表示兩個變量之間的相關性)。
Σ = V ( X 1 ) C o v ( X 1 , X 2 ) ? C o v ( X 1 , X D ) C o v ( X 2 , X 1 ) V ( X 2 ) ? C o v ( X 2 , X D ) ? ? ? ? C o v ( X D , X 1 ) C o v ( X D , X 2 ) ? V ( X D ) (6) \Sigma=\begin{matrix} V(X_1) &Cov(X_1,X_2) &\cdots &Cov(X_1,X_D) \\ Cov(X_2,X_1) &V(X_2) & \cdots &Cov(X_2,X_D)\\ \cdots & \cdots & \cdots & \cdots \\ Cov(X_D,X_1)& Cov(X_D,X_2) &\cdots & V(X_D) \end{matrix}\tag{6} Σ=V(X1?)Cov(X2?,X1?)?Cov(XD?,X1?)?Cov(X1?,X2?)V(X2?)?Cov(XD?,X2?)??????Cov(X1?,XD?)Cov(X2?,XD?)?V(XD?)?(6)
由于數據之間大多是具有相關性的(不獨立),當特征(變量)很多的時候這個矩陣會很大(和input的feature size的平方成正比),當不同類別給不同協方差的時候會造成模型的參數太多從而導致模型方差過大出現過擬合,當不同類別共用一個協方差的時候可以有效減少參數量。(參數不是越多越好,找100個不相干的特征不如10個關鍵特征)。
總結
以上是生活随笔為你收集整理的ML_NOTES_P10的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2015年07月苹果IOS上架App S
- 下一篇: 如何画仓库管理流程图