在開始這篇文章前,我覺得應該先給大家介紹下貝葉斯這個人,畢竟正是這哥們發明了我們現在所談到的貝葉斯方法。貝葉斯是一個英國牧師,同時他還是一個業余數學家。生活在18世紀的貝葉斯生前是位受人尊敬英格蘭長老會牧師,一心一意的把自己獻給偉大的主(搞毛線啊!泡妞才是正途好嗎?)。而且呢,出于對上帝的敬仰,他踏上了證明上帝存在的道路(準確說,應該是不歸路!? -_-// )。當然他的理想過于偉大,所以到現在也沒有人能夠幫助他解決。然而,有心栽花花不開,無心插柳柳成蔭!雖然一直到最后他都 沒有證明上帝是存在的,但是他證明上帝存在的過程中,卻無意發明了概率統計學原理,這應該也算是上帝對人類文明發展所做的貢獻吧!!!
接下來開始進入正題,其為大家介紹貝葉斯公式。其實貝葉斯公式并不神秘,基于全變量的貝葉斯公式就是
,
這就是貝葉斯的全變量公式。?在接下來的內容中,我們著重介紹基于單變量或雙變量(多變量統一為雙變量),所以這樣復雜的公式大可不必。那么我們接下來就在實際應用中來簡化貝葉斯公式。
貝葉斯模型的簡單機器學習應用
貝葉斯方法應用最多的領域是機器學習,我們也以機器學習舉例。假設有一個英文輸入軟件,小明同學某一天正好在用這個軟件。但是,小明同學的英語水平實在不怎么樣(可能是經常被老師趕到門外去的原因吧?^_^),所以呢,小明同學輸入了一個單詞“teache”?。輸入軟件看見這個單詞是崩潰的,因為他并不認識這個單詞!這個單詞到底是“teacher”還是“teach”呢?我們當然知道是?“teacher”(畢竟我們知道小明每天的經歷)。可是輸入軟件卻不知道!這個時候就該貝葉斯方法上場了。假設小明同學輸入的單詞是“W”,而推測他想要輸入的單詞是“W1,W2,W3”,"W(N)"在所有單詞中的詞頻為P(W(N)),而在輸入“W(N)”時錯誤輸入為“W”的概率為P(W/W(N)),那么對于每一個可能的選擇,我們都可以做出判斷:P(T(W(N)) = P(W(N))*P(W/W(N)),然后依次比較就可以判斷出最有可能的選擇。
那么簡化“貝葉斯方法在機器學習中的應用模型”得:P(MAY_ANS) = P(ANS)/P(ANS/INPUT)。P(ANS)為想要輸入的單詞在所有單詞中的詞頻(先驗概率),P(ANS/INPUT)為想要輸入ANS卻輸入INPUT的概率(似然率),P(MAY_ANS)為推測的輸入結果的概率(后驗概率)。而這樣之后,就可以在所有的可能中給出最有可能的選擇。
最優貝葉斯模型
回到剛剛的推理,對于剛剛的推理,我們可以將它分為兩個過程,第一步是對觀測數據建立一個模型。第二步則是使用這個模型來推測未知現象發生的概率。我們剛剛計算的時候,都是假設我們所選用的模型就是最優模型。但是很多時候,雖然某個模型是所有模型里面最靠譜的,但是別的模型也并不是一點機會都沒有。因為,不同的模型之所以對每一數據的反應不一,是因為其選擇的算法不同,但是每一完全正確的算法,也同樣沒有完全錯誤的選擇。所以,當我們選擇了一個模型的時候,通常還可以選擇其他的模型。比如,對同一事件A模型給出的概率是0.5,B模型的概率是0.6,而C模型的概率是0.3。而所謂的最優貝葉斯推理就是將三個模型對于未知數據的預測結論加權平均起來(權值就是模型相應的概率)。顯然,這個推理已經是最好的選擇了,因為它考慮了所有的可能性。(當然在實際中我們是基本不這樣做的,一是模型可能很費時,二來模型空間可能是連續的。結果還是非常費時間。所以這個被看作是一個理論基準。)
樸素貝葉斯方法
在機器學習中,經常還有這種情況。比如:我們需要對郵箱中的垃圾郵件與正常郵件進行區分;對一片文章的主題進行歸類………我們用樸素貝葉斯在垃圾郵件過濾中的應用來舉例說明。問題是什么?問題是,給定一封郵件,判定它是否屬于垃圾郵件。按照先例,我們還是用 D 來表示這封郵件,注意 D 由 N 個單詞組成。我們用 h+ 來表示垃圾郵件,h- 表示正常郵件。問題可以形式化地描述為求:
P(h+|D) = P(h+) * P(D|h+) / P(D)
P(h-|D) = P(h-) * P(D|h-) / P(D)
其中 P(h+) 和 P(h-) 這兩個先驗概率都是很容易求出來的,只需要計算一個郵件庫里面垃圾郵件和正常郵件的比例就行了。然而 P(D|h+)卻不容易求,因為 D 里面含有 N 個單詞 d1, d2, d3, .. ,所以P(D|h+) = P(d1,d2,..,dn|h+)。我們又一次遇到了數據稀疏性,為什么這么說呢?P(d1,d2,..,dn|h+)
就是說在垃圾郵件當中出現跟我們目前這封郵件一模一樣的一封郵件的概率是多大!開玩笑,每封郵件都是不同的,世界上有無窮多封郵件。瞧,這就是數據稀疏性,因為可以肯定地說,你收集的訓練數據庫不管里面含了多少封郵件,也不可能找出一封跟目前這封一模一樣的。結果呢?我們又該如何來計算
P(d1,d2,..,dn|h+) 呢?
我們將 P(d1,d2,..,dn|h+)? 擴展為: P(d1|h+) * P(d2|d1, h+) * P(d3|d2,d1, h+) *?。熟悉這個式子嗎?這里我們會使用一個更激進的假設,我們假設 di 與 di-1 是完全條件無關的,于是式子就簡化為 P(d1|h+) *P(d2|h+) * P(d3|h+) * .. 。這個就是所謂的條件獨立假設,也正是樸素貝葉斯方法的樸素之處。而計算 P(d1|h+) *P(d2|h+) * P(d3|h+) * .. 就太簡單了,只要統計 di這個單詞在垃圾郵件中出現的頻率即可。關于貝葉斯垃圾郵件過濾更多的內容可以參考這個條目,注意其中提到的其他資料。
一
點注記:這里,為什么有這個數據稀疏問題,還是因為統計學習方法工作在淺層面,世界上的單詞就算不再變多也是非常之多的,單詞之間組成的句子也是變化多端,更不用說一篇文章了,文章數目則是無窮的,所以在這個層面作統計,肯定要被數據稀疏性困擾。我們要注意,雖然句子和文章的數目是無限的,然而就拿郵件來說,如果我們只關心郵件中句子的語義(進而更高抽象層面的“意圖”(語義,意圖如何可計算地定義出來是一個人工智能問題),在這個層面上可能性便大大縮減了,我們關心的抽象層面越高,可能性越小。單詞集合和句子的對應是多對一的,句子和語義的對應又是多對一的,語義和意圖的對應還是多對一的,這是個層級體系。神經科學的發現也表明大腦的皮層大致有一種層級結構,對應著越來越抽象的各個層面,至于如何具體實現一個可放在計算機內的大腦皮層,仍然是一個未解決問題,以上只是一個原則(principle)上的認識,只有當 computational 的 cortex模型被建立起來了之后才可能將其放入電腦。
樸素貝葉斯方法的條件獨立假設看上去很傻很天真,為什么結果卻很好很強大呢?就拿一個句子來說,我們怎么能魯莽地聲稱其中任意一個單詞出現的概率只受到它前面的 3 個或 4 個單詞的影響呢?別說 3 個,有時候一個單詞的概率受到上一句話的影響都是絕對可能的。那么為什么這個假設在實際中的表現卻不比決策樹差呢?有人對此提出了一個理論解釋,并且建立了什么時候樸素貝葉斯的效果能夠等價于非樸素貝葉斯的充要條件,這個解釋的核心就是:有些獨立假設在各個分類之間的分布都是均勻的所以對于似然的相對大小不產生影響;即便不是如此,也有很大的可能性各個獨立假設所產生的消極影響或積極影響互相抵消,最終導致結果受到的影響不大?(這個部分直接引用的劉大的獨立博客)
層級貝葉斯方法
我也不懂,再說了~~~~~