在大模型训练中,数据不平衡问题是特征工程中的核心挑战之一。本文将深入对比欠采样与过采样技术在特征工程中的应用效果。
欠采样策略
欠采样通过减少多数类样本数量来平衡数据分布。常用的策略包括:
from imblearn.under_sampling import RandomUnderSampler
from sklearn.model_selection import train_test_split
# 原始数据集划分
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 随机欠采样
undersampler = RandomUnderSampler(random_state=42)
X_train_under, y_train_under = undersampler.fit_resample(X_train, y_train)
过采样策略
过采样通过增加少数类样本数量来平衡数据分布,常用SMOTE算法:
from imblearn.over_sampling import SMOTE
# SMOTE过采样
smote = SMOTE(random_state=42)
X_train_smote, y_train_smote = smote.fit_resample(X_train, y_train)
实验对比
在真实数据集上,我们对三种策略进行评估:
- 原始数据(未处理)
- 欠采样后训练
- 过采样后训练
实验结果显示,过采样在保持模型泛化能力方面表现更优,而欠采样可能导致信息丢失。建议根据具体业务场景选择合适的采样策略。
可复现步骤
- 安装依赖:
pip install imbalanced-learn scikit-learn - 准备数据集
- 执行上述代码进行采样处理
- 评估模型性能差异

讨论