吳恩達機器學習筆記7 機器學習系統的設計

目錄

垃圾郵件辨別問題

思考問題解決方向

誤差分析  Error Analysis

類偏斜的誤差度量——查準率和查全率

查準率和查全率之間的權衡

機器學習的數據


這一部分以一個垃圾郵件分類器算法和腫瘤識別爲例進行討論。

垃圾郵件辨別問題

思考問題解決方向

爲了解決這樣一個問題,我們首先要做的決定是如何選擇並表達特徵向量x。我們可以選擇一個由100個最常出現在垃圾郵件中的詞所構成的列表,根據這些詞是否有在郵件中出現,來獲得我們的特徵向量(出現爲1,不出現爲0),尺寸爲100×1。

爲了構建這個分類器算法,我們可以做很多事,例如:

  1. 收集更多的數據,讓我們有更多的垃圾郵件和非垃圾郵件的樣本
  2. 基於郵件的路由信息開發一系列複雜的特徵
  3. 基於郵件的正文信息開發一系列複雜的特徵,包括考慮截詞的處理
  4. 爲探測刻意的拼寫錯誤(把watch 寫成w4tch)開發複雜的算法

那麼如何選擇自己的機器學習算法設計方向呢?

誤差分析  Error Analysis

如果準備研究機器學習的東西,或者構造機器學習應用程序,最好的實踐方法不是建立一個非常複雜的系統,擁有多麼複雜的變量;而是構建一個簡單的算法,這樣你可以很快地實現它。

構建一個學習算法的推薦方法爲:

  1. 從一個簡單的能快速實現的算法開始,實現該算法並用交叉驗證集數據測試這個算法
  2. 繪製學習曲線,決定是增加更多數據,或者添加更多特徵,還是其他選擇
  3. 進行誤差分析:人工檢查交叉驗證集中我們算法中產生預測誤差的樣本,看看這些樣本是否有某種系統化的趨勢

以我們的垃圾郵件過濾器爲例,誤差分析要做的既是檢驗交叉驗證集中我們的算法產生錯誤預測的所有郵件,看:是否能將這些郵件按照類分組。例如醫藥品垃圾郵件,仿冒品垃圾郵件或者密碼竊取郵件等。然後看分類器對哪一組郵件的預測誤差最大,並着手優化。思考怎樣能改進分類器。例如,發現是否缺少某些特徵,記下這些特徵出現的次數。例如記錄下錯誤拼寫出現了多少次,異常的郵件路由情況出現了多少次等等,然後從出現次數最多的情況開始着手優化。

因此,當你在構造學習算法的時候,你總是會去嘗試很多新的想法,實現出很多版本的學習算法,如果每一次你實踐新想法的時候,你都要手動地檢測這些例子,去看看是表現差還是表現好,那麼這很難讓你做出決定。到底是否使用詞幹提取,是否區分大小寫。但是通過一個量化的數值評估,你可以看看這個數字,誤差是變大還是變小了。

類偏斜的誤差度量——查準率和查全率

之前我們提到,設定某個實數來評估你的學習算法,並衡量它的表現,有了算法的評估和誤差度量值。有一件重要的事情要注意,就是使用一個合適的誤差度量值,這有時會對於你的學習算法造成非常微妙的影響,這件重要的事情就是偏斜類(skewed classes)的問題。類偏斜情況表現爲我們的訓練集中有非常多的同一種類的樣本,只有很少或沒有其他類的樣本。

例如我們希望用算法來預測癌症是否是惡性的,在我們的訓練集中,只有0.5%的實例是惡性腫瘤。假設我們編寫一個非學習而來的算法,在所有情況下都預測腫瘤是良性的,那麼誤差只有0.5%。然而我們通過訓練而得到的神經網絡算法卻有1%的誤差。這時,誤差的大小是不能視爲評判算法效果的依據的。

實際值vs預測值 Positive Negtive
Positive True Positive False Negative
Negtive False Positive True Negative

我們可以通過計算查準率和查全率對模型進行評價。

例如,查準率指的是在所有我們預測有惡性腫瘤的病人中,實際上有惡性腫瘤的病人的百分比,越高越好。

例,查全率指的是在所有實際上有惡性腫瘤的病人中,成功預測有惡性腫瘤的病人的百分比,越高越好。

                                                                       查準率=TP/(TP+FP)

                                                                      查全率=TP/(TP+FN)

查準率和查全率之間的權衡

例,在所有我們預測有惡性腫瘤的病人中,實際上有惡性腫瘤的病人的百分比,越高越好。如果我們希望只在非常確信的情況下預測爲真(腫瘤爲惡性),即我們希望更高的查準率,我們可以使用比0.5更大的閥值,如0.7,0.9。這樣做我們會減少錯誤預測病人爲惡性腫瘤的情況,同時卻會增加未能成功預測腫瘤爲惡性的情況。 如果我們希望提高查全率,儘可能地讓所有有可能是惡性腫瘤的病人都得到進一步地檢查、診斷,我們可以使用比0.5更小的閥值,如0.3。

有一個幫助我們選擇這個閥值的方法。一種方法是計算F1 值(F1 Score),其計算公式爲:

                                                                       F_1Score=2\frac{PR}{P+R}

這個名字沒有什麼講究,就是隨便一個名字F1值。

機器學習的數據

有許多研究學習並證明了,許多不同的學習算法有時傾向於表現出非常相似的表現,這還取決於一些細節,但是真正能提高性能的,是你能夠給一個算法大量的訓練數據。

假設我們使用了非常非常大的訓練集,在這種情況下,儘管我們希望有很多參數,但是如果訓練集比參數的數量還大,甚至是更多,那麼這些算法就不太可能會過度擬合。也就是說訓練誤差有希望接近測試誤差。

另一種考慮這個問題的角度是爲了有一個高性能的學習算法,我們希望它不要有高的偏差和方差。 因此偏差問題,我麼將通過確保有一個具有很多參數的學習算法來解決,以便我們能夠得到一個較低偏差的算法,並且通過用非常大的訓練集來保證。

 

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