将数据分为训练和测试

时间:2018-11-18 05:39:34

标签: r

我将数据分为训练和测试,但它获取的是完整数据,而不是我设置的大小-我将大小设置为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个观测值

2 个答案:

答案 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
相关问题