【问题标题】:What is the best way of Under sampling in RR中欠采样的最佳方法是什么
【发布时间】:2018-02-26 04:39:20
【问题描述】:

我有一个具有属性 A、B、C 的数据集。C 是具有 2 个标签 zz 和 z 的因子。 number of (z) > number of (zz),我想在样本下我的数据集,以便在新数据中具有相同的 zz 和 z 值。 不能为此使用任何外部包如果可以使用 sample 函数完成最好

--------------------------------------------------
| Attribute A   |   Attribute B . | Attribute c  |
--------------------------------------------------
|  xx           | y1              | zz           |
--------------------------------------------------
|  mm           | r1              |  z           |
--------------------------------------------------
|  ab           | 1r              |  z           |
--------------------------------------------------
|  ry           | cm              |  zz          |
--------------------------------------------------
|  ca           | rx              |  z           |
--------------------------------------------------
|  mm           | zr              |  z           |
--------------------------------------------------

结果应该是-


| Attribute A   |   Attribute B . | Attribute c  |
--------------------------------------------------
|  xx           | y1              | zz           |
--------------------------------------------------
|  mm           | r1              |  z           |
--------------------------------------------------
|  ab           | 1r              |  z           |
--------------------------------------------------
|  ry           | cm              |  zz          |
--------------------------------------------------

这里 zz 的概率 = z 的概率 = 0.5

【问题讨论】:

  • 不清楚您的数据究竟是什么样的。请提供一些可重现的数据,作为dput 的输出或生成更大随机样本的代码。还包括您的预期输出。到目前为止,您尝试过哪些代码对其进行采样?
  • @sapy 您可以尝试类似sample(C$x, length(C$y)) 的方法,其中C$x 是C 向量中的x 值,C$y 是向量中的y 值。如果没有您的数据集或数据集示例,就无法提供正确的答案。
  • 检查ROSE 包,DmwR 包中的smotedownSampleupSample 包中的upSample

标签: r random analytics data-science


【解决方案1】:

假设您的数据位于名为data 的数据框中,其中包含ABC 列,您可以执行以下操作:

## 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 的概率为 50%?这是我最关心的问题
  • 什么意思?您正在抓取每个 nsamp 条目,因此它们将始终平均分配。还是我误解了你想要的输出?
猜你喜欢
  • 1970-01-01
  • 2020-03-05
  • 1970-01-01
  • 1970-01-01
  • 2021-08-20
  • 2010-09-14
  • 1970-01-01
  • 2012-10-25
  • 2017-10-29
相关资源
最近更新 更多