1. 程式人生 > >從零開始機器學習-7 訓練集和測試集

從零開始機器學習-7 訓練集和測試集

本文由 沈慶陽 所有,轉載請與作者取得聯絡!
在繼續下去之前,我們需要提一下泛化。

泛化和過擬合

泛化(Generalization),指的是模型可以很好地擬合新的資料(以前不曾出現過的)。針對某些問題,我們可以僅僅使用一條直線來分類。雖然有一些資料可能不會很好地將所有的樣本都正確分類,但我們提倡這樣做。
如果將樣本用十分複雜的模型進行分類,也許會產生十分複雜的曲線,這些曲線可以做到百分百地將樣本中的所有樣本進行正確的分類。但這樣就是最好的麼?當我們對新的資料進行預測的時候,往往會發現並不如此。這個複雜的模型對新的資料預測或許會十分糟糕,這就是過擬合。
機器學習的目標是對真實的概率分佈做出正確的預測。我們在訓練的過程中,這個概率分佈是未知的。在機器學習領域,奧卡姆剃刀定律解釋如下:
機器學習模型越簡單,良好的結果就越可能不僅僅基於樣本的特性。
奧卡姆剃刀定律

對於機器學習來說,我們需要使用以前從未見過的資料來進行預測。那麼如何獲得這些資料呢?目前通常採用的方法是將資料集劃分為訓練集和測試集。

訓練集和測試集

我們在前面完成Object Detection的專案,訓練自己的模型的時候獲取過大量的照片,這些照片就是我們的資料集(DataSet)。同時,我們將資料集分為了訓練集(Training Set)和測試集(Test Set)。讓我們再來回顧一下訓練集和測試集的概念。
資料集的劃分

訓練集:用於訓練模型的子集。
測試集:用於測試訓練後模型的子集。

當把資料集劃分為訓練集和測試集的時候,我們的模型訓練的流程是這樣的。在每一次迭代的過程中,我們先通過訓練集的資料對模型進行訓練,而後通過測試集來對該模型進行測試,並以測試結果作為指導來調整模型的各種超引數。
請大家根據這個流程思考一下該流程可能存在哪些問題?還有沒有可以改進的空間?
劃分訓練集和測試集的工作流程


對於訓練集,訓練集的規模越大,我們訓練的模型的學習效果就越好。對於測試集,測試集的規模越大,我們對於評估指標的資訊就越充足。通常,測試集與訓練集的比例在1:9左右。但這個比例僅僅提供參考,在實際應用中仍然要應變。
對於測試集的選擇有如下要求:1、規模足夠大 2、能代表整個資料集
此外,千萬不要將測試集的資料混入訓練集當中,也就是說錯誤地對測試集進行了訓練。如果發現訓練模型測試的準確度達到了100%,請不要開始慶祝,先找一下你的訓練集中是不是混入了測試集的資料吧。

驗證:另一種劃分

對於僅僅將資料集分為訓練集和測試集的流程,我們可以發現,通過一次次的使用測試集對模型進行測試,會造成不自覺地過擬合測試集資料的風險(畢竟是以測試集的測試結果來作為參考調整模型的超引數)。那麼有沒有一種更好的劃分方法呢?
有!那就是引入另一個名為驗證集的資料集,這些資料成為驗證資料。
加入驗證集的劃分方法

在這個流程中,我們暫且不使用任何測試資料。在每一次迭代的時候,每一次驗證的時候,每一次調整超引數的時候僅根據驗證資料來得到較好的結果。此時再根據驗證集得到的模型來代入測試集的資料進行測試。如果這時候模型通過了測試集的測試(與驗證集測試的結果同樣好)。那麼這次訓練便是成功地。如果通過了驗證集的測試,卻沒有通過測試集的測試,那麼便可知我們對驗證集進行了過擬合。
引入了驗證集的工作流程

後繼

在後續的幾篇文章中,我們將通過Tensorflow的實戰,從頭開始幾個機器學習的小專案,並在實戰中講解前幾堂課所學習的知識。

覺得寫的不錯的朋友可以點一個 喜歡♥ ~
謝謝你的支援!