数据分割用于模型的列车测试

时间:2014-06-27 15:18:15

标签: r

我有两个向量和一个数据框。我运行一个随机生成器,以获得用于训练的分割和测试模型。 (TRUE训练时为FALSE测试集),如果多次运行TRUE到FALSE的数量变化(FALSE范围从4到8)以及位置。这是一个例子,实际数据框要大得多。

x <- c(1,2,3,5,4,1,2,3,5,7,4,2,1,5,6,8,5,3,2,4,6,8,9,0,2)
y <- c(3,5,7,8,4,2,2,5,4,7,9,0,0,7,6,4,2,2,1,4,6,8,9,0,0)
X <- data.frame(x,y)

runif(nrow (X)) <= 0.75
[1]  TRUE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE FALSE  TRUE  
FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE

我想找到一个函数或能够指示生成拆分TRUE和FALSE顺序生成所有名为FALSE的元素只在末尾找到而前一个元素应为TRUE。它应该产生符合下面例子的东西。

[1]  TRUE TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE TRUE TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  
TRUE  TRUE  TRUE  TRUE FALSE  FALSE FALSE  FALSE FALSE  FALSE

我已经找到了可以在没有运气的情况下做到这一点的函数,因为这个函数可以实现这一目的。在插入包中的createTimeSlices意味着模型中的重大更改很难实现。

另一方面,我有下面的表达式,我只在最后获得FALSE一次,而其余的是按预期随机的,但是我不能得到一个表达式,按顺序产生FALSE的数量只有在最后的位置才能找到,而在此之前产生TRUE,如上例所示。

S<- runif(nrow (X)) <=  0.75
S[length(S)] <- FALSE 
while(S[length(S)] [!FALSE]) { S<-runif(nrow (X)) <=  0.75}
train<-print(S)

欢迎任何帮助

非常感谢

2 个答案:

答案 0 :(得分:1)

也许我误解了,但你不能这样做

S <- runif(nrow(X)) <= 0.75

sort(S,decreasing = TRUE)
 [1]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
[19]  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE

为您提供(大约)75%TRUE值,始终位于向量的前面。

校正?

看起来你真的想要前75%的行(基于你上面的评论)。在那种情况下,我会这样做:

crit <- floor(nrow(X) * 0.75)
train <- seq_len(nrow(X)) < crit
train

 [1]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE
[19] FALSE FALSE FALSE FALSE FALSE FALSE FALSE

答案 1 :(得分:1)

为什么不使用sample?无论如何,你需要做的就是对你的布尔矢量进行排序:

基地R:

X$sample <- runif(nrow(X)) <= 0.75
X[order(X$sample, decreasing=TRUE), ]

使用dplyr

library(dplyr)
X %>%
  mutate(sample = runif(nrow(X)) <= 0.75) %>%
  arrange(desc(sample))