1. 程式人生 > >【七】機器學習之路——訓練集、測試集及如何劃分

【七】機器學習之路——訓練集、測試集及如何劃分

  上一個部落格講了一個簡單的例子,根據手頭的房子大小和房價的資料來擬合房子大小和房價的關係曲線,當然這是一個非常簡單的一元一次方程,y=ax+b。但是最後咱們還少了一樣東西,不知道細心的同學有沒有發現,那就是咱們擬合曲線的準確度到底有多少呢?怎麼來檢測咱們擬合曲線到底有多完美呢?用什麼來驗證咱們的準確度呢?

  帶著一肚子疑問,咱們就先來介紹一下資料擬閤中的訓練集,測試集,驗證集。字比較多,但都很容易懂,耐心看下去會收穫不少哦。

訓練集(Training Set):幫助我們訓練模型,簡單的說就是通過訓練集的資料讓我們確定擬合曲線的引數。

驗證集(Validation Set):用來做模型選擇(model selection),即做模型的最終優化及確定的,用來輔助我們的模型的構建,可選;

測試集(Test Set):

為了測試已經訓練好的模型的精確度。當然,test set這並不能保證模型的正確性,他只是說相似的資料用此模型會得出相似的結果。因為我們在訓練模型的時候,引數全是根據現有訓練集裡的資料進行修正、擬合,有可能會出現過擬合的情況,即這個引數僅對訓練集裡的資料擬合比較準確,這個時候再有一個數據需要利用模型預測結果,準確率可能就會很差。

  但實際應用中,一般只將資料集分成兩類,即訓練集Training set 和測試集Test set,大多數文章並不涉及驗證集Validation set。如果後面碰到有這樣的問題,我會再跟大家講解。

  細心的小夥伴可能會發現,我們上個房價預測的例子裡,將所有的資料用做訓練集,而並沒有測試集來測試模型的準確度,因為資料是我編的哈哈,太少了,還沒涉及到測試模型的問題。彆著急,一步一步來,我先介紹一下sklearn裡是怎麼將手頭已有的資料分為訓練集和測試集的。

訓練集和測試集的劃分方法


以下講解摘自周志華老師的《機器學習》一書。同時大家可以先參考饃饃momo博主的如何劃分訓練集和測試集的介紹,講的比較簡單、精煉。

- 留出法(Hold-out)

  留出法的意思是直接將資料集D劃分為兩個互斥的集合,其中一個集合作為訓練集S,另一個集合作為測試集T,即D=STST=。在S上訓練出模型後,用T來評估其誤差。

  需要注意的是,訓練/測試集的劃分要儘可能保持資料分佈的一致性,避免因資料劃分過程引入的額外的偏差而對最終結果產生影響。例如在分類任務中,至少要保持樣本的類別比例相似。從”取樣”的角度來看待資料集的劃分過程,則保留類別比例的取樣方式通常稱為“分層取樣”。例如從1000個數據裡,分層取樣獲得70%樣本的訓練集S和30%樣本的測試集T,若D包含500個正例,500個反例,則分層取樣得到的S應包含350個正例,350個反例,T應包含150個正例,150個反例;若S、T中樣本比例差別很大,則最終擬合的誤差將會變大。

  一般,在用留出法劃分集合的時候,會通過若干次隨機劃分、重複實驗評估後取平均值作為留出法的評估結果,減少誤差。

  留出法還有一個問題就是,到底我們訓練集和測試集應該按照什麼比例來劃分呢?70% ?60% ? 50% ???,如果我們訓練集的比例比較大,可能會導致訓練出的模型更接近於用D訓練出的模型,同時T較小,評價結果又不夠準確;若T的比例比較大,則有可能導致評估的模型與之前有較大的差別,從而降低了評估的保真性。這個問題沒有完美的解決方案,常見的做法是將大約2/3~4/5的樣本用於訓練。


- 交叉驗證法(Cross Validation)

  ”交叉驗證法”先將資料集D劃分為k個大小相似的互斥子集,即D=D1D2...Dk,DiDj=(ij)。每個子集都儘可能保持資料分佈的一致性,即從D中通過分層取樣得到。然後,每次用k-1個子集的並集作為訓練集,餘下的子集作為測試集;這樣就可以獲得k組訓練/測試集,從而可以進行k次訓練和測試,最終返回的是k個測試結果的均值。

  顯然,交叉驗證法評估結果的穩定性和保真性在很大程度上取決於k的取值,為了強調這一點,通常把交叉驗證法稱為”k折交叉驗證”(k-fold cross validation),k通常取10—10折交叉驗證。



  交叉驗證的好處就是從有限的資料中儘可能挖掘多的資訊,從各種角度去學習我們現有的有限的資料,避免出現區域性的極值。在這個過程中無論是訓練樣本還是測試樣本都得到了儘可能多的學習。(By 知乎 張戎 交叉驗證簡介)
  交叉驗證法的缺點就是,當資料集比較大時,訓練模型的開銷較大。


- 自助法(BootStrapping)

  我們當然想用手頭所有的資料來訓練模型了,這樣才能更好的擬合,留出法和交叉驗證法都將保留了部分資料用於測試,因此實際評估的模型所使用的訓練集比D小,這必然會引入一些因訓練樣本規模不同而導致的估計偏差。

  自助法是一個比較好的解決方案。給定m個樣本的資料集D,我們對它進行取樣產生資料集D,每次隨機從D中挑選一個樣本,將其拷貝到D,這個過程執行m次後,我們就得到了包含m個樣本的資料集D。顯然,D中有部分樣本會在D中多次出現。做個簡單的估計,樣本在m次取樣中始終不被採到的概率是(11m)m,取極限為

limx(11m)m=1e0.368

即通過自助取樣,初始資料集D中約有36.8%的樣本未出現在取樣集D裡。於是 ,實際評估的模型與期望評估的模型都是使用m個樣本,而我們仍有資料總量約1/3的沒在訓練集出現過的樣本用於測試。

  自助法在資料集較小、難以有效劃分訓練/測試集時比較有用。然而自助法產生的測試集改變了初始資料集的分佈,這會引入誤差,因此在資料集比較大時,採用留出法和交叉驗證法較好。

相關推薦

機器學習——訓練測試如何劃分

  上一個部落格講了一個簡單的例子,根據手頭的房子大小和房價的資料來擬合房子大小和房價的關係曲線,當然這是一個非常簡單的一元一次方程,y=ax+b。但是最後咱們還少了一樣東西,不知道細心的同學有沒有發現,那就是咱們擬合曲線的準確度到底有多少呢?怎麼來檢測咱們擬合

機器學習——logistic迴歸python實現

  前面一個部落格機器學習之路——logistic迴歸講了logistic迴歸的理論知識,現在咱們來看一下logistic迴歸如何用python來實現,程式碼、資料參考《機器學習實戰》。   首先看下我們要處理的資料, 我們要做的就是通過logistic

機器學習——梯度下降法python實現

  前面的部落格線性迴歸python實現講了如何用python裡sklearn自帶的linearRegression()函式來擬合數據的實現方式。今天咱們來介紹下,如何用梯度下降法擬合數據。   還記得梯度下降法是怎麼做的嗎?忘記的同學可以回頭看下前面的部落格

十九機器學習——樸素貝葉斯分類

  最近在看周志華《機器學習》的貝葉斯分類器這一章時覺得書上講的很難理解,很多專業術語和符號搞的我頭大,大學時候概率論我還是學的還是不錯的,無奈網上搜了搜前輩的部落格,看到一篇把樸素貝葉斯講的很簡單的文章,頓時豁然開朗。關於貝葉斯分類且聽我慢慢道來: 貝葉

javajava學習-01-Linux基礎(一)

x文件 字母 at命令 超過 用戶登錄 創建刪除 軟連接 nbsp tail linux學習方法: 你的程序要在服務器(linux)上執行,服務器沒有桌面系統,學習linux就是學習命令。 一、Linux介紹 1、芬蘭大學生,名字叫Linux,因為個人興趣,編寫了一個類Un

ML2機器學習線性迴歸

【知識儲備】 線性迴歸: 1: 函式模型(Model): 假設有訓練資料   那麼為了方便我們寫成矩陣的形式   2: 損失函式(cost):  現在我們需要根據給定的X求解W的值,這裡採用最小二乘法。   

ML1機器學習EM演算法(含演算法詳細推導過程)

        寫在前面的話:對於EM演算法(Expectation Maximization Algorithm, 最大期望演算法), 大家如果僅僅是為了使用,則熟悉演算法流程即可。此處的演算法推導過程,僅提供給大家進階 之用。對於其應用,

2機器學習兄弟連:K近鄰和K-means

關鍵詞:從K近鄰到最近鄰,監督學習,資料帶lable,效率優化(從線性搜尋到kd樹搜尋),缺點是需要儲存所有資料,空間複雜度大。可以利用kd數來優化k-means演算法。 學習了kNN和K-means演算法後,仔細分析比較了他們之間的異同以及應用場景總結成此文供讀者參

8機器學習屠龍寶劍:GBDT

  談完資料結構中的樹(詳情見參照之前博文《資料結構中各種樹》),我們來談一談機器學習演算法中的各種樹形演算法,包括ID3、C4.5、CART以及基於整合思想的樹模型Random Forest和GBDT。本文對各類樹形演算法的基本思想進行了簡單的介紹,重點談一談被

轉載Flume學習 (一)Flume的基礎介紹

必須 4.3 bin tar.gz 開源 暴露 linu ror 失敗 討論QQ:1586558083目錄一、背景二、Flume的簡介三、Flume NG的介紹3.1 Flume特點3.2 Flume的一些核心概念3.3 Flume NG的體系結構3.4 Source3.5

Linux學習--http-2基礎設置訪問限制15---20180108

first 配置 特定 http modules rmi 目錄訪問控制 可重復 als 一、HTTP軟件1、http服務器應用http服務器程序 httpd apache nginx lighttpd應用程序服務器 IIS .asp tomca

Linux學習-Nginx(2)安裝配置文件篇23---20180210

Nginx編譯 Nginx yum安裝 主配置文件分析 Core functionality分 一、Nginx的安裝方法及配置介紹1、yum安裝官方: http://nginx.org/packages/centos/7/x86_64/RPMSFedora-EPEL: http

機器學習--機器學習樸素貝葉斯從初始到應用

rac AC 一個 pam 數據 ast 出現 相對 解決方法 一、前述 機器學習算法中,有種依據概率原則進行分類的樸素貝葉斯算法,正如氣象學家預測天氣一樣,樸素貝葉斯算法就是應用先前事件的有關數據來估計未來事件發生的概率。 二、具體 1、背景--貝葉斯定理引入對於兩個關聯

linux--菜鳥學習fread和fwrite

fread 函式名: fread 功  能: 從一個流中讀資料 用  法: int fread(void *ptr, int size, int nitems, FILE *stream); 參  數:用於接收資料的地址(ptr)          單個元素的大小(siz

機器學習機器學習特徵選擇

機器學習之特徵選擇 特徵選擇方法初識: 1、為什麼要做特徵選擇 在有限的樣本數目下,用大量的特徵來設計分類器計算開銷太大而且分類效能差。 2、特徵選擇的確切含義 將高維空間的樣本通過對映或者是變換的方式轉換到低維空間,達到降維的目的,然後通過特徵選取刪選掉冗餘和不相關的特徵來進一步降維。

黑馬程式設計師 java學習——列舉小結

                                     ------- android培訓、java培訓、期待與您交流! ---------- (注:小弟剛自學一小段時間,這是我學習中的認識,簡單總結下,大神們不要拍我哈 , 說的不對之處還請指出來,多多

黑馬程式設計師 java學習——代理小結

                                          -------android培訓、java培訓、期待與您交流! ----------          第一次看代理說實話是一點也沒看懂,聽的雲裡霧裡的,沒辦法接著看第二遍吧,第二遍看完終於

黑馬程式設計師 java學習——小小的學習心得

                                               ------- android培訓、java培訓、期待與您交流! ----------              又是一個夜深人靜的晚上!這種生活已經有點習慣了!因為我已經破釜沉舟

黑馬程式設計師 java學習——網路程式設計 UDP 鍵盤錄入傳輸

import java.net.*; import java.io.*; class UdpRece2  {public static void main(String[] args) throws Exception{DatagramSocket ds = new DatagramSocket(10001)

黑馬程式設計師 java學習——GUI開始簡析三

------- android培訓、java培訓、期待與您交流! ---------- 需求:實現如下視窗,功能:能夠轉到相應的碟符下顯示該盤內的內容 <span style="font-size:18px;">import java.awt.*; impor