[深度概念]·K-Fold 交叉驗證 (Cross-Validation)的理解與應用

個人主頁--> xiaosongshine.github.io/

1.K-Fold 交叉驗證概念

在機器學習建模過程中,通行的做法通常是將數據分為訓練集和測試集。測試集是與訓練獨立的數據,完全不參與訓練,用于最終模型的評估。在訓練過程中,經常會出現過擬合的問題,就是模型可以很好的匹配訓練數據,卻不能很好在預測訓練集外的數據。如果此時就使用測試數據來調整模型參數,就相當于在訓練時已知部分測試數據的信息,會影響最終評估結果的準確性。通常的做法是在訓練數據再中分出一部分做為驗證(Validation)數據,用來評估模型的訓練效果。

驗證數據取自訓練數據,但不參與訓練,這樣可以相對客觀的評估模型對于訓練集之外數據的匹配程度。模型在驗證數據中的評估常用的是交叉驗證,又稱循環驗證。它將原始數據分成K組(K-Fold),將每個子集數據分別做一次驗證集,其余的K-1組子集數據作為訓練集,這樣會得到K個模型。這K個模型分別在驗證集中評估結果,最后的誤差MSE(Mean Squared Error)加和平均就得到交叉驗證誤差。交叉驗證有效利用了有限的數據,并且評估結果能夠盡可能接近模型在測試集上的表現,可以做為模型優化的指標使用。

2.舉例說明

下面舉一個具體的例子來說明K-Fold的過程,比如如下的數據

[0.1, 0.2, 0.3, 0.4, 0.5, 0.6]
復制代碼

分為K=3組后

Fold1: [0.5, 0.2]
Fold2: [0.1, 0.3]
Fold3: [0.4, 0.6]
復制代碼

交叉驗證的時會使用如下三個模型,分別進行訓練和測試,每個測試集誤差MSE加和平均就得到了交叉驗證的總評分

Model1: Trained on Fold1 + Fold2, Tested on Fold3
Model2: Trained on Fold2 + Fold3, Tested on Fold1
Model3: Trained on Fold1 + Fold3, Tested on Fold2復制代碼

3.應用講解


1、 將全部訓練集S分成k個不相交的子集,假設S中的訓練樣例個數為m,那么每一個子集有m/k個訓練樣例,相應的子集稱作{?}。

2、 每次從模型集合M中拿出來一個?,然后在訓練子集中選擇出k-1個

{?}(也就是每次只留下一個?),使用這k-1個子集訓練?后,得到假設函數?。最后使用剩下的一份?作測試,得到經驗錯誤?。

3、 由于我們每次留下一個?(j從1到k),因此會得到k個經驗錯誤,那么對于一個?,它的經驗錯誤是這k個經驗錯誤的平均。

4、 選出平均經驗錯誤率最小的?,然后使用全部的S再做一次訓練,得到最后的?。


核心內容:

通過上述1,2,3步進行模型性能的測試,取平均值作為某個模型的性能指標

根據性能指標來挑選出最優模型,再進行上述第4步重新進行訓練,獲得最終模型

疑問解答:

1.為什么不直接拆分訓練集與數據集,來驗證模型性能,反而采用多次劃分的形式,豈不是太麻煩了?

我們為了防止在訓練過程中,出現過擬合的問題,通行的做法通常是將數據分為訓練集和測試集。測試集是與訓練獨立的數據,完全不參與訓練,用于最終模型的評估。這樣的直接劃分會導致一個問題就是測試集不會參與訓練,這樣在小的數據集上會浪費掉這部分數據,無法使模型達到最優(數據決定了程性能上限,模型與算法會逼近這個上限)。但是我們又不能劃分測試集,因為需要驗證網絡泛化性能。采用K-Fold 多次劃分的形式就可以利用全部數據集。最后采用平均的方法合理表示模型性能。

2.為什么還要進行所有數據集重新訓練,是否太浪費時間?

我們通過K-Fold 多次劃分的形式進行訓練是為了獲取某個模型的性能指標,單一K-Fold訓練的模型無法表示總體性能,但是我們可以通過K-Fold訓練的訓練記錄下來較為優異的超參數,然后再以最優模型最優參數進行重新訓練,將會取得更優結果。

3.何時使用K-Fold

我的看法,數據總量較小時,其他方法無法繼續提升性能,可以嘗試K-Fold。其他情況就不太建議了,例如數據量很大,就沒必要更多訓練數據,同時訓練成本也要擴大K倍(主要指的訓練時間)。

4.參考

1.K-Fold 交叉驗證 (Cross-Validation)

2.規則化和模型選擇(Regularization and model selection)


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:
http://www.pswp.cn/news/536598.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/536598.shtml
英文地址,請注明出處:http://en.pswp.cn/news/536598.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

linux mariadb 升級,linux mariadb

linux mariadb轉載 一 安裝下載mariaDB MariaDB-5.5.29-rhel5-x86_64-common.rpm 和MariaDB-5.5.29-rhel5-x86_64-server.rpm 包,MariaDB-5.5.29-rhel5-x86_64-client.rpm2.然后再http.//yum。mariadb。org/ 找到 RPM-GPG-KEY-MariaDB 這個PGP文件,把文件放入到/etc…

Linux Note

日期:2019/3/31 內容:Linux學習筆記 一、Linux命令 ls -l 操作效果 第一列:文件權限 一共10位。 01(r)2(w)3(x)4(r)5(w)6(x)7(r)8(w)9(x)文件類型文件所有者權限 usr權限,u權限文件所有者所屬組成員的權限 group權限,g…

linux查看usb鼠標是否啟動,Linux USB鼠標驅動注解及測試

參考2.6.14版本中的driver/usb/input/usbmouse.c。鼠標驅動可分為多個部分:驅動加載部分、probe部分、open部分、urb回調函數處理部分。下文陰影部分為注解。一、 驅動加載部分static int __init usb_mouse_init(void){int retval usb_register(&usb_mouse_…

退役前的最后的做題記錄upd:2019.04.04

考試考到自閉&#xff0c;每天被吊打。 還有幾天可能就要AFO了呢。。。 Luogu3602&#xff1a;Koishi Loves Segments 從左向右&#xff0c;每次刪除右端點最大的即可。 [HEOI2014]南園滿地堆輕絮 答案一定是 \(\lceil \frac{max_{1\le i < j \le n}(a_i-a_j)}{2} \rceil\)。…

linux ssh-add,linux – 如何使ssh-add從文件讀取密碼?

根據您的發行版本和ssh-add的版本,您可以使用或不使用以這種方式從stdin讀取密碼的ssh-add的-p選項&#xff1a;cat passfile | ssh-add -p keyfile如果這不工作,您可以使用Expect,Unix工具使交互式應用程序非互動.你必須從你的包管理器安裝它.我為你準備了一個工具.只需將內容…

linux nginx F配置,linux下nginx的安裝及配置

1、安裝nginx前&#xff0c;咱們首先要確保系統安裝了g、gcc、openssl-devel、pcre-devel和zlib-devel軟件&#xff0c;可經過如圖所示命令進行檢測,若是以安裝咱們能夠經過圖二所示卸載&#xff1a;linuxyum install gcc-cyum -y install zlib zlib-devel openssl openssl--de…

你缺啥,你缺一個得力的辦公軟件

其實你缺啥我都知道&#xff0c;但是&#xff0c;我又不能給你發工資&#xff0c;還得你自己努力工作才行。不過我可以給你分享幾款好用的辦公軟件&#xff0c;對你在進行有效率的辦公會有很大幫助的。曲奇辦公是一款以文檔為載體的企業辦公管理應用。幫助企業快速實現業務標準…

C語言做一個表格的程序,用C語言畫個簡單表格

今天見到個題目&#xff0c;就把他做了&#xff0c;題目如下&#xff1a;在圖形環境中很容易做出漂亮的表格。但在控制臺環境中就比較困難了。有的時候可以用一些符號大略地模擬&#xff1a;(word文檔中可能不整齊&#xff0c;拷貝到記事本中看)-------------|abc |xyztt|…

深度學習框架PyTorch一書的學習-第四章-神經網絡工具箱nn

參考https://github.com/chenyuntc/pytorch-book/tree/v1.0 希望大家直接到上面的網址去查看代碼&#xff0c;下面是本人的筆記 本章介紹的nn模塊是構建與autograd之上的神經網絡模塊 除了nn外還會介紹神經網絡中常用的工具&#xff0c;比如優化器optim、初始化init等 1.nn.Mod…

高級語言程序設計c 華南理工,華南理工大學高級語言程序設計(C)期末練習題

.. 《高級語言程序設計(C)》練習題一&#xff0e;單項選擇題1.用C語言編制的源程序要變為目標程序必須要經過( )。(a) 解釋(b) 匯編(c) 編輯(d) 編譯2. 執行C程序時出現的“溢出”錯誤屬于( )錯誤。(a) 編譯(b) 連接(c) 運行(d) 邏輯3. 按C標識符的語法規定&#xff0c;合法的標…

bevfusion 學習筆記

目錄 tensorrt ros部署&#xff1a; 也依賴ros2 c ros2安裝指導&#xff1a; 相機標定工具源碼&#xff1a; 官方github&#xff0c;部分模型開源 tensorrt ros部署&#xff1a; https://github.com/linClubs/BEVFusion-ROS-TensorRT 也依賴ros2 c GitHub - newintelli…

地鐵售票系統設計思想及部分代碼

設計思想&#xff1a;地鐵售票系統的關鍵點在于換乘&#xff0c;所以首先要分為換乘和不換乘兩種情況。不換乘比較簡單&#xff0c;通過起始站名和終點站名查詢他們的num&#xff0c;然后list打包輸出到jsp就可以。換乘的話就先要找到兩條線路&#xff0c;找到兩條線路的交點也…

數字帶通濾波器c語言程序,C語言編寫FIR數字低通濾波器

主要是獲取濾波器參數和卷積算法&#xff0c;參數根據自己的濾波器特性用matlab上面的一個fdatool工具配置生成&#xff0c;然后將這些參數寫入程序里面即可(參數可適當的乘以一個系數&#xff0c;對濾波沒任何影響)&#xff0c;我這里Fs 2k&#xff0c;Fpass 1k,Fstop 2k&am…

瀏覽器攔截跨域請求處理方法(已阻止跨源請求:同源策略禁止讀取遠程資源)

原文地址&#xff1a;http://my.oschina.net/lichaoqiang/blog/317823 在瀏覽器請求中&#xff0c;出現跨域訪問資源的問題&#xff0c;我們肯定會遇到。如果跨域請求被阻止&#xff0c;有可能導致css、js 、ajax請求、font字體等資源出現無法正常訪問的問題。接下來&#xff0…

C程序設計語言上機13,《高級語言程序設計》北大上機試題(十三)

C語言上機試題&#xff1a;131&#xff0e;題目&#xff1a;編一C程序&#xff0c;其功能是能把讀入一串英文單詞(以單詞end做為結束標記&#xff0c;單個單詞字母數≤20)&#xff0c;并按字典順序輸出。(注&#xff1a;可執行程序命名為e13_1.exe)程序設計&#xff1a;#includ…

Activiti6.0 java項目框架 spring5 SSM 工作流引擎 審批流程

即時通訊&#xff1a;支持好友&#xff0c;群組&#xff0c;發圖片、文件&#xff0c;消息聲音提醒&#xff0c;離線消息&#xff0c;保留聊天記錄 &#xff08;即時聊天功能支持手機端&#xff0c;詳情下面有截圖&#xff09;工作流模塊-------------------------------------…

c語言變量強制轉換,C語言——“=”中的強制類型轉換

前言&#xff1a;在寫程序時候遇到了一些關于數據類型轉換的問題&#xff0c;編譯器也沒有報錯&#xff0c;運行時才發現數據不對&#xff0c;找bug花費了很多時間&#xff0c;但最終也發現是一些細節上的問題&#xff0c;特地在這里整理出一篇文章記錄。實驗環境&#xff1a;芯…

Spring框架IOC和AOP的實現原理(概念)

IoC&#xff08;Inversion of Control&#xff09; (1). IoC&#xff08;Inversion of Control&#xff09;是指容器控制程序對象之間的關系&#xff0c;而不是傳統實現中&#xff0c;由程序代碼直接操控。控制權由應用代碼中轉到了外部容器&#xff0c;控制權的轉移是所謂反…

面向視頻的全新AI架構 —— 阿里云智能視覺技術全解

2019獨角獸企業重金招聘Python工程師標準>>> 我們都知道&#xff0c;AI技術正在以可見的速度被應用于各行各業&#xff0c;然而絕大部分業務場景想應用AI技術&#xff0c;都需要算法工程師根據自身業務的標注數據&#xff0c;來進行單獨訓練&#xff0c;才能打磨出合…

c語言鞏固,鞏固一下C語言中的指針

寫了幾段代碼&#xff0c;再鞏固一下C語言知識。我的記憶方法跟文章中的不一樣。*是取值符號&#xff0c;&取地址符號&#xff0c;()限定子表達式的符號,[]是按索引取數組乘員的符號。優先級方面()>[]>*,&。對于int *(*p(int))[3]; 。我是這么分析的&#xff1a;…