我有跟随矢量,并且为了训练模型我使用下面的表达式 - 在下面的例子中我想要测试(FALSE)列车/测试的最后一个元素(TRUE / FALSE)
x<-c(1,2,3,2,1,4,3,2,3,1,3,4,3,2,1,3,4,5,5,6,2,1,2,3,4,5,6,9,1,8,6,4,5,2,3,1,1,5,4)
S<-runif(length (x))<= .90
while(S[length(S)] [!FALSE]) {S<-runif(length (x))<= .90}
train<-print(S)
我有两个问题:
为什么当我运行90%训练(TRUE)/ 10%测试(FALSE)测试时,我得到的FALSE数量超过10%表示为TEST,并且有一种方法可以使得只有10%的FALSE只要。
我如何构建表达式“while(S ...)”的第二部分,使FALSE成为连续的(例如, - (Test-FALSE)10%仅在结束时找到“火车”而不是随机分发。
谢谢
答案 0 :(得分:1)
要修改想法,在您的示例中length(x)
是39.所以,
S<-runif(length (x))<= .90
创建一个长度为39的T / F向量,其中~90%的值为T
。然后是表达式
S[length(S)] [!FALSE]
只是提取S
的最后一个元素(以极其复杂的方式)和
while(S[length(S)] [!FALSE]) {S<-runif(length (x))<= .90}
创建一个新的向量S
,直到最后一个元素为F ,当它停止时。最终S
的生成方式与初始S
完全相同,因此约有10%F
。
所以基本上你的循环没有什么用处,我能辨别出来。
如果您想要一个包含90%值的x的随机样本,您可以这样做:
s <- sample(1:length(x),0.9*length(x))
train <- x[s]
test <- x[-s]