r - 在 R 中应用 SMOTE 时如何解决此错误?
问题描述
我正在尝试使用以下代码将 smote 应用于我的数据集
dataset$target<- as.factor(dataset$target)
dataset <- SMOTE(target~ ., dataset, perc.over = 100, perc.under=200)
dataset$target <- as.numeric(dataset$target)
但我得到了以下错误。
Warning message in smote.exs(data[minExs, ], ncol(data), perc.over, k):
“NAs introduced by coercion”
Warning message in smote.exs(data[minExs, ], ncol(data), perc.over, k):
“NAs introduced by coercion”
Warning message in smote.exs(data[minExs, ], ncol(data), perc.over, k):
“NAs introduced by coercion”
Error in factor(newCases[, a], levels = 1:nlevels(data[, a]), labels = levels(data[, : invalid 'labels'; length 0 should be 1 or 2
Traceback:
1. SMOTE(target ~ ., dataset, perc.over = 100, perc.under = 200)
2. smote.exs(data[minExs, ], ncol(data), perc.over, k)
3. factor(newCases[, a], levels = 1:nlevels(data[, a]), labels = levels(data[,
. a]))
4. stop(gettextf("invalid 'labels'; length %d should be 1 or %d",
. nlab, length(levels)), domain = NA)
目标列包含 0 和 1
str(dataset$target)
它返回以下输出
Factor w/ 2 levels "0","1": 1 1 2 2 1 1 1 1 1 1 ...
我可以知道这里有什么问题吗?我无法理解错误信息。
解决方案
我认为这取决于character
数据框中的列。SMOTE
不知道如何根据您的数据集生成新的角色观察。一种可能的解决方案是删除该character
列。
library(data.table)
library(DMwR)
dataset <- fread("D:/archive/df.csv")
set.seed(4)
#sampling 10000 rows just for computational reasons
dataset <- dataset[sample(1:nrow(dataset),10000),]
dataset <- as.data.frame(dataset)
dataset$isFraud<- factor(dataset$isFraud)
table(dataset$isFraud)
str(dataset)
#drop the character column
dataset <- dataset[,!sapply(dataset, is.character)]
new.dataset <- SMOTE(isFraud ~ ., dataset, perc.over = 100, perc.under=200)
table(new.dataset$isFraud)
推荐阅读
- dart - 在 Scaffold Flutter 上设置 OnLongPressed 事件
- database - 撇号不会保存在数据库中
- javascript - 是否可以在 JS 中将语言环境字符串转换为带有千位分隔符的十进制数?
- php - 非常坚持正则表达式
- java - 如何使用 PDFBox 确定实际 PDF 内容的位置?
- angular - 检测是否可以在 adaljs-angular4 中进行静默登录
- javascript - 将输入从 component.html 发送到 component.ts
- c# - 在指定 X 值处向 MSChart 添加数据点或绘制椭圆
- javascript - JavaScript - babel-preset-env 不为 IE11 转换箭头函数
- iis - 停止 IIS 解码 URL 中的 %2f