You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在R语言中使用SMOTE算法时出现invalid 'labels'报错如何解决?

报错原因
  • 该报错并非来自target列,问题出在数据集的特征列中存在零方差因子变量:即某一列的所有样本取值完全一致,只存在1个因子水平。SMOTE算法生成合成样本时,需要基于原特征的因子水平给新样本赋值,当遇到只有1个水平的因子特征时,内部的水平匹配逻辑出错,就会触发labels长度不匹配的报错。
  • 前期出现的「NAs introduced by coercion」警告也对应这个问题:SMOTE在处理特征类型转换时,无法正常识别零方差特征的取值范围,强制类型转换后生成了缺失值。
解决方法
  1. 先过滤数据集中的零方差特征,再执行SMOTE操作,示例代码如下:
# 没有安装caret包先执行 install.packages("caret")
library(caret)
# 识别所有零方差特征
zero_var_info <- nearZeroVar(dataset, saveMetrics = TRUE)
# 剔除零方差特征
dataset <- dataset[, !zero_var_info$zeroVar]
  1. 重新运行SMOTE代码,同时注意target列转数值的写法:原代码直接对因子执行as.numeric会把原本的0/1转为1/2,需要先转成字符再转数值
library(DMwR)
dataset$target <- as.factor(dataset$target)
dataset <- SMOTE(target ~ ., dataset, perc.over = 100, perc.under = 200)
# 修正target转数值的写法
dataset$target <- as.numeric(as.character(dataset$target))

内容的提问来源于stack exchange,提问作者user1758952

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 04:18:03