不平衡数据处理:过采样/欠采样/损失函数调优

发布时间:2026/7/6 2:59:06
不平衡数据处理:过采样/欠采样/损失函数调优 不平衡数据处理过采样/欠采样/损失函数调优1. 不平衡数据问题不平衡数据场景 ├── 欺诈检测欺诈 0.1% vs 正常 99.9% ├── 疾病诊断患病 1% vs 健康 99% ├── 缺陷检测缺陷 2% vs 正常 98% └── 异常检测异常 0.5% vs 正常 99.5% 问题 ├── 模型偏向多数类 ├── 少数类召回率极低 └── 准确率虚高全预测多数类也有 99%2. 过采样方法fromimblearn.over_samplingimportSMOTE,ADASYN,RandomOverSampler# SMOTE最常用smoteSMOTE(sampling_strategy0.5,random_state42)X_res,y_ressmote.fit_resample(X_train,y_train)# ADASYN自适应合成adasynADASYN(sampling_strategy0.5,random_state42)X_res,y_resadasyn.fit_resample(X_train,y_train)# 随机过采样rosRandomOverSampler(sampling_strategy0.5,random_state42)X_res,y_resros.fit_resample(X_train,y_train)3. 欠采样方法fromimblearn.under_samplingimport(RandomUnderSampler,TomekLinks,EditedNearestNeighbours)# 随机欠采样rusRandomUnderSampler(sampling_strategy0.5,random_state42)X_res,y_resrus.fit_resample(X_train,y_train)# Tomek Links清理边界tomekTomekLinks()X_res,y_restomek.fit_resample(X_train,y_train)# 组合方法fromimblearn.combineimportSMOTETomek smtSMOTETomek(random_state42)X_res,y_ressmt.fit_resample(X_train,y_train)4. 类别权重调优fromsklearn.utils.class_weightimportcompute_class_weightimportnumpyasnp# 计算类别权重classesnp.unique(y_train)weightscompute_class_weight(balanced,classesclasses,yy_train)class_weight_dictdict(zip(classes,weights))# 使用类别权重fromsklearn.ensembleimportRandomForestClassifier rfRandomForestClassifier(class_weightbalanced,random_state42)rf.fit(X_train,y_train)# XGBoostimportxgboostasxgb scale_pos_weightlen(y_train[y_train0])/len(y_train[y_train1])xgb_clfxgb.XGBClassifier(scale_pos_weightscale_pos_weight)5. Focal Lossimporttorchimporttorch.nnasnnclassFocalLoss(nn.Module):def__init__(self,alpha0.25,gamma2.0):super().__init__()self.alphaalpha self.gammagammadefforward(self,inputs,targets):BCE_lossnn.functional.binary_cross_entropy_with_logits(inputs,targets,reductionnone)pttorch.exp(-BCE_loss)focal_lossself.alpha*(1-pt)**self.gamma*BCE_lossreturnfocal_loss.mean()# 使用criterionFocalLoss(alpha0.25,gamma2.0)losscriterion(outputs,targets)总结方法适用场景优势SMOTE中度不平衡增加多样性欠采样数据量大加速训练类别权重任何场景简单有效Focal Loss极端不平衡聚焦难分类