日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

评估机器学习模型的几种方法(验证集的重要性)

發(fā)布時(shí)間:2024/8/24 综合教程 32 生活家
生活随笔 收集整理的這篇文章主要介紹了 评估机器学习模型的几种方法(验证集的重要性) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

什么是評估機(jī)器學(xué)習(xí)模型

  機(jī)器學(xué)習(xí)的目的是得到可以泛化(generalize)的模型,即在前所未見的數(shù)據(jù)上表現(xiàn)很好的模型,而過擬合則是核心難點(diǎn)。你只能控制可以觀察的事情,所以能夠可靠地衡量模型的泛化能力非常重要。  

如何衡量泛化能力,即如何評估機(jī)器學(xué)習(xí)模型。

評估模型的重點(diǎn)是將數(shù)據(jù)劃分為三個(gè)集合:訓(xùn)練集、驗(yàn)證集和測試集。在訓(xùn)練數(shù)據(jù)上訓(xùn)練模型,在驗(yàn)證數(shù)據(jù)上評估模型。一旦找到了最佳參數(shù),就在測試數(shù)據(jù)上最后測試一次。

為什么需要驗(yàn)證集

  原因在于開發(fā)模型時(shí)總是需要調(diào)節(jié)模型配置,比如選擇層數(shù)或每層大小[這叫作模型的超參數(shù)(hyperparameter),以便與模型參數(shù)(即權(quán)重)區(qū)分開]。這個(gè)調(diào)節(jié)過程需要使用模型在驗(yàn)證數(shù)據(jù)上的性能作為反饋信號。這個(gè)調(diào)節(jié)過程本質(zhì)上就是一種學(xué)習(xí):在某個(gè)參數(shù)空間中尋找良好的模型配置。因此,如果基于模型在驗(yàn)證集上的性能來調(diào)節(jié)模型配置,會很快導(dǎo)致模型在驗(yàn)證集上過擬合,即使你并沒有在驗(yàn)證集上直接訓(xùn)練模型也會如此。
  造成這一現(xiàn)象的關(guān)鍵在于信息泄露(information leak)。每次基于模型在驗(yàn)證集上的性能來調(diào)節(jié)模型超參數(shù),都會有一些關(guān)于驗(yàn)證數(shù)據(jù)的信息泄露到模型中。如果對每個(gè)參數(shù)只調(diào)節(jié)一次,那么泄露的信息很少,驗(yàn)證集仍然可以可靠地評估模型。但如果你多次重復(fù)這一過程(運(yùn)行一次實(shí)驗(yàn),在驗(yàn)證集上評估,然后據(jù)此修改模型),那么將會有越來越多的關(guān)于驗(yàn)證集的信息泄露到模型中。
  最后,你得到的模型在驗(yàn)證集上的性能非常好(人為造成的),因?yàn)檫@正是你優(yōu)化的目的。你關(guān)心的是模型在全新數(shù)據(jù)上的性能,而不是在驗(yàn)證數(shù)據(jù)上的性能,因此你需要使用一個(gè)完全不同的、前所未見的數(shù)據(jù)集來評估模型,它就是測試集。你的模型一定不能讀取與測試集有關(guān)的任何信息,既使間接讀取也不行。如果基于測試集性能來調(diào)節(jié)模型,那么對泛化能力的衡量是不準(zhǔn)確的。
將數(shù)據(jù)劃分為訓(xùn)練集、驗(yàn)證集和測試集可能看起來很簡單,但如果可用數(shù)據(jù)很少,還有幾種高級方法可以派上用場。

我們先來介紹三種經(jīng)典的評估方法:簡單的留出驗(yàn)證、K 折驗(yàn)證,以及帶有打亂數(shù)據(jù)的重復(fù) K 折驗(yàn)證。

1. 簡單的留出驗(yàn)證
留出一定比例的數(shù)據(jù)作為測試集。在剩余的數(shù)據(jù)上訓(xùn)練模型,然后在測試集上評估模型。
如前所述,為了防止信息泄露,你不能基于測試集來調(diào)節(jié)模型,所以還應(yīng)該保留一個(gè)驗(yàn)證集。

留出驗(yàn)證的偽代碼:

1、將原有數(shù)據(jù)集打亂順序shuffle_data
2、將打亂的數(shù)據(jù)集的一部分(一般為10%-20%)定義為驗(yàn)證集valify_data
3、剩余的數(shù)據(jù)定義為訓(xùn)練數(shù)據(jù)train_data
4、根據(jù)需求建模 model
5、訓(xùn)練模型model.train(train_data)
6、在驗(yàn)證集上評估模型model.evaluate(valify_data)
7、調(diào)節(jié)模型
8、重復(fù)5、6、7直到模型在驗(yàn)證集上表現(xiàn)良好
9、在測試集上測試模型

  這是最簡單的評估方法,但有一個(gè)缺點(diǎn):如果可用的數(shù)據(jù)很少,那么可能驗(yàn)證集和測試集包含的樣本就太少,從而無法在統(tǒng)計(jì)學(xué)上代表數(shù)據(jù)。這個(gè)問題很容易發(fā)現(xiàn):如果在劃分?jǐn)?shù)據(jù)前進(jìn)行不同的隨機(jī)打亂,最終得到的模型性能差別很大,那么就存在這個(gè)問題。

2. K 折驗(yàn)證
  K 折驗(yàn)證(K-fold validation)將數(shù)據(jù)劃分為大小相同的 K 個(gè)分區(qū)。對于每個(gè)分區(qū) i ,在剩余的 K-1 個(gè)分區(qū)上訓(xùn)練模型,然后在分區(qū) i 上評估模型。最終分?jǐn)?shù)等于 K 個(gè)分?jǐn)?shù)的平均值。對于不同的訓(xùn)練集 - 測試集劃分,如果模型性能的變化很大,那么這種方法很有用。與留出驗(yàn)證一樣,這種方法也需要獨(dú)立的驗(yàn)證集進(jìn)行模型校正。

偽代碼

將原來的數(shù)據(jù)平均k份
根據(jù)需求建模 model
for i in range(k)
    將第 i 份數(shù)據(jù)作為驗(yàn)證集,其他k-1份數(shù)據(jù)作為訓(xùn)練集
    在訓(xùn)練集上訓(xùn)練模型
    在驗(yàn)證集上【】評估模型
在測試集上測試模型

數(shù)據(jù)量小的時(shí)候,k 可以設(shè)大一點(diǎn),這樣訓(xùn)練集占整體比例就比較大,不過同時(shí)訓(xùn)練的模型個(gè)數(shù)也增多。
數(shù)據(jù)量大的時(shí)候,k 可以設(shè)小一點(diǎn)。

3、帶有打亂數(shù)據(jù)的重復(fù) K 折驗(yàn)證

  如果可用的數(shù)據(jù)相對較少,而你又需要盡可能精確地評估模型,那么可以選擇帶有打亂數(shù)據(jù)的重復(fù) K 折驗(yàn)證(iterated K-fold validation with shuffling)。具體做法是多次使用 K 折驗(yàn)證,在每次將數(shù)據(jù)劃分為 K 個(gè)分區(qū)之前都先將數(shù)據(jù)打亂。最終分?jǐn)?shù)是多次 k 折交叉驗(yàn)證再求均值,例如:10 次 10 折交叉驗(yàn)證,以求更精確一點(diǎn)。注意,這種方法一共要訓(xùn)練和評估 P×K 個(gè)模型(P是重復(fù)次數(shù)),計(jì)算代價(jià)很大。


  除此之外還有一種比較特殊的交叉驗(yàn)證方法,有人將其叫做Bootstrapping。通過又放回的抽樣,抽取與train_data相同數(shù)量的數(shù)據(jù)作為新的訓(xùn)練集。即在含有 m 個(gè)樣本的數(shù)據(jù)集中,每次隨機(jī)挑選一個(gè)樣本,再放回到數(shù)據(jù)集中,再隨機(jī)挑選一個(gè)樣本,這樣有放回地進(jìn)行抽樣 m 次,組成了新的數(shù)據(jù)集作為訓(xùn)練集。

優(yōu)點(diǎn)是訓(xùn)練集的樣本總數(shù)和原數(shù)據(jù)集一樣都是 m,并且仍有約 1/3 的數(shù)據(jù)不被訓(xùn)練而可以作為測試集。
缺點(diǎn)是這樣產(chǎn)生的訓(xùn)練集的數(shù)據(jù)分布和原數(shù)據(jù)集的不一樣了,會引入估計(jì)偏差。

總結(jié)

以上是生活随笔為你收集整理的评估机器学习模型的几种方法(验证集的重要性)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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