机器学习笔记八之机器学习系统设计
本節目錄:
1 如何選擇并表達特征向量
2 誤差分析
3 類偏斜的誤差度量
4 查準率和查全率之間的權衡
5 機器學習的數據
1如何選擇并表達特征向量
選擇一個由 100 個最常出現在垃圾郵件中的詞所構成的列表,根據這些詞是否有在郵件中
出現,來獲得我們的特征向量(出現為 1,不出現為 0),尺寸為 100×1。
為了構建這個分類器算法,我們可以做很多事,例如:
在上面這些選項中,非常難決定應該在哪一項上花費時間和精力,作出明智的選擇,比
隨著感覺走要更好。當我們使用機器學習時,總是可以“頭腦風暴”一下,想出一堆方法來試
試。實際上,當你需要通過頭腦風暴來想出不同方法來嘗試去提高精度的時候,你可能已經
超越了很多人了。大部分人并不嘗試著列出可能的方法,他們做的只是某天早上醒來,因為
某些原因有了一個突發奇想.
2 誤差分析
誤差分析幫助你更系統地做決定。如果你準備研究機器學習的東西,或者構造機器學習應用程序,最好的實踐方法是構建一個簡單的算法,這樣你可以很快地實現它。這樣即使運行效果不好,也要把他再運行一遍,最后通過交叉驗證檢驗數據。做完這些工作,畫出學習曲線,檢驗誤差,找出算法的問題或是否有高偏差和高方差問題。
即:當我們在構造垃圾郵件分類器時,我會看一看我的交叉驗證數據集,然后親自看一看哪些郵件被算法錯誤地分類。因此,通過這些被算法錯誤分類的垃圾郵件與非垃圾郵件,你可以發現某些系統
性的規律:什么類型的郵件總是被錯誤分類。經常地這樣做之后,這個過程能啟發你構造新
的特征變量,或者告訴你:現在這個系統的短處,然后啟發你如何去提高它。
構建一個學習算法的推薦方法為:
5. 從一個簡單的能快速實現的算法開始,實現該算法并用交叉驗證集數據測試這個算
法
6. 繪制學習曲線,決定是增加更多數據,或者添加更多特征,還是其他選擇
7. 進行誤差分析:人工檢查交叉驗證集中我們算法中產生預測誤差的實例,看看這些實例是否有某種系統化的趨勢。
以我們的垃圾郵件過濾器為例,誤差分析要做的既是檢驗交叉驗證集中我們的算法產生
錯誤預測的所有郵件,看:是否能將這些郵件按照類分組。例如醫藥品垃圾郵件,仿冒品垃
圾郵件或者密碼竊取郵件等。然后看分類器對哪一組郵件的預測誤差最大,并著手優化。
思考怎樣能改進分類器。例如,發現是否缺少某些特征,記下這些特征出現的次數。
例如記錄下錯誤拼寫出現了多少次,異常的郵件路由情況出現了多少次等等,然后從
出現次數最多的情況開始著手優化。
誤差分析并不總能幫助我們判斷應該采取怎樣的行動。有時我們需要嘗試不同的模型,
然后進行比較,在模型比較時,用數值來判斷哪一個模型更好更有效,通常我們是看交叉驗
證集的誤差。
因此,當你在構造學習算法的時候,你總是會去嘗試很多新的想法,實現出很多版本的
學習算法,如果每一次你實踐新想法的時候,你都要手動地檢測這些例子,去看看是表現差
還是表現好,那么這很難讓你做出決定。到底是否使用詞干提取,是否區分大小寫。但是通
過一個量化的數值評估,你可以看看這個數字,誤差是變大還是變小了。你可以通過它更快
地實踐你的新想法,它基本上非常直觀地告訴你:你的想法是提高了算法表現,還是讓它變
得更壞,這會大大提高你實踐算法時的速度。所以我強烈推薦在交叉驗證集上來實施誤差分
析,而不是在測試集上。
3 類偏斜的誤差度量
設定某個實數來評估你的學習算法,并衡量它的表現,有了算法的評估和誤差度量值。有一件重
要的事情要注意,就是使用一個合適的誤差度量值,這有時會對于你的學習算法造成非常微
妙的影響,這件重要的事情就是偏斜類(skewed classes)的問題。類偏斜情況表現為我們的
訓練集中有非常多的同一種類的實例,只有很少或沒有其他類的實例。
查準率(Precision)和查全率(Recall) 我們將算法預測的結果分成四種情況:
則:查準率=TP/(TP+FP)。例,在所有我們預測有惡性腫瘤的病人中,實際上有惡性腫
瘤的病人的百分比,越高越好。
查全率=TP/(TP+FN)。例,在所有實際上有惡性腫瘤的病人中,成功預測有惡性腫瘤的
病人的百分比,越高越好。
4.查準率和查全率之間的平衡
在很多應用中,我們希望能夠保證查準率和召回率的相對平衡。
如果我們希望只在非常確信的情況下預測為真(腫瘤為惡性),即我們希望更高的查
準率,我們可以使用比 0.5 更大的閥值,如 0.7,0.9。這樣做我們會減少錯誤預測病人為惡
性腫瘤的情況,同時卻會增加未能成功預測腫瘤為惡性的情況。
如果我們希望提高查全率,盡可能地讓所有有可能是惡性腫瘤的病人都得到進一步地
檢查、診斷,我們可以使用比 0.5 更小的閥值,如 0.3。
我們可以將不同閥值情況下,查全率與查準率的關系繪制成圖表,曲線的形狀根據數
據的不同而不同:
一種選擇這個閾值的方法 是計算F1值 :
我們選擇使得 F1 值最高的閥值。
5 機器學習數據
得到大量的數據并在某種類型的學習算法中進行訓練,可以是一種有效的方法來
獲得一個具有良好性能的學習算法。而這種情況往往出現在這些條件對于你的問題都成立。
并且你能夠得到大量數據的情況下。這可以是一個很好的方式來獲得非常高性能的學習算
法。
改變了訓練數據集的大小,并嘗試將這些學習算法用于不同大小的訓練數據集中,他們得到的結果
這些趨勢非常明顯,首先大部分算法,都具有相似的性能,其次,隨著訓練數據集的增
大,在橫軸上代表以百萬為單位的訓練集大小,從 0.1 個百萬到 1000 百萬,也就是到了 10
億規模的訓練集的樣本,這些算法的性能也都對應地增強了。
事實上,如果你選擇任意一個算法,可能是選擇了一個"劣等的"算法,如果你給這個劣
等算法更多的數據,那么從這些例子中看起來的話,它看上去很有可能會其他算法更好,甚
至會比"優等算法"更好。由于這項原始的研究非常具有影響力,因此已經有一系列許多不同
的研究顯示了類似的結果。這些結果表明,許多不同的學習算法有時傾向于表現出非常相似
的表現,這還取決于一些細節,但是真正能提高性能的,是你能夠給一個算法大量的訓練數
據。
那么這種說法在什么時候是真,什么時候是假呢?因為如果我們有一個學習算法,并且
如果這種說法是真的,那么得到大量的數據通常是保證我們具有一個高性能算法的最佳方
式,而不是去爭辯應該用什么樣的算法。
假如有這樣一些假設,在這些假設下有大量我們認為有用的訓練集,我們假設在我們的
機器學習問題中,特征值𝑥包含了足夠的信息,這些信息可以幫助我們用來準確地預測𝑦。
現在假設我們使用了非常非常大的訓練集,在這種情況下,盡管我們希望有很多參數,
但是如果訓練集比參數的數量還大,甚至是更多,那么這些算法就不太可能會過度擬合。也
就是說訓練誤差有希望接近測試誤差。
另一種考慮這個問題的角度是為了有一個高性能的學習算法,我們希望它不要有高的
偏差和方差。
因此偏差問題,我們將通過確保有一個具有很多參數的學習算法來解決,以便我們能
夠得到一個較低偏差的算法,并且通過用非常大的訓練集來保證。
我們在此沒有方差問題,我們的算法將沒有方差,并且通過將這兩個值放在一起,我們
最終可以得到一個低誤差和低方差的學習算法。這使得我們能夠很好地測試數據集。從
根本上來說,這是一個關鍵的假設:特征值有足夠的信息量,且我們有一類很好的函數,這
是為什么能保證低誤差的關鍵所在。它有大量的訓練數據集,這能保證得到更多的方差值,
因此這給我們提出了一些可能的條件,如果你有大量的數據,而且你訓練了一種帶有很多參
數的學習算法,那么這將會是一個很好的方式,來提供一個高性能的學習算法。
我覺得關鍵的測試:首先,一個人類專家看到了特征值 𝑥,能很有信心的預測出𝑦值嗎?
因為這可以證明 𝑦 可以根據特征值𝑥被準確地預測出來。其次,我們實際上能得到一組龐大
的訓練集,并且在這個訓練集中訓練一個有很多參數的學習算法嗎?如果你不能做到這兩
者,那么更多時候,你會得到一個性能很好的學習算法。
總結
以上是生活随笔為你收集整理的机器学习笔记八之机器学习系统设计的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: GPU 编程入门到精通(一)之 CUDA
- 下一篇: CUDA 简介