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

R 4版本下实现类别不平衡数据过采样的方法咨询

R 4版本过采样实现方法

旧版unbalanced包的ubBalance函数已经长期未维护,在R4环境下很容易出现依赖报错、运行异常的问题,以下是几个适配R4版本、操作简便的过采样方案:

1. 用caret包实现快速随机过采样

caret是目前R机器学习领域通用的预处理包,内置的upSample函数开箱即用,不需要复杂配置:

  • 安装加载包(首次使用需安装)
install.packages("caret")
library(caret)
  • 执行过采样
# 传入特征列和标签列,自动对少数类做有放回抽样平衡类别
df_balanced <- upSample(
  x = df[, c("x1", "x2")],
  y = df$y,
  yname = "y"
)

# 校验平衡后的类别分布
table(df_balanced$y)

运行后得到的数据集里Yes和No类各90条,直接满足类别平衡要求。

2. 用themis包实现SMOTE等高级过采样

如果觉得随机过采样容易过拟合,需要用SMOTE、ADASYN这类合成少数类样本的算法,可以选themis包,属于tidymodels生态,维护活跃适配R4全版本:

  • 安装加载
install.packages("themis")
library(themis)
  • SMOTE过采样示例
df_smote <- smote(df, y ~ ., over_ratio = 1)
table(df_smote$y)

参数over_ratio控制采样后少数类和多数类的样本量比例,设为1就是完全平衡,设为0.5就是少数类样本量为多数类的一半,可以根据建模需求调整。

3. 无依赖手动实现随机过采样

如果不想额外安装第三方包,用基础R代码几行就能实现随机过采样:

# 拆分多数类、少数类样本
major <- df[df$y == "Yes", ]
minor <- df[df$y == "No", ]

# 对少数类做有放回抽样,样本量对齐多数类
minor_over <- minor[sample(nrow(minor), nrow(major), replace = T), ]

# 合并得到平衡数据集
df_manual <- rbind(major, minor_over)
table(df_manual$y)

提示:如果数据集本身样本量很小,随机过采样会因为重复采样提升过拟合风险,这种场景优先选SMOTE类的合成采样方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 02:36:15