R SMOTE 报错 length of 'dimnames' [2] not equal to array extent

本文解决在使用R语言DMwR包中的SMOTE函数时遇到的错误,通过将数据从dataframe转换为matrix再转回dataframe,成功解决了length of 'dimnames'[2] not equal to array extent的报错问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

R语言 SMOTE函数报错

在运行DMwR包的SMOTE函数用于增大正样本的语句时,出现报错:
Error in matrix(if (is.null(value)) logical() else value, nrow = nr, dimnames = list(rn, : length of ‘dimnames’ [2] not equal to array extent

原因不明,解决方案如下,将语句里的data 先转化为matrix,再转化为dataframe.

此段文字来自https://blog.youkuaiyun.com/c1z2w3456789/article/details/80664872
SMOTE(form, data, perc.over = 200, k = 5, perc.under = 200, learner = NULL, …)
参数解释:
form:描述预测问题的公式
data:原始的不平衡的数据集
A data frame containing the original (unbalanced) data set
k:用于产生新的少数派样本的最近邻数量(与kNN中的k类似)
learner:可选参数,指定一个分类算法的函数名称(类型为字符串),这个函数将对结果进行分类
perc.over:指定从少数样本中采样的比例。
perc.under:对多数样本下采样,有多少比例的样本被选入新的数据集中

具体例子

原始数据,dataframe格式,3个自变量,1个分类因变量
原始数据,dataframe格式

// 原始语句
train_bla <- SMOTE(是否录用 ~ ., train, perc.over = 3600,perc.under=100)
//报错信息
Error in matrix(if (is.null(value)) logical() else value, nrow = nr, dimnames = list(rn,  : 
  length of 'dimnames' [2] not equal to array extent
//修改后语句
train2 <- as.matrix(train)
train_resampled <- SMOTE(是否录用 ~ ., as.data.frame(train2), perc.over = 3600,perc.under=100)

写完发表发现优快云推送了相同文章,那也保存下来吧,独立解决问题值得记得

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值