在機器學習許多算法裏面經常用到的一個建模技巧就是假定某個數據服從某個概率分佈。每個概率分佈都有一個概率分佈函數,輸入樣本值概率分佈函數輸出當前這個樣本屬於某個類的概率。而任何概率分佈函數都會存在未知參數,不同數據要取不同的參數。比如邏輯迴歸,它就認爲概率分佈函數長的像這樣,輸入樣本值x,輸出x屬於標籤爲1的那個類的概率。未知參數是w和b,不同數據w和b是要取不同的值。邏輯迴歸要做的是根據不同數據自適應的調整w和b的值。那麼概率分佈函數一定要用{sigmoid(wx+b)}sigmoid(wx+b)嗎?肯定不是,我們可以自己設計各種概率分佈函數(只要值域在0~1
之間,因爲概率是0~1
之間),比如我可以設計新的算法,它的概率分佈函數爲把它命名爲Ai醬迴歸算法
。如果你設計了一種新的概率分佈函數用在某種數據效果還不錯,那麼“恭喜你創造了一種新的算法”。從這可以看出,我們瞭解常見的概率分佈函數對於理解機器學習各種算法和算法中的待求解參數的意義是非常重要的。而且我們還可以根據這些現有的概率分佈函數來發明我們自己的算法。
均勻分佈
這種概率分佈函數輸入任何樣本值x,輸出這個樣本屬於某個類的概率都是一個常數。換句話說就是任何樣本屬於任何一個類的概率相等。比如有一個算法,你問你剛剛搖的骰子點數是x,那麼x是6(即p(x=6))的概率是多少。它會告訴你x=6和x是2(即p(x=2))的概率都是一樣的是。用公式表示就是:
其中c是一個屬於0~1的常數。均勻分佈概率分佈函數它待求解的參數是。不同數據c的取值不同。比如拋硬幣這種數據,搖骰子這種數據。
伯努利分佈
其實伯努利分佈這種分佈描述的是隻有兩種事件發生下的概率分佈。比如事件0和事件1。那這個和機器學習有什麼關係呢?比如輸入一個樣本x,如果那麼就是事件1發生,如果樣本那麼就是事件0發生。現在機器學習要做的事是輸入一個樣本x,輸出這個樣本到底屬於哪個類。那麼我們只需要比較事件0()發生和事件1()發生這兩個概率哪個大,算法就認爲x屬於哪個類。這兩種事件發生的概率分佈可以用一個分段函數表示(表示事件1發生,表示事件0發生,f(x)表示樣本x):
然後數學家們覺得用分段函數表示很不爽,想把他們合併。然後合併後就變成了下面這個樣子:
,當x=1時後面那個項爲1(因爲1-x=0,那麼有),同理當x=0時前面那個項爲1。
二項分佈
β分佈(Beta)
高斯分佈(Gaussian)
下面是一個二維的高斯分佈(又叫做正態分佈)。該概率分佈函數的輸入是(x,y)也就是下面那個圖藍色的點,這個輸入對應的概率是p(x,y)。