1. 程式人生 > >機器學習入門系列(2)--機器學習概覽(下)

機器學習入門系列(2)--機器學習概覽(下)

這是本系列的第二篇,也是機器學習概覽的下半部分,主要內容如下所示:

文章目錄

1. 機器學習的主要挑戰

在介紹基於模型學習演算法的流程的時候,對於預測結果不好的問題分析,主要說了是資料問題還是模型問題,這同時也就是機器學習的效果不好的兩個主要原因,即錯誤的資料和錯誤的演算法。

1.1 訓練資料量不足

第一個問題就是訓練資料的數量問題,這是非常重要的問題。

因為即使是簡單的問題,一般也需要數千的樣本,這還是因為簡單的問題一般採用簡單的演算法就可以解決,對於複雜的影象或語音問題,通常需要數百萬的樣本,特別是如果採用現在非常熱門的深度學習演算法,比如卷積神經網路模型,這些複雜的模型如果沒有足夠的資料量支援,非常容易陷入過擬合的情況。

實際上更多數量的訓練集也是為了獲得更有代表性的資料,能夠學習到這類資料的所有特徵。

但是,應該注意到,小型和中型的資料集仍然是非常常見的,獲得額外的訓練資料並不總是輕易和廉價的,所以不要拋棄演算法。

1.2 沒有代表性的訓練資料

無論採用基於例項還是基於模型的學習,讓訓練資料對新資料具有代表性是非常重要的。如果訓練集沒有代表性,那麼訓練得到的模型就是不可能得到準確性的模型,比如人臉識別中,模型沒有學習到某個人最明顯的代表性的特徵,比如高鼻樑或者沒有眉毛等突出特徵,那麼模型對這個人的識別率就不會很高。

使用具有代表性的訓練集對於推廣到新案例是非常重要的。但是做起來比說起來要難:如果樣本太小,就會有樣本噪聲(即會有一定概率包含沒有代表性的資料),但是即使是非常大的樣本也可能沒有代表性,如果取樣方法錯誤的話。這叫做樣本偏差。

1.3 低質量的資料

低質量的資料指的是資料有錯誤、帶有過多噪聲或者是出現異常值等的資料,這種資料會影響系統整體的效能,因此,資料清洗對於構建一個機器學習系統或者一個機器學習專案來說都是必不可少的步驟。

對於這些低質量的資料,通常可以按照如下做法處理:

  • 如果一些例項是明顯的異常值,最好刪掉它們或嘗試手工修改錯誤;
  • 如果一些例項缺少特徵(比如,你的 5% 的顧客沒有說明年齡),你必須決定是否忽略這個屬性、忽略這些例項、填入缺失值(比如,年齡中位數),或者訓練一個含有這個特徵的模型和一個不含有這個特徵的模型,等等。

1.4 不相關的特徵

不相關的特徵對於整個機器學習系統是有著反作用的效果,訓練資料必須包含足夠多的相關特徵、非相關特徵不多的情況下,才能訓練出一個性能不錯的模型。機器學習專案成功的關鍵之一是用好的特徵進行訓練。這個過程稱作特徵工程,包括:

  • 特徵選擇:在所有存在的特徵中選取最有用的特徵進行訓練。
  • 特徵提取:組合存在的特徵,生成一個更有用的特徵(如前面看到的,可以使用降維演算法)。
  • 收集新資料建立新特徵。

1.5 過擬合

上述四種情況都是壞資料的情況,接下來是兩種演算法問題,也是機器學習最常見的兩種演算法方面的問題,過擬合和欠擬合。

過擬合就是指演算法模型在訓練集上的效能非常好,但是泛化能力很差,即在測試集上的效果卻很糟糕的情況。比如下圖,採用一個高階多項式迴歸模型來預測生活滿意度和人均 GDP 的關係,很明顯看出來,這個模型過擬合了訓練資料,其預測效果並不會達到在訓練資料上這麼好的效果。

過擬合示例

通常對於比較複雜的模型,比如深度神經網路,它能夠檢測和識別到資料中比較細微的規律和特徵,但是如果訓練集包含噪聲,或者訓練集數量太少(數量太少會引入樣本噪聲),這種情況下,模型同樣會學習這種噪聲,從而導致模型的泛化能力的下降。

一般解決過擬合的方法有:

  • 簡化模型,這包括了採用簡單點的模型、減少特徵數量以及限制模型,即採用正則化;
  • 增加訓練資料
  • 減小訓練資料的噪聲,即資料清洗,比如修正資料錯誤和去除異常值等

其中正則化方法是比較常用的方法,它的作用就是限制模型,不讓模型過於複雜,從而降低過擬合的風險或者是緩和過擬合的程度。常用的正則化方法是 L2 和 L1 正則化。正則化方法通常會採用一個超引數來控制其限制模型的強度。超引數是一個學習演算法的引數(而不是模型的)。這樣,它是不會被學習演算法本身影響的,它優於訓練,在訓練中是保持不變的。如何調節超引數也是構建一個機器學習演算法模型非常重要的一個步驟,也是讓效能能夠進一步提升的做法。

1.6 欠擬合

欠擬合和過擬合剛好相反,它就是模型的效能非常差,在訓練資料和測試資料上的效能都不好。

通常也是因為模型過於簡單,沒有能夠很好學習到資料的有效的相關的特徵,解決方法有:

  • 選擇一個更強大的模型,帶有更多引數
  • 用更好的特徵訓練學習演算法(特徵工程)
  • 減小對模型的限制(比如,減小正則化超引數)

2. 測試和評估

當訓練好一個機器學習模型後,接下來就需要對模型進行預測和評估,判斷得到的模型是否可用,是否還能進行提升,並進行錯誤分析等操作。

一般在訓練模型前,我們會將資料集分成兩個集合,分別是訓練集和測試集,通常 8:2 的比例,也就是 80% 的資料作為訓練集,剩餘是測試集。然後採用訓練集訓練模型,在測試集上用按照學習的問題採用對應評估指標評估模型的效能,比如分類問題,一般就是採用分類的準確率或者錯誤率作為評估的標準。

但這種劃分資料集的方法,存在一個問題,就是如果需要調節超引數,比如對於正則化的超引數、學習率等,繼續採用測試集來進行評估不同超引數對模型效能的影響,這會導致最後在測試集上測試得到效能最好的模型,實際上是過擬合了測試集,那麼模型的泛化能力也不會太好。

所以,為了解決這個問題,我們還需要為調節超引數劃分一個專門的資料集,測試集應該是用於測試最終得到的模型的效能。因此,我們再劃分一個叫做驗證集的資料集。

一種做法是可以將所有資料按照一定比例劃分為訓練集、驗證集和測試集,比如按照 6:2:2 的比例劃分;當然更通常的做法是採用交叉驗證:訓練集分成互補的子集,每個模型用不同的子集訓練,再用剩下的子集驗證。一旦確定模型型別和超引數,最終的模型使用這些超引數和全部的訓練集進行訓練,用測試集得到推廣誤差率。

3. 小結

最後我們總結下:

  1. 機器學習的四個主要挑戰是
    • 資料量太少
    • 資料問題,包括沒有代表性資料和質量差
    • 不相關特徵
    • 模型過擬合或者欠擬合
  2. 過擬合的解法方法有:
    • 簡化模型,包括採用更簡單的模型和更少的引數
    • 正則化方法降低模型的複雜度
    • 收集或者採用更大的資料集
    • 資料清洗,去除噪聲和異常值等
  3. 欠擬合的解決方法:
    • 採用更強大的模型,包含更多的引數和學習能力
    • 降低正則化的強度
    • 使用更好的特徵提取方法,即使用或者改善特徵工程的工作
  4. 採用交叉驗證方法進行超引數條件和模型的選擇

以上就是本文的主要內容和總結,歡迎關注我的微信公眾號–機器學習與計算機視覺或者掃描下方的二維碼,和我分享你的建議和看法,指正文章中可能存在的錯誤,大家一起交流,學習和進步!