在R中进行欠采样的最佳方式是什么

在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(

我有一个属性为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(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), ]