我有一个数据集,我想对样本进行分层,使用caret
包创建统计模型,然后生成预测。
我发现的问题是,在分层数据集的不同迭代中,我得到了显着不同的结果(这可能部分归因于相对较小的数据样本M=1000
)。
我希望能做的是:
1000
次&取平均模型输出我希望通过重复分层数据集的变化步骤,我能够避免由于数据样本较小而产生的预测的细微变化。
例如,它可能在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
提前感谢您提供任何可能有用的帮助或打包建议。是否有可能在插入符号中对样本进行分层或在插入符号中进行模拟?
答案 0 :(得分:0)
首先,欢迎来到SO。
很难理解你究竟想知道什么,你的问题非常广泛。
如果您需要输入统计信息,我建议您在 Cross Validated. 中提出更明确定义的问题 Q& A适用于对统计,机器学习,数据分析,数据挖掘和数据可视化感兴趣的人。
我发现的问题是在不同的迭代中 分层数据集我得到了明显不同的结果(这可能是 部分原因是相对较小的数据样本M = 1000)。
我假设您指的是模型的不同迭代。这取决于您的不同群体的大小。例如。如果您试图将包含1000个样本的数据集划分为10个样本组,则您的模型很可能不稳定,因此在每次迭代时会得到不同的结果。这也可能是因为您的模型依赖于某些随机性,而较小您的数据(以及更多的群组)将具有更大变体。有关交叉验证,稳定性和引导程序聚合的更多信息,请See here或here。
- 生成分层数据样本
醇>
如何生成它: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]],]
- 创建机器学习模型
醇>
如果您想使用caret
,可以转到caret webpage。并查看所有可用的型号。根据您的研究问题和/或数据,您希望使用不同类型的模型。因此,我建议您参加一些在线机器学习课程,例如Stanford University course given by Andrew Ng(我自己动手),以便更熟悉不同的主要算法。如果您熟悉算法,只需搜索对于可用的型号。
- 重复1000次&amp;取平均模型输出
醇>
您可以使用不同的种子重复您的模型1000次(请参阅set.seed
)和不同的培训方法,例如交叉验证或引导聚合。 caret
包中有许多不同的培训参数:
函数
trainControl
生成进一步控制的参数 如何创建模型,具有可能的值:方法:重采样方法:“boot”,“cv”,“LOOCV”,“LGOCV”, “repeatedcv”,“timeslice”,“none”和“oob”
有关方法的更多信息,请see here。