我想实现dropout,即随机用NA替换元素,并返回包含NA值的向量/列表。
想要的结果是减少过拟合,因此可能有更方便的函数来实现这个功能。
方法1
b<-rnorm(100); b[match(sample(b,10),b)] <- NA
其中10个值被替换为NA。
方法2. 如何移除90%的群体?不起作用,得到的结果少于90%:
b<-rnorm(99); b[match(sample(b,length(b)*0.9),b)] <- NA
实际上不起作用,因为可能有匹配,即选择了相同的元素。
是否有内置或方便的dropout函数?
回答:
使用函数is.na<-
来为向量赋值NA
。
set.seed(1)b <- rnorm(100)b[match(sample(b, 10), b)] <- NAset.seed(1)b2 <- rnorm(100)is.na(b2) <- sample(length(b2), 10)identical(b, b2)#[1] TRUE
为了实现用NA
移除90%的群体,基于要处理的向量的长度使用sample
。
set.seed(1)b <- rnorm(100)is.na(b) <- sample(length(b), 0.9*length(b))mean(is.na(b))#[1] 0.9