R使用ovun.sample对Paysim数据集过采样出现model.frame.default报错如何解决
R语言ovun.sample过采样报错解决方案
错误原因说明
你遇到的两次看似矛盾的报错,本质是两次输入的数据集都不符合ovun.sample函数(来自ROSE包)的参数要求:
- 第一次报错是因为你传入的
sample_dataset不是标准的data.frame结构,可能存在列表列、嵌套结构或者tibble等特殊数据类型,导致model.frame.default解析失败触发报错 - 第二次你将数据集强转为矩阵,直接违反了
ovun.sample要求输入data参数必须为data.frame的规则,触发第二类报错
正确操作步骤
步骤1:数据集预处理
先对Paysim1数据集做标准化清洗,确保输入的数据结构符合要求:
# 加载依赖包 library(ROSE) # 读取本地Paysim1数据集 org_dataset <- read.csv("你的本地Paysim1数据集路径.csv") # 重命名目标列,原数据集欺诈标签为isFraud,匹配你代码里的class变量名 names(org_dataset)[names(org_dataset) == "isFraud"] <- "class" # 筛选建模用字段,删除姓名、ID类非结构化字段 sample_dataset <- org_dataset[, c("step", "type", "amount", "oldbalanceOrg", "newbalanceOrig", "oldbalanceDest", "newbalanceDest", "class")] # 过滤缺失值,转为标准data.frame结构,排除tibble等特殊类型的干扰 sample_dataset <- as.data.frame(sample_dataset[complete.cases(sample_dataset), ]) # 分类变量转为因子类型,避免解析异常 sample_dataset$type <- as.factor(sample_dataset$type) sample_dataset$class <- as.factor(sample_dataset$class)
步骤2:执行过采样
运行过采样代码即可正常得到结果:
oversample_data <- ovun.sample(class ~ ., data = sample_dataset, p = 0.5, seed = 1, method="over")$data
结果验证
运行以下代码验证过采样效果,正常会输出两类样本占比接近1:1的统计结果:
table(oversample_data$class)
异常排查方案
如果仍然报错,先运行str(sample_dataset)检查数据集结构,确保所有列都是数值、因子或字符类型的原子向量,没有列表、矩阵等复杂类型的列。
内容的提问来源于stack exchange,提问作者WILLIAM
相关产品推荐
相关产品推荐

