日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

机器学习技巧:如何(以及为什么需要)创建一个好的验证集

發(fā)布時間:2025/3/8 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 机器学习技巧:如何(以及为什么需要)创建一个好的验证集 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

作者:Rachel Thomas? ?編譯:ronghuaiyang

導(dǎo)讀

驗證集的劃分真的就是調(diào)用一個train_test_split函數(shù)這么簡單么,其實并不是。

一個非常常見的場景:一個看起來非常好的機器學(xué)習模型在現(xiàn)實的生產(chǎn)環(huán)境中使用時是完全失敗的。其后果包括老板對現(xiàn)在的機器學(xué)習持懷疑態(tài)度,不愿再嘗試。怎么會這樣呢?

導(dǎo)致開發(fā)結(jié)果與生產(chǎn)結(jié)果之間脫節(jié)的最可能的原因之一是錯誤地選擇了驗證集(甚至更糟,根本沒有驗證集)。根據(jù)數(shù)據(jù)的性質(zhì),選擇驗證集可能是最重要的一步。雖然sklearn提供了一個train_test_split方法,但該方法只獲取數(shù)據(jù)的一個隨機子集,對于許多實際問題來說,這是一個糟糕的選擇。

訓(xùn)練集、驗證集和測試集的定義可能非常微妙,而且這些術(shù)語有時使用不一致。在深度學(xué)習社區(qū)中,“測試時間推斷”通常指的是對生產(chǎn)中的數(shù)據(jù)進行評估,這不是測試集的技術(shù)定義。如前所述,sklearn有個train_test_split方法,但沒有train_validation_test_split方法。Kaggle只提供訓(xùn)練和測試集,但是要做得好,你需要將它們的訓(xùn)練集分解為你自己的驗證集和訓(xùn)練集。此外,Kaggle的測試集實際上被細分為兩個子集。許多初學(xué)者可能會感到困惑,這一點也不奇怪!我將在下面討論這些微妙之處。

首先,什么是“驗證集”?

當創(chuàng)建一個機器學(xué)習模型時,最終的目標是使它在新數(shù)據(jù)上是準確的,而不僅僅是在你用來構(gòu)建它的數(shù)據(jù)上可以工作的很好。下面是一組數(shù)據(jù)的3個不同模型的例子:

under-fitting and over-fitting

圖中數(shù)據(jù)點的誤差對于最右邊的模型來說是最小的(藍色曲線幾乎完美地通過了紅色點),但這并不是最好的選擇。這是為什么呢?如果你要收集一些新的數(shù)據(jù)點,它們很可能不在右邊圖表的曲線上,而是更接近中間圖表的曲線。

其基本思想是:

  • 訓(xùn)練集用于訓(xùn)練給定的模型

  • 驗證集用于在模型之間進行選擇(例如,隨機森林還是神經(jīng)網(wǎng)絡(luò)更適合你的問題?)你想要一個有40棵樹的隨機森林還是50棵樹的隨機森林?)

  • 測試集告訴你,你做的怎么樣。如果你嘗試了許多不同的模型,你可能會偶然得到一個在你的驗證集上表現(xiàn)良好的模型,而擁有一個測試集有助于確保情況并非如此。

驗證和測試集的一個關(guān)鍵屬性是它們必須代表你在將來看到的新數(shù)據(jù)。這聽起來似乎是一個不可能的命令!根據(jù)定義,你還沒有看到這些數(shù)據(jù)。但你還是知道一些關(guān)于這些數(shù)據(jù)的事情。

什么時候隨機的子集不夠好?

看幾個例子是有益的。雖然這些例子中有許多來自Kaggle競賽,但它們代表了你在實際工作中所看到的問題。

時間序列

如果你的數(shù)據(jù)是一個時間序列,選擇一個隨機的數(shù)據(jù)子集就太簡單了(你可以看看你試圖預(yù)測的之前和之后的數(shù)據(jù)日期),并不代表大多數(shù)業(yè)務(wù)樣本的情況(實際的業(yè)務(wù)是使用歷史數(shù)據(jù)建立一個模型用于未來的預(yù)測)。如果你的數(shù)據(jù)包含日期,并且你正在構(gòu)建一個模型以供將來使用,那么你會希望選擇一個連續(xù)的部分,其中包含最新的日期作為你的驗證集(例如,可用數(shù)據(jù)的最近兩周或上個月)。

假設(shè)你想把下面的時間序列數(shù)據(jù)分成訓(xùn)練集和驗證集:

時間序列數(shù)據(jù)

隨機的子集是一個糟糕的選擇(太容易填補空白,并不能說明你在生產(chǎn)中需要什么):

訓(xùn)練集的糟糕的選擇

使用較早的數(shù)據(jù)作為訓(xùn)練集(和較晚的數(shù)據(jù)作為驗證集):

訓(xùn)練集的一個更好的選擇

Kaggle有個比賽,預(yù)測厄瓜多爾雜貨連鎖店的銷售額。Kaggle的“訓(xùn)練數(shù)據(jù)”從2013年1月1日到2017年8月15日,測試數(shù)據(jù)從2017年8月16日到2017年8月31日。一個好的方法是將2017年8月1日至8月15日作為你的驗證集,并將所有之前的數(shù)據(jù)作為你的訓(xùn)練集。

新的人員,新的船,新的...

您還需要考慮在生產(chǎn)環(huán)境中進行預(yù)測的數(shù)據(jù)可能與您必須訓(xùn)練模型使用的數(shù)據(jù)在性質(zhì)上有所不同。

在Kaggle的分心駕駛員競賽中,數(shù)據(jù)是駕駛員開車的圖片,因變量是一個類別,如發(fā)短信、吃飯或安全向前看。如果你是一家根據(jù)這些數(shù)據(jù)構(gòu)建模型的保險公司,請注意,你最感興趣的是模型在你以前沒有見過的駕駛員身上的表現(xiàn)(因為你可能只有一小部分人的訓(xùn)練數(shù)據(jù))。Kaggle競賽也是如此:測試數(shù)據(jù)由沒有在訓(xùn)練集中使用的人員組成。

同一個人一邊開車一邊打電話的兩張圖片。

如果你把上面的一張圖片放在你的訓(xùn)練集里,另一張放在驗證集里,你的模型看起來會比它在新人身上表現(xiàn)得更好。另一種觀點是,如果你讓所有的人來訓(xùn)練你的模型,你的模型可能會對那些特定的人的特征過擬合,而不僅僅是學(xué)習到狀態(tài)(發(fā)短信,吃東西,等等)。

類似的動態(tài)也在“Kaggle漁業(yè)競賽“中發(fā)揮作用,該競爭旨在確定漁船捕撈的魚類種類,以減少對瀕危種群的非法捕撈。測試集由沒有出現(xiàn)在訓(xùn)練數(shù)據(jù)中的船只組成。這意味著你希望你的驗證集包括不在訓(xùn)練集中的船只。

有時可能不清楚你的測試數(shù)據(jù)是如何不同。例如,對于使用衛(wèi)星圖像的問題,你需要收集更多的信息,以確定訓(xùn)練集是否只包含特定的地理位置,還是來自地理上分散的數(shù)據(jù)。

交叉驗證的危險

sklearn之所以沒有train_validation_test是假定你會經(jīng)常使用交叉驗證,用不同的訓(xùn)練集的子集作為驗證集。例如,三折交叉驗證,數(shù)據(jù)分為3組:A、B和C,,模型第一次在A和B組合起來的訓(xùn)練集上訓(xùn)練,在驗證集C上評估C ,接下來,模型在A和C組合起來的訓(xùn)練集上訓(xùn)練,在驗證集B上評估,等等。模型的表現(xiàn)是三個的平均。

然而,交叉驗證的問題在于,它很少適用于現(xiàn)實世界中的問題,原因如上述各節(jié)所述。交叉驗證只在可以隨機打亂數(shù)據(jù)以選擇驗證集的情況下有效。

Kaggle的“訓(xùn)練數(shù)據(jù)集”=你的訓(xùn)練數(shù)據(jù)+驗證數(shù)據(jù)

Kaggle競賽的一大優(yōu)點是,它迫使你更嚴格地考慮驗證集(以便做得更好)。對于那些剛接觸Kaggle的人來說,這是一個舉辦機器學(xué)習競賽的平臺。Kaggle通常將數(shù)據(jù)分成兩組,你可以下載:

  • 一個訓(xùn)練集,其中包括自變量,以及因變量(你試圖預(yù)測什么)。例如,厄瓜多爾雜貨店試圖預(yù)測銷售額,自變量包括商店id、商品id和日期,因變量是賣出的數(shù)量。例如,試圖確定一個司機是否在開車時做出了危險的行為,自變量可以是司機的照片,因變量是一個類別(如發(fā)短信、吃東西或安全向前看)。

  • 一個測試集,它只有自變量。你將對測試集進行預(yù)測,你可以將這些預(yù)測提交給Kaggle,并得到你的成績分數(shù)。

  • 這是開始機器學(xué)習所需要的基本思想,但是要想做得好,需要理解的復(fù)雜性要大一些。你會希望創(chuàng)建自己的訓(xùn)練和驗證集(通過分割Kaggle“訓(xùn)練”數(shù)據(jù))。你只需使用較小的訓(xùn)練集(Kaggle訓(xùn)練數(shù)據(jù)的子集)來構(gòu)建模型,在提交給Kaggle之前,你可以在驗證集(Kaggle訓(xùn)練數(shù)據(jù)的子集)上對其進行評估。

    最重要的原因是Kaggle將測試數(shù)據(jù)分為兩組:public和private排行榜。你在public排行榜上看到的分數(shù)只是你預(yù)測的一部分(你不知道是哪一部分!)你的預(yù)測在private排行榜上的表現(xiàn)要到比賽結(jié)束后才會揭曉。這很重要的原因是,你可能最終會過擬合public排行榜,直到最后你在private排行榜上表現(xiàn)不佳時,你才會意識到這一點。使用良好的驗證集可以防止這種情況。你可以通過查看你的模型在Kaggle測試集上的得分是否與驗證集上的得分相似來檢查驗證集是否良好。

    創(chuàng)建自己的驗證集很重要的另一個原因是,Kaggle限制你每天只能提交兩次,而且你可能希望嘗試更多次。第三,看看你在驗證集上到底做錯了什么是很有啟發(fā)性的,Kaggle不會告訴你測試集的正確答案,甚至不會告訴你你做錯了哪些數(shù)據(jù)點,只會告訴你你的總成績。

    理解這些區(qū)別不僅對Kaggle有用。在任何預(yù)測機器學(xué)習項目中,你都希望你的模型能夠在新數(shù)據(jù)上表現(xiàn)良好。

    —END—

    英文原文:https://www.fast.ai/2017/11/13/validation-sets/

    往期精彩回顧適合初學(xué)者入門人工智能的路線及資料下載機器學(xué)習在線手冊深度學(xué)習在線手冊AI基礎(chǔ)下載(pdf更新到25集)備注:加入本站微信群或者qq群,請回復(fù)“加群”獲取一折本站知識星球優(yōu)惠券,請回復(fù)“知識星球”

    喜歡文章,點個在看

    總結(jié)

    以上是生活随笔為你收集整理的机器学习技巧:如何(以及为什么需要)创建一个好的验证集的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。