在R中进行欠采样的最佳方式是什么
我有一个属性为a、B、C的数据集。C是一个有两个标签zz和z的因子在R中进行欠采样的最佳方式是什么,r,random,analytics,data-science,R,Random,Analytics,Data Science,我有一个属性为a、B、C的数据集。C是一个有两个标签zz和z的因子number of(z)>number of(zz),我想在sample我的数据集下,以便在新数据中具有相同数量的zz和z值无法为此使用任何外部软件包。使用sample函数可以实现最佳if 结果应该是- 这里zz的概率=z的概率=0.5假设您的数据位于名为data的数据框中,其中包含a、B和C,您可以执行以下操作: ## rows that have "z" and "zz" entries z_ind <- which(
number of(z)>number of(zz)
,我想在sample我的数据集下,以便在新数据中具有相同数量的zz和z值无法为此使用任何外部软件包。使用sample
函数可以实现最佳if
结果应该是-
这里zz的概率=z的概率=0.5假设您的数据位于名为
data
的数据框中,其中包含a
、B
和C
,您可以执行以下操作:
## rows that have "z" and "zz" entries
z_ind <- which(data$C == "z")
zz_ind <- which(data$C == "zz")
nsamp <- 10 #number of elements to sample
## if you want all elements of the smaller class, could be:
## nsamp <- min(length(z_ind), length(zz_ind))
## select `nsamp` entries with "z" and `nsamp` entries with "zz"
pick_z <- sample(z_ind, nsamp)
pick_zz <- sample(zz_ind, nsamp)
new_data <- data[c(pick_z, pick_zz), ]
##具有“z”和“zz”项的行
我们不清楚你的数据到底是什么样子的。请提供一些可复制的数据,作为dput
的输出,或用于生成更大随机样本的代码。还包括您的预期输出。到目前为止,您尝试了哪些代码对其进行采样?@sapy您可以尝试类似于sample(C$x,length(C$y))
的方法,其中,C$x
是C向量中的x值,C$y
是向量中的y值。如果没有您的数据集或数据集示例,则无法提供正确的答案。请检查ROSE
包、smote
中的DmwR
包或caret
包中的downSample
和upSample
如何确保新数据中z和zz的概率为50%?这是我最关心的问题你什么意思?您正在抓取每个的nsamp
条目,因此它们将始终被平均分割。还是我误解了你想要的结果?
| Attribute A | Attribute B . | Attribute c |
--------------------------------------------------
| xx | y1 | zz |
--------------------------------------------------
| mm | r1 | z |
--------------------------------------------------
| ab | 1r | z |
--------------------------------------------------
| ry | cm | zz |
--------------------------------------------------
## rows that have "z" and "zz" entries
z_ind <- which(data$C == "z")
zz_ind <- which(data$C == "zz")
nsamp <- 10 #number of elements to sample
## if you want all elements of the smaller class, could be:
## nsamp <- min(length(z_ind), length(zz_ind))
## select `nsamp` entries with "z" and `nsamp` entries with "zz"
pick_z <- sample(z_ind, nsamp)
pick_zz <- sample(zz_ind, nsamp)
new_data <- data[c(pick_z, pick_zz), ]