當前位置:
首頁 > 新聞 > 三分鐘重新學習交叉驗證

三分鐘重新學習交叉驗證

雷鋒網 AI 科技評論按:文章的作者Georgios Drakos是一名數據科學家,通過本文作者向我們介紹了交叉驗證的基本概念、作用以及如何使用。雷鋒網 AI 科技評論根據原文進行了編譯。

驗證可能是數據科學家們所使用的最重要的技術之一,因為驗證操作有助於我們了解模型的穩定性——用來探索模型對新數據的泛化能力。我們需要確保模型從數據中正確學習到了大部分的模式,並且沒有被數據中的雜訊過度干擾,也就是說,模型的偏差和方差都能保持在一個較低值。而本文的目的正是要介紹一下有關於交叉驗證(Cross-validation)的概念。


什麼是交叉驗證?

「交叉驗證」是一種模型驗證技術,可用於評估統計分析(模型)結果在其它獨立數據集上的泛化能力。它主要用於預測,我們可以用它來評估預測模型在實踐中的準確度。

交叉驗證的目標是定義一個數據集,以便於在訓練階段(例如,驗證數據集)中測試模型,從而限制模型過擬合、欠擬合等問題,並且幫助我們了解模型在其它獨立數據集上的泛化能力。值得一提的是,驗證集和訓練集必須滿足獨立同分布條件,否則交叉驗證只會讓結果變得更加糟糕。


為什麼交叉驗證會有這些助益?

驗證有助於我們評估模型的質量

驗證有助於我們挑選出那些能夠在預測數據集上取得最好性能的模型

驗證有助於我們避免過擬合與欠擬合

什麼是過擬合/欠擬合?

欠擬合指的是模型沒能夠從訓練數據中學習到足夠的模式。此時,模型在訓練集和測試集上的表現都非常差。

過擬合則有兩種情況:第一種,模型學習到過多的雜訊;第二種,模型學習到的模式泛化能力差。此時,模型在訓練集上表現很好,但是在測試集上表現則非常差(對於分類任務而言,可以看作是模型學習到了同類別的不同實例之間的區別,並把它們作為分類依據,所以面對新的實例時分類性能不佳)。

而最佳的模型應該能夠在訓練集和測試集上都表現得很好。


不同的驗證策略

通常,依據數據集中分割方式的不同,會有不同的驗證策略。

訓練測試集劃分/Holdout 驗證 —— 組數為 2

在該策略中,我們簡單地將數據集劃分成兩組:訓練集和測試集,並且要求訓練集和測試集之間的樣本不存在任何重疊,如果存在重疊,那麼驗證手段將失效。在準備發布最終模型之前,我們可以在整個數據集上重新訓練模型,而不需要更改任何超參數。

但是這種劃分方式存在一個主要的缺陷:

如果我們的劃分方式並不是隨機的呢?比如,我們數據的某個子集只有來自於某個州的人,或者某個子集中只含有某一特定水平收入的員工,又或者子集中只含有女性或特定年齡的人,這時我們該怎麼辦?儘管我們一直在極力避免,但是這些情況都將導致模型的過擬合,因為此時無法確定哪些數據點會出現在驗證集中,並且針對不同的數據集,模型的預測結果也可能完全不同。因此,只有當我們擁有充足的數據時,這種做法才是合適的。

Python 的實現方式:sklearn.model_selection.train_test_split

k 分劃分 —— 組數為k

由於永遠不會有充足的數據來訓練模型,因此如果將數據集中的某一部分劃分出來用於驗證還會導致模型出現欠擬合的問題。由於訓練數據樣本減少,我們的模型面臨著丟失掌握重要模式/趨勢機會的風險,從而增加偏差引起的誤差。因此,我們需要一種方法,它既能夠為訓練模型提供充足的數據樣本,又能夠為驗證步驟保留一定數量的數據。k 分(k-fold)交叉驗證正是我們所需要的。

k 分交叉驗證可以看做是執行了多次的簡單二分劃分驗證,然後我們在執行了 k 次不同的簡單劃分驗證之後繼續簡單地將得分進行平均。數據集中的每個數據點只能在驗證集中出現一次,並且在訓練集中出現 k-1 次。這種做法將大大減輕欠擬合現象,因為我們使用了幾乎所有的數據來訓練模型,同時還能顯著減少過擬合現象,因為大部分數據也被用來做驗證。

當我們的數據量較小時,或者在不同的劃分數據集中,我們的模型性能或者最優參數存在較大的區別時,k 分交叉驗證是一種很好的選擇。通常情況下,我們設置 k=5 或 k=10,這些值來自於經驗總結,大量實驗證明當 k 取這些值時,驗證結果不會存在過高的偏差或者方差。

Python 實現代碼:sklearn.model_selection.KFold

留一法 —— 組數訓練數據集大小

當 k 等於數據集中的樣本數時,留一法(Leave one out)實際上可以看做 k 分交叉驗證的一個特例。這意味著每次使用 k-1 個樣本作為訓練樣本而剩下 1 個樣本作為驗證樣本,然後照此遍曆數據集。

如果我們的數據量非常小並且模型的訓練速度非常快,那麼可以考慮該方法。

Python 實現代碼:sklearn.model_selection.LeaveOneOut

額外補充 —— 分層法(Stratification)

通常,在使用訓練集/測試集劃分或者是 k 分交叉驗證的時候,我們會將數據集進行隨機重排,以便於得到隨機的訓練/驗證集劃分。在這種情況下,可以將不同的目標分布應用於不同的劃分區域中。通過分層法,當我們在分割數據時,我們可以在不同的劃分區域中獲得相似的目標分布。

該方法對以下情況有效:

小數據集

數據不平衡

多分類問題

通常而言,對於一個類別平衡的大型數據集,分層劃分法和簡單的隨機劃分基本一樣。


什麼時候使用?

如果我們有充足的數據,並且對於不同的劃分方式,我們都能獲得相近的成績以及最優參數模型,那麼訓練集/測試集二分劃分是一種不錯的選擇。而如果恰恰相反,也就是對於不同的劃分方式,模型的測試成績和最優參數都存在著較大的差異時,我們可以選擇 k 分交叉驗證。如果數據總量非常少,則可以考慮使用留一法。此外,分層法有助於使驗證結果更加穩定,並且對於小型且類別不平衡的數據集尤其管用。


k 分交叉驗證的 k 該取多少?

當 k 的取值越大時,由偏差導致的誤差將減少,而由方差導致的誤差將增加,此外計算的代價也將上升。顯然,你需要更多的時間來計算,並且也會消耗更多的內存。

當 k 的取值越小時,由方差導致的誤差將減少,而由偏差導致的誤差將增加。此外,這時所需的計算資源也將減少。

針對大型數據集的時候,我們通常將 k 設置為 3 或者 5,但是對於小型數據集我們還是建議採用留一法。


總結

交叉驗證是數據科學家評估模型有效性的一個非常有用的工具,特別是用於解決過擬合和欠擬合問題。此外,在確定模型最優超參數問題上,它也是非常有幫助的。

Via《Cross-Validation》,由雷鋒網 AI 科技評論編譯。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 雷鋒網 的精彩文章:

Arm和三星計劃將Artisan POP IP合作擴展至7LPP和5LPE節點
CEBIT 2018:聚焦數字化轉型,IBM、Intel 、華為、浪潮悉數亮相

TAG:雷鋒網 |