【问题标题】:Error in factor(newCases[, a], levels = 1:nlevels(data[, a]), labels = levels(data[, : invalid 'labels'; length 0 should be 1 or 2因子错误(newCases[, a], levels = 1:nlevels(data[, a]), labels = levels(data[, : invalid 'labels'; 长度 0 应该是 1 或 2
【发布时间】:2019-12-09 12:21:50
【问题描述】:

我正在运行 SMOTE 功能,如下所示:

# install.packages("DMwR") for SMOTE implementation 

library(DMwR) smoted_data <- SMOTE(state~., deliq, perc.over=200, perc.under = 1600)

但我得到以下错误:

Error in factor(newCases[, a], levels = 1:nlevels(data[, a]), labels = levels(data[, : invalid 'labels'; length 0 should be 1 or 2 In addition: Warning message: In smote.exs(data[minExs, ], ncol(data), perc.over, k) : NAs introduced by coercion

我检查了所有因子变量,没有一个包含任何级别的 0。

数据中也没有可用的 NA,我检查了 stackoverflow 中的所有相关帖子,但没有得到任何与我的案例相关的内容。

这可能是什么原因?

【问题讨论】:

  • 是否可以dput(deliq) 并将其添加到您的问题中?可能是数据问题。
  • 我尝试了这个函数,但是 dput() 的输出非常大(甚至没有保留在控制台中)。
  • dput(head(deliq)) 怎么样?

标签: r smote


【解决方案1】:

我发现的解决方法是执行以下操作(仅保留预测变量和目标变量)。

x <- your independent variables

  fmla <- as.formula(paste("state ~ ", paste(x, collapse= "+")))

smoted_data <- SMOTE(fmla, subset(deliq, select = c("state",x)), perc.over=200,perc.under = 1600)

【讨论】:

    【解决方案2】:

    检查这些因子变量是否真正采用因子格式而不是字符。 这样做检查: 字符串(我的数据) 如果它们中的任何一个具有字符,请使用以下方法将它们恢复为因子格式: as.factor(myvariable)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-28
      • 2021-04-02
      • 1970-01-01
      • 2013-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-04
      相关资源
      最近更新 更多