看《***與畫家》講到"防止垃圾郵件的一種方法",以爲很適合用來表述數學公式與機器學習之間的關係。涉及到機器學習的數學公式比較簡單,機率論基礎教程都會講到。解決的問題也很典型: 垃圾郵件的識別。算法
防止垃圾郵件有不少種方法,最直觀的一種就是「規則」, 各類if-else的條件。這種方法可以解決一個問題,可是解決不了一類問題。並且,這個規則的制定須要很是熟悉業務,好在一般咱們面臨的業務問題是很垂直的, 經過規則, 也可以解決問題。畢竟解決問題纔是業務的核心訴求。編程
接下來, 業務隨着業務的發展, 規則愈來愈複雜, 咱們維護起來也愈來愈吃力。 並且使用規則,是被動式的解決問題,用戶體驗也很差。 這個時候,新的方法該上場了,這個方法就是 「統計學方法」。 由於接觸的規則越多, 咱們會慢慢發現郵件中出現某個關鍵詞, 只能表示郵件有多是垃圾郵件。 這個可能性如何度量呢? 用貝葉斯方法。機器學習
貝葉斯方法的思路屬於逆向思惟。 一般機率論解決的問題是「已知郵件是垃圾郵件,問各個單詞出如今垃圾郵件中的機率」, 貝葉斯方法解決的問題是「已知郵件內容, 問當前郵件屬於垃圾郵件的機率".ide
理解貝葉斯公式不難,其基礎點有"條件機率", "聯合機率"。 貝葉斯公式的推導也很簡單:學習
P(AB) = P(B)*P(A|B) 教程
P(AB) = P(A)*P(B|A)token
有:數學
P(B)*P(A|B)=P(A)*P(B|A)it
因此class
P(A|B) = P(A)*P(B|A) / P(B)
雖然機器學習最忌諱的就是套公式,可是爲了方便理解, 咱們先套個公式:
P(垃圾郵件|郵件內容) 表示 」在已知郵件內容,郵件屬於垃圾郵件的機率「
P(垃圾郵件|郵件內容) = P(垃圾郵件) * P(郵件內容|垃圾郵件) / P(郵件內容)
等式右邊的機率是能夠經過樣本計算出來的。
如今解決問題的方法有了,數學公式也有了, 是否是問題就解決了呢? 顯然不是。咱們只是完成了模型選擇而已。經過《***與畫家》看這個模型是如何落地的。
選擇樣本: 做者選取了4000封正常郵件和4000封垃圾郵件。
選擇特徵:字母、阿拉伯數字、破折號、撇號、美圓符號做爲「實義標識」
統計次數: 計算了每一個實義標識在兩個郵件組出現的次數
肯定計算公式。 這裏其實就是整篇文章的精華了。a. 做者沒有完徹底全套用貝葉斯公式; b. 做者分別在token和郵件兩個維度用了貝葉斯思想。這纔是難能難得的。
特徵選擇: 做者選取了top15的特徵, 而非郵件所有的token.
若是說一般意義上的編程是一維的,那麼機器學習的編程就是二維的。一般的工程問題是非黑即白,要麼可用,要麼是有Bug不可用。而機器學習在工程上的落地,更核心的關注點在於算法效果好很差和算法效果能不能更好。算法效果好很差,核心點在於數學模型, 其次在於怎麼用好數學模型。 《***與畫家》用簡明的例子說明他是怎麼用數學模型解決業務問題的。
引伸一下:這個問題屬於典型的二分類問題。像垃圾郵件,垃圾評論, 評論的情感判斷, 是否目標用戶,是否推薦用戶... 不少問題均可以歸類到二分類問題。若是把"垃圾郵件的識別"抽象到分類問題,整個解決問題的思路就又開闊了不少。