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

分类问题中SMOTE的正确使用与实现方式技术问询

SMOTE在分类建模中的正确实现方式

核心原则

处理不平衡数据时,绝对不能在测试集上应用任何过采样/欠采样操作,且过采样必须在交叉验证的每个训练折内部单独执行,避免数据泄露(即验证折的信息提前被模型或采样方法获取)。


对四种实现方式的分析

1. 先过采样训练集再放入含SMOTE的Pipeline(错误)

这段代码存在两个严重问题:

  • 提前对整个训练集做SMOTE,再用该数据集做交叉验证,会导致验证折的信息被SMOTE利用,属于数据泄露,交叉验证分数会过于乐观,无法反映模型真实泛化能力。
  • Pipeline中再次加入SMOTE,等于对已经过采样的数据重复过采样,完全没有必要,还会破坏数据分布。

2. 不含SMOTE的Pipeline(不解决不平衡问题)

这种做法完全忽略了数据集的不平衡特性,逻辑回归等模型会天然偏向多数类,导致少数类的预测效果极差,无法解决你的核心问题。

3. 将SMOTE放入imblearn Pipeline,直接用原始训练集拟合(正确)

这是唯一符合规范的实现方式,理由如下:

  • 使用imbpipeline(imblearn提供的支持采样操作的Pipeline),将特征缩放、SMOTE过采样、模型训练串联起来。
  • 调用grid.fit(X_train, y_train)时,交叉验证的每一轮都会:
    1. 将当前折的训练子集单独做SMOTE过采样
    2. 用缩放后的过采样数据训练模型
    3. 用未做过采样的验证子集评估模型
  • 全程保证测试集完全独立,没有任何数据泄露,模型评估结果真实可靠。

正确代码示例:

from imblearn.pipeline import Pipeline as imbpipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import GridSearchCV, RepeatedStratifiedKFold, train_test_split
from imblearn.over_sampling import SMOTE

# 数据集划分
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 构建包含SMOTE的Pipeline
pipeline = imbpipeline(steps=[
    ('scale', StandardScaler()),
    ('over', SMOTE(random_state=42)),
    ('model', LogisticRegression(random_state=42))
])

# 交叉验证与网格搜索配置
cv = RepeatedStratifiedKFold(n_splits=10, n_repeats=3, random_state=42)
params = {
    'model__penalty': ['l1', 'l2'],
    'model__C': [0.001, 0.01, 0.1, 5, 10, 100]
}

grid = GridSearchCV(
    estimator=pipeline,
    param_grid=params,
    scoring='roc_auc',
    cv=cv,
    n_jobs=-1
)

# 用原始训练集拟合,Pipeline会自动在交叉验证折内处理过采样
grid.fit(X_train, y_train)

# 评估结果
cv_score = grid.best_score_
test_score = grid.score(X_test, y_test)
print(f"交叉验证分数: {cv_score} \n 测试集分数: {test_score}")

4. 先过采样训练集再用普通Pipeline拟合(错误)

提前对整个训练集做SMOTE,再用该数据集做交叉验证,同样存在数据泄露问题:交叉验证的验证折已经被包含在SMOTE拟合的数据集里,模型在训练时间接获取了验证折的信息,导致评估分数失真,无法反映模型在真实 unseen 数据上的表现。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 15:47:27