我将数据分为训练和测试,但它获取的是完整数据,而不是我设置的大小-我将大小设置为250,但仍然得到接近900000的完整数据
set.seed(321)
SplitIndex <- sample(x = c("Train", "Test"),size = 250,replace = TRUE, prob = c(0.75,0.25))
TrainData <- loanfilev2[SplitIndex == "Train", ]
TestData <- loanfilev2[SplitIndex == "Test", ]
table(TrainData$loan_status)
table(TestData$loan_status)
set.seed(27)
KnnModel <- train(form = loan_status ~., data = TrainData, method = 'knn')
KnnModel
plot(KnnModel)
基本上,我希望TrainData包含约150个观测值,但我将获得完整的900000个观测值
答案 0 :(得分:0)
您的解决方案无法使用的原因至少有两个:(1)不正确的子集索引和(2)掩码大小不等于原始数据帧中的记录(即行)数(如果您尝试的话)要使用小于记录数的掩码对数据帧进行子集化,R只会回收掩码)。
在创建名为SplitIndex
的子集掩码的呼叫中,尝试将c("Train", "Test")
替换为c(TRUE, FALSE)
。
SplitIndex <- sample(x = c(TRUE, FALSE), size = nrow(loanfilev2), replace = TRUE, prob = c(0.75,0.25))
您将拥有一个向量,其大小等于数据框中的行数,并填充TRUE
(占vaues的75%)和FALSE
(占值25%)。这样,您甚至不需要测试与字符串"Train"
或"Test"
的相等性;您只需生成数据的子集,其中行与掩码中的TRUE
值匹配。因此,其余代码变为:
loanfilev2[SplitIndex, ] #Train
loanfilev2[!SplitIndex, ] #Test
答案 1 :(得分:0)
这应该给您您想要的。
set.seed(321) # set the seed to get reproducable results
train_index <- sample(seq_len(nrow(loanfilev2)), size = 150) # train data indices
trainData<- loanfilev2[train_index, ] # train dataset
testData <- loanfilev2[-train_index, ] # test dataset
您也可以按数据集的百分比设置大小
sample_size <- floor(0.10 * nrow(loanfilev2)) # or whatever percent you desire