R語言caret包的學習(三)--數據分割

本文將就caret包中的數據分割部分進行介紹學習。主要包括如下函數:createDataPartition(),maxDissim(),createTimeSlices(),createFolds(),createResample(),groupKFold()等html

基於輸出結果的簡單分割

createDataPartition函數用於建立平衡數據的分割。若是函數中的參數y是一個因子向量,則對每一類隨機抽樣,而且保持數據總體類別的分類。git

 createDataPartition(y, times = 1, p = 0.5, list = TRUE, groups = min(5, length(y))) github

  •  y  結果向量
  • times  建立分區的數目
  • p 將要用於訓練的數據的百分比
  • list  邏輯值。true時,返回結果爲列表形式,不然,爲floor(p * length(y))行 times列的矩陣
  • groups  對於數值y,樣本根據百分位數分紅組,並在這些子組內進行採樣。百分比的數量經過groups參數設置。

基於特徵變量的分割

函數maxDissim應用最大相異方法(maximum dissimiarity approach)建立子樣本。假設有一個m個樣本的數據集A和具備n個樣本的一個大數據集B。咱們但願從B中抽取和A不一樣的子樣本。爲了這樣作,對於B中的每個樣本,函數計算與A中每同樣本點的相異性。把B中最大相異性的點加到A並繼續。注意,計算相異性時,要加載proxy包app

 maxDissim(a, b, n = 2, obj = minDiss, useNames = FALSE, randomFrac = 1, verbose = FALSE, ...) dom

  • a  小樣本數據集,矩陣或數據框
  • b  大樣本數據集,矩陣或數據框
  • n  子樣本的大小,其實就是最後想要找出的相異性樣本的個數
  • obj  衡量整體差別的函數,經常使用的有minDiss,sumDiss
  • useNames  邏輯值,true返回行名,false返回行索引
  • randomFrac  在(0,1]中的數值,用於從剩餘候選值中進行子採樣
  • verbose  邏輯值,是否顯示每步過程

時間序列的數據分割

時間序列簡單隨機抽樣並非對時間序列抽樣的最好的方法。Hyndman和Athanasopoulos(2013)討論了rolling forecasting origin技術。caret包 包含了createTimeSlices函數,它能建立這種類型的切片。函數

 createTimeSlices(y, initialWindow, horizon = 1, fixedWindow = TRUE, skip = 0) 學習

  • y  結果向量,按年代或其餘時間順序
  • initialWindow  每一個訓練集樣本中連續值的初始數量
  • horizon  測試樣本中的連續值的數量
  • fixedWindow  邏輯值,false時,全部訓練樣本從1開始
  • skip  整數,how many (if any) resamples to skip to thin the total amount

horizon參數值不一樣時的情形:horizon分別爲1,3時,測試樣本的數量分別爲1,3測試

fixedWindow分別爲TRUE和FALSE時的情形,可見爲false時,訓練樣本老是從頭開始。大數據

skip參數,注意skip爲3時,不一樣訓練樣本的第一個索引依次加4spa

 

其餘相似函數

此外,在製造訓練集時,還有如下可能用到的函數

一、 createFolds(y, k = 10, list = TRUE, returnTrain = FALSE) 

 其中,k是folds的數目,list,是否以列表形式返回,returnTrain,false時返回的是測試集的索引,true時返回的是訓練集的索引(僅當list=TRUE時,returnTrain=TRUE纔有效)

二、  createResample(data,k) 

其中,k是建立訓練樣本的個數

三、   groupKFold(group, k = length(unique(group))) 

其中,k是folds的數目

 

參考:http://topepo.github.io/caret/data-splitting.html (其中文翻譯見

相關文章
相關標籤/搜索