如何对数据集进行分层,用Caret进行统计分析并在r中重复?

时间:2018-02-20 09:57:39

标签: r machine-learning simulation r-caret sampling

我有一个数据集,我想对样本进行分层,使用caret包创建统计模型,然后生成预测。

我发现的问题是,在分层数据集的不同迭代中,我得到了显着不同的结果(这可能部分归因于相对较小的数据样本M=1000)。

我希望能做的是:

  1. 生成分层数据样本
  2. 创建机器学习模型
  3. 重复1000次&取平均模型输出
  4. 我希望通过重复分层数据集的变化步骤,我能够避免由于数据样本较小而产生的预测的细微变化。

    例如,它可能在r;

    中看起来像这样
    Original.Dataset = data.frame(A)
    
    Startified.Dataset = stratified(Original.Dataset, group = x)
    
    Model = train(Stratified.Dataset.....other model inputs)
    
    Repeat process with new stratified data set based on the original data and average out
    

    提前感谢您提供任何可能有用的帮助或打包建议。是否有可能在插入符号中对样本进行分层或在插入符号中进行模拟?

1 个答案:

答案 0 :(得分:0)

首先,欢迎来到SO。

很难理解你究竟想知道什么,你的问题非常广泛。

如果您需要输入统计信息,我建议您在 Cross Validated. 中提出更明确定义的问题      Q& A适用于对统计,机器学习,数据分析,数据挖掘和数据可视化感兴趣的人。

  

我发现的问题是在不同的迭代中   分层数据集我得到了明显不同的结果(这可能是   部分原因是相对较小的数据样本M = 1000)。

我假设您指的是模型的不同迭代。这取决于您的不同群体的大小。例如。如果您试图将包含1000个样本的数据集划分为10个样本组,则您的模型很可能不稳定,因此在每次迭代时会得到不同的结果。这也可能是因为您的模型依赖于某些随机性,而较小您的数据(以及更多的群组)将具有更大变体。有关交叉验证,稳定性和引导程序聚合的更多信息,请See herehere

  
      
  1. 生成分层数据样本
  2.   

如何生成它:dplyr包非常适合根据不同的变量对数据进行分组。您可能还想使用split包中的base函数。 See here for more information。您还可以使用caret包中的内置方法found here

如何分辨它:它在很大程度上取决于你想要回答的问题,很可能你想要平衡一些变量,例如:用于创建预测疾病模型的性别和年龄。 See here for more info

在例如重复观察,您希望创建具有不同重复组合的独特子集,以及您必须使用其他方法的独特测量。如果重复项具有公共标识符,请sample_names。您可以执行以下操作来选择所有样本,但使用不同的重复组合:

tg <- data.frame(sample_names = rep(1:5,each=2))
set.seed(10)
tg$values<-rnorm(10)

partition <- lapply(1:100, function(z) {
  set.seed(z)
  sapply(unique(tg$sample_names), function(x) {
    which(x == tg$sample_names)[sample(1:2, 1)]
  })
})

#the first partition of your data to train a model.
tg[partition[[1]],]
  
      
  1. 创建机器学习模型
  2.   

如果您想使用caret,可以转到caret webpage。并查看所有可用的型号。根据您的研究问题和/或数据,您希望使用不同类型的模型。因此,我建议您参加一些在线机器学习课程,例如Stanford University course given by Andrew Ng(我自己动手),以便更熟悉不同的主要算法。如果您熟悉算法,只需搜索对于可用的型号。

  
      
  1. 重复1000次&amp;取平均模型输出
  2.   

您可以使用不同的种子重复您的模型1000次(请参阅set.seed)和不同的培训方法,例如交叉验证或引导聚合。 caret包中有许多不同的培训参数:

  

函数trainControl生成进一步控制的参数   如何创建模型,具有可能的值:

     

方法:重采样方法:“boot”,“cv”,“LOOCV”,“LGOCV”,   “repeatedcv”,“timeslice”,“none”和“oob”

有关方法的更多信息,请see here