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

SkLearn MLP分类器少数类Precision/Recall/F1值全为0问题求助

类别不平衡下MLP/SVM无法识别少数类的解决建议

问题背景

使用Sklearn的MLP分类器训练模型,数据集划分代码:

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, stratify=y, random_state=1)

数据集分布:

  • 训练集样本数:9405,类别分布:0(No):7562,1(Yes):1843
  • 测试集样本数:4032,类别分布:0(No):3242,1(Yes):790

MLP分类器代码:

MLP = MLPClassifier(random_state=1, learning_rate = "constant", learning_rate_init=0.3, momentum = 0.2 )
MLP.fit(X_train, y_train)
R_y_pred = MLP.predict(X_test)
target_names = ['No', 'Yes']
print(classification_report(y_test, R_y_pred, target_names=target_names, zero_division=0))

分类报告结果(少数类完全无法被识别):

precision    recall  f1-score   support

            No       0.80      1.00      0.89      3242
            Yes       0.00      0.00      0.00       790

       accuracy                           0.80      4032
      macro avg       0.40      0.50      0.45      4032
   weighted avg       0.65      0.80      0.72      4032

注:该问题仅出现在SVM和MLP中,Random Forest与Logistic Regression训练正常,数据集为标签编码后的分类数据。

解决建议

1. 数据层面处理

  • 类别加权:在MLP和SVM训练时启用class_weight='balanced'参数,模型会根据样本比例自动计算类别权重,迫使模型更关注少数类样本。
  • 重采样:
    • 过采样:使用SMOTE等算法生成合成的少数类样本,平衡数据集分布;
    • 欠采样:随机剔除部分多数类样本,缩小两类样本数量差距,注意保留多数类核心特征避免信息丢失。

2. 模型参数调优

  • MLP参数调整:
    • 降低learning_rate_init值(如0.001、0.01),当前0.3的学习率过大易导致模型训练跳过最优解,同时可设置learning_rate='adaptive'让模型动态调整学习率;
    • 增加网络层数或神经元数量,提升模型对少数类特征的拟合能力;
    • 调整momentum至0.9左右,优化梯度下降的稳定性;
    • 加入alpha正则化参数,防止模型过度拟合多数类样本。
  • SVM参数调整:
    • 尝试切换至RBF核函数,线性核在不平衡数据下拟合能力有限;
    • 增大C参数值,提升模型对错误分类样本的惩罚力度,迫使模型重视少数类。

3. 训练流程优化

  • 特征标准化:MLP和SVM对特征尺度高度敏感,先使用StandardScaler或MinMaxScaler对所有特征做归一化/标准化处理,避免大尺度特征主导模型训练。
  • 调整决策阈值:放弃默认的0.5判定阈值,通过predict_proba获取样本概率后,调低少数类的判定阈值(如0.3),让模型更容易输出少数类预测结果。
  • 分层交叉验证:使用StratifiedKFold进行交叉验证,确保每折数据都保持原类别分布,更准确评估模型对少数类的识别能力。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 02:50:27