我想使用加权引导对数据进行重采样以构建随机森林。
情况就是这样。
我有由正常受试者(N=20000
)和患者(N=500
)组成的数据。
我对正常受试者(N=2000
)和患者(n=500
)进行了新的数据设置,因为我对受试者(N=2500
)进行了一定的实验。
如您所见,正常受试者提取了原始数据的1/10,而患者则提取了所有原始数据。
因此,我应该权衡普通对象来执行机器学习算法。
请让我知道如何在R中引导体重。
谢谢。
答案 0 :(得分:2)
听起来您确实需要分层重采样,而不是加权重采样。
您的数据被分为大小不同的两个不同的组,您希望将该结构保留在引导程序中。您没有说要对这些数据应用什么功能,所以让我们使用诸如均值的简单方法。
生成一些假数据,并采取(观察到的)手段:
controls <- rnorm(2000, mean = 10)
patients <- rnorm(500, mean = 9.7)
mean(controls)
mean(patients)
告诉R我们要执行200个引导程序,并设置两个空向量来存储每个引导程序样本的均值:
nbootraps <- 200
boot_controls <- numeric(nbootraps)
boot_patients <- numeric(nbootraps)
使用循环,我们可以绘制与原始样本相同大小的重样本,并计算每个样本的均值。
for(i in 1:nbootraps){
# draw bootstrap sample
new_controls <- controls[sample(1:2000, replace = TRUE)]
new_patients <- patients[sample(1:500, replace = TRUE)]
# send the mean of each bootstrap sample to boot_ vectors
boot_controls[i] <- mean(new_controls)
boot_patients[i] <- mean(new_patients)
}
最后,为组均值绘制引导分布:
p1 <- hist(boot_controls)
p2 <- hist(boot_patients)
plot(p1, col=rgb(0,0,1,1/4), xlim = c(9.5,10.5), main="")
plot(p2, col=rgb(1,0,0,1/4), add=T)