我有一个非常简单的代码,可以生成一个用于K重交叉验证的训练集和测试集。我有一个矩阵X[20x15],如果我取n_folds
的折叠数,例如10,我会得到一个 * 矩阵 *:trainingData
[18x15]和正确的testData
[2x15]。
现在,如果我改变n_folds=20
的折叠数,我测试trainingData
[19x15],这是正确的,但是对于testData
,R生成一个列表,而不是矩阵[1x15]。当我使用as.matrix
函数时,它生成一个[15x1]矩阵,而不是[1x15]。
下面是n_fold=20
的代码:
library(dplyr)
library(tidyr)
require(stats)
set.seed(19875)
n=20
p=15
real_p=15
x=matrix(rnorm(n*p), nrow=n, ncol=p)
n_folds=20
#Randomly shuffle the data
x=x[sample(nrow(x)),]
folds=cut(seq(1, nrow(x)), breaks = n_folds, labels = FALSE)
#Perform 10 fold cross validation
for(i in 1:n_folds){
#segment your data by folds using the which() function
testIndexes=which(folds==i, arr.ind = TRUE)
testData=x[testIndexes,]
trainData=x[-testIndexes,]
}
要为testData
生成一个矩阵(即矩阵[1x15],而不是列表),最简单的方法是什么?
2条答案
按热度按时间eqqqjvef1#
这里的问题是,您提取的是行,而只有一行,因此您得到的是一个向量。要强制执行矩阵,请调用matrix。您最初尝试调用matrix时使用的是构造矩阵的默认方式,这将生成一个单列。请指定所需的列和行。I'我假设你想要的维度是
length(testIndexes)
x x,但是如果是其他的,你可以用这个作为正确答案的形式,只要把你想要的代入就行了。hjzp0vay2#
我重写了你的代码有点,并想出了这个,我希望它是有用的:
大卫