【发布时间】:2020-07-30 10:25:24
【问题描述】:
假设我有一个多类数据集(例如鸢尾花)。我想执行分层的 10 倍 CV 来测试模型性能。我在包splitstackchange 中找到了一个名为stratified 的函数,它根据我想要的数据的比例给了我一个分层的折叠。因此,如果我想要一个测试折叠,它将是 0.1 个数据行。
#One Fold
library(splitstackchange)
stratified(iris,c("Species"),0.1)
我想知道如何在 10 倍循环中实现此功能或任何其他形式的分层 cv。我无法破解它背后的逻辑。这里我包括一个可重现的例子。
library(splitstackshape)
data=iris
names(data)[ncol(data)]=c("Y")
nFolds=10
for (i in 1:nFolds){
testing=stratified(data,c("Y"),0.1,keep.rownames=TRUE)
rn=testing$rn
testing=testing[,-"rn"]
row.names(testing)=rn
trainingRows=setdiff(1:nrow(data),as.numeric(row.names(testing)))
training=data[trainingRows,]
names(training)[ncol(training)]="Y"
}
【问题讨论】:
-
你看过
caret吗?它可以很容易地做到这一点。 -
如果我的回答对你有帮助,请考虑采纳。谢谢
标签: r data-mining cross-validation sampling multiclass-classification