[机器学习笔记]Note9--机器学习系统设计
繼續是機器學習課程的筆記,本節課的內容主要是介紹如何設計一個機器學習系統。
首先要做什么
這節課將介紹如何設計一個機器學習系統,首先是以設計一個垃圾郵件分類器算法作為例子。
為了解決這個問題,首先要決定的是如何選擇并表達特征向量x,然后使用y來作為分類結果,y=1表示是垃圾郵件,0則是非垃圾郵件。
然后這里的特征x,可以選擇100個最常出現在垃圾郵件中的詞來構成一個向量,那么將得到一個100×1大小的特征向量x,如???????????0110?1???????????,這里每一行都表示一個詞語,0表示沒有出現,1表示出現該詞語。
實踐中,一般會使用出現頻率最多的n個詞語(10000到50000個)作為訓練集,而不是手動選擇100個單詞。
接下來就是考慮如何優化算法,即提高算法的效果了。
對于垃圾郵件分類器算法,我們可以選擇下列其中一個方法來去改進算法:
這些方法很難決定應該在哪個方法上花費時間和精力,可以任意挑選其中一個方法來專研下去,但是切記首先需要做的是列出可行的方法有哪些,然后再挑選,而不是憑著感覺想到什么方法就用什么方法。
誤差分析
誤差分析可以幫助我們系統化地選擇該做什么。
構建一個學習算法的推薦方法如下:
這里還是用垃圾郵件分類器為例,誤差分析要做的是檢驗交叉驗證集中我們算法產生錯誤預測的所有郵件,看:
- 是否能將這些郵件按照類分組。例如醫藥品垃圾郵件,仿冒品垃圾郵件或者密碼竊取郵件等。然后看分類器對哪一組郵件的預測誤差最大,并著手優化。
- 思考如何改進分類器。如發現是否缺少某些特征,記下這些特征出現的次數。比如記錄錯誤拼寫出現了多少次,異常的郵件路由情況出現了多少次等,然后從出現次數最多的情況開始著手優化。
誤差分析并不能總幫助我們判斷應該采取什么辦法,有時我們需要嘗試不同的模型,然后進行比較,而在模型進行比較的時候,使用數值來判斷那一個模型更好更有效,通常我們是看交叉驗證集的誤差。
比如在垃圾郵件分類器例子中,對于“我們是否應該將discount/discounts/discounted/discounting處理成同一個詞語?”,如果這樣子可以改善我們的算法,這里看采用一些詞干提取軟件來查看單詞的前幾個字母是否相同,當然這里可能會有誤判斷的情況,比如universe(宇宙)和university(大學)這兩個單詞前面7個字母都是相同的,很有可能被認為是同一個單詞。
但是這里一旦嘗試采用詞干提取軟件來改進算法,我們就可以通過對比使用前后的交叉驗證集誤差來判斷是否需要使用。而這就是使用數值檢驗的好處了。
類偏斜的誤差度量
類偏斜情況表現為訓練集中有非常多的同一種類的實例,只有很少或沒有其他類的實例。
假設我們希望用算法來預測癌癥是否是惡性的,在訓練集中只有0.5%的實例是惡性腫瘤。假設我們編寫一非學習而來的算法,在所有情況下都預測腫瘤是良性的,那么誤差只有0.5%。但是通過訓練而得到的神經網絡算法卻有1%的誤差,那么,此時誤差的大小是不能視為算法效果的依據的。
這里就引入查準率(Precision)和查全率(Recall)。
我們將算法預測的結構分成4種情況:
如下圖所示:
上圖左側表格就是一個比較形象的表示,行表示的是預測結果,列表示實際的結果。
所以,
- 查準率=TPTP+FP,例如,在所有預測為惡性腫瘤的病人中,實際上有惡性腫瘤的病人的百分比,越高越好。
- 查全率=TPTP+FN,例如,在所有實際有惡性腫瘤的病人中,被預測為由惡性腫瘤的病人的百分比,也是越高越好。
那么對于剛剛總是預測腫瘤為良性的算法,其查全率是0,因為其正確肯定TP=0。
查全率和查準率之間的平衡
這里繼續使用預測惡性腫瘤的例子。這里使用邏輯回歸算法,然后使用閾值是0.5來預測是否是惡性腫瘤。
假設我們希望只在非常確信的情況下預測為真,即腫瘤是惡性的,也就是希望更高的查準率,那么可以使用比0.5更多的閾值,即0.7,0.9等,這樣的確可以減少無措預測病人為惡性腫瘤的情況,但是也會增加未能成功預測腫瘤為惡性的情況。
另一種情況,就是希望提供查全率,也就是盡可能讓所有有可能是惡性腫瘤的病人得到進一步地檢查和診斷,那么就可以使用比0.5更小的閾值,如0.3,0.1等。但是這也必然會增加錯誤預測為惡性腫瘤的數量,也就是會降低查準率。
我們可以將不同閾值情況下,查全率和查準率的關系繪制成圖表,如下所示:
所以我們希望有一個幫助我們選擇這個閾值的方法。一種方法是計算F1值,其計算公式如下:
我們選擇使得F1值最高的閾值。這里其實還是有很多其他方法結合考慮查準率和查全率,但是出于歷史原因以及習慣原因,大多數使用的還是F1方法。
機器學習的數據
最后來探討下一個關鍵的因素,就是使用的數據集的數據量大小。
視頻中舉出一個例子,有兩個人研究一個如何對混淆的詞語進行分類的問題。這里使用的算法有如邏輯回歸算法,一種叫Winnow的算法,一種基于內存的算法,以及樸素貝葉斯方法。而下面是這不同算法的準確率隨著訓練集數量增多而變化的曲線圖。
從上圖中可以看出,盡管數據量非常大的時候,所有算法的效果都是非常好的。
通常情況下需要思考,在使用的這些特征面前,一個真人專家是否可以有信心地預測結果。如果回答是肯定的,我們需要思考的就是我們的模型是如何的。如果算法是高偏差,即過擬合了,那么增加訓練集的數據量就不太可能導致過擬合,這樣可以使得交叉驗證集誤差和訓練集誤差的差距更小,這種情況就必須使用更多數據。
也可以這樣認識這個問題,我們是希望我們的算法低偏倚和低偏差的,所以做法就應該是選擇更多的特征來降低偏倚,再增加數據量來降低偏差。
小結
本節課主要是介紹如何設計一個機器學習系統,也就是針對某個問題,如何設計一個機器學習算法來解決,包括一開始先設計一個簡單的快速實現方法,然后通過誤差分析,學習曲線等來繼續改進算法,提高算法的效果。然后還介紹了查全率和查準率的概念。
總結
以上是生活随笔為你收集整理的[机器学习笔记]Note9--机器学习系统设计的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 协同办公OA业务系统数据集成(3)-基于
- 下一篇: jersey2 java_无废话Jers