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

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.csdn.net/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个分类因变量
R SMOTE 报错 length of 'dimnames' [2] not equal to array extent_第1张图片

// 原始语句
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)

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

你可能感兴趣的:(R语言,机器学习,R,不平衡数据,SMOTE)