首页 > 解决方案 > R中ROSE的过采样和欠采样问题

问题描述

我有一个数据集可以在胜诉案件 (14399) 和败诉案件 (8677) 之间进行分类。该数据集有 912 个预测变量。我试图对丢失的案件进行过度抽样,以达到与获胜案件几乎相同的数量(因此每个获胜案件和失败案件都有 14399 个案件)。

TARGET 是丢失 (0) 和赢 (1) 案例的列:

table(dat_train$TARGET)

    0     1 
 8677 14399 

现在我正在尝试使用 ROSE ovun.sample 来平衡它们

dat_train_bal <- ovun.sample(dat_train$TARGET~., data = dat_train, p=0.5, seed = 1, method = "over")

我收到此错误:

Error in parse(text = x, keep.source = FALSE) : 
  <text>:1:17538: unexpected symbol
1: PPER_409030143+BP_RESPPER_9639064007+BP_RESPPER_7459058285+BP_RESPPER_9339059882+BP_RESPPER_9339058664+BP_RESPPER_5209073603+BP_RESPPER_5209061378+CRM_CURRPH_Initiation+Quotation+CRM_CURRPH_Ne

任何人都可以帮忙吗?谢谢 :-)

标签: rmachine-learningoversamplingimbalanced-data

解决方案


从一个虚假示例中复制您的代码我发现您的公式中有一个错误dat_train$TARGET~.需要更正为TARGET~.

dframe <- tibble::tibble(val = sample(c("a", "b"), size = 100, replace = TRUE, prob = c(.1, .9))
                         , xvar = rnorm(100)
                         )

# Use oversampling
dframe_os <- ROSE::ovun.sample(formula = val ~ ., data = dframe, p=0.5, seed = 1, method = "over")

table(dframe_os$data$val)

推荐阅读