從貝葉斯公式到垃圾郵件的識別

看《***與畫家》講到"防止垃圾郵件的一種方法",覺得很適合用來表述數學公式與機器學習之間的關係。涉及到機器學習的數學公式比較簡單,概率論基礎教程都會講到。解決的問題也很典型: 垃圾郵件的識別。

防止垃圾郵件有很多種方法,最直觀的一種就是“規則”, 各種if-else的條件。這種方法能夠解決一個問題,但是解決不了一類問題。而且,這個規則的制定需要非常熟悉業務,好在通常我們面臨的業務問題是很垂直的, 通過規則, 也能夠解決問題。畢竟解決問題纔是業務的核心訴求。

接下來, 業務隨着業務的發展, 規則越來越複雜, 我們維護起來也越來越吃力。 而且使用規則,是被動式的解決問題,用戶體驗也不好。 這個時候,新的方法該上場了,這個方法就是 “統計學方法”。 因爲接觸的規則越多, 我們會慢慢發現郵件中出現某個關鍵詞, 只能表示郵件有可能是垃圾郵件。 這個可能性如何度量呢? 用貝葉斯方法。

貝葉斯方法的思路屬於逆向思維。 通常概率論解決的問題是“已知郵件是垃圾郵件,問各個單詞出現在垃圾郵件中的概率”, 貝葉斯方法解決的問題是“已知郵件內容, 問當前郵件屬於垃圾郵件的概率".

理解貝葉斯公式不難,其基礎點有"條件概率", "聯合概率"。 貝葉斯公式的推導也很簡單:

P(AB) = P(B)*P(A|B)

P(AB) = P(A)*P(B|A)

有:

P(B)*P(A|B)=P(A)*P(B|A)

所以

P(A|B) = P(A)*P(B|A) / P(B)

雖然機器學習最忌諱的就是套公式,但是爲了方便理解, 我們先套個公式:

P(垃圾郵件|郵件內容) 表示 ”在已知郵件內容,郵件屬於垃圾郵件的概率“

P(垃圾郵件|郵件內容) = P(垃圾郵件) * P(郵件內容|垃圾郵件) / P(郵件內容)

等式右邊的概率是可以通過樣本計算出來的。

現在解決問題的方法有了,數學公式也有了, 是不是問題就解決了呢? 顯然不是。我們只是完成了模型選擇而已。通過《***與畫家》看這個模型是如何落地的。

  1. 選擇樣本: 作者選取了4000封正常郵件和4000封垃圾郵件。

  2. 選擇特徵:字母、阿拉伯數字、破折號、撇號、美元符號作爲“實義標識”

  3. 統計次數: 計算了每個實義標識在兩個郵件組出現的次數

  4. 確定計算公式。 這裏其實就是整篇文章的精華了。a. 作者沒有完完全全套用貝葉斯公式; b. 作者分別在token和郵件兩個維度用了貝葉斯思想。這纔是難能可貴的。

  5. 特徵選擇: 作者選取了top15的特徵, 而非郵件全部的token.

  6. 結果選取: 通常我們選取結果是以0.5爲界,而作者以0.9爲界。

如果說通常意義上的編程是一維的,那麼機器學習的編程就是二維的。通常的工程問題是非黑即白,要麼可用,要麼是有Bug不可用。而機器學習在工程上的落地,更核心的關注點在於算法效果好不好和算法效果能不能更好。算法效果好不好,核心點在於數學模型, 其次在於怎麼用好數學模型。 《***與畫家》用簡明的例子說明他是怎麼用數學模型解決業務問題的。

引申一下:這個問題屬於典型的二分類問題。像垃圾郵件,垃圾評論, 評論的情感判斷, 是否目標用戶,是否推薦用戶... 很多問題都可以歸類到二分類問題。如果把"垃圾郵件的識別"抽象到分類問題,整個解決問題的思路就又開闊了很多。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章