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 (其中文翻译见

相关文章
相关标签/搜索