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

如何指定Sklearn MLPClassifier优先关注类别1(获胜)进行预测?

如何让MLPClassifier专注于类别1(胜)的预测

核心问题大概率是数据不平衡——负样本(0)数量远多于正样本(1),你用GridSearchCV选参数时默认用整体准确率指标,当全预测0的准确率比能部分预测1的模型更高时,它就会把这种“躺平”模型选为最优。要让模型专注于类别1的预测,你可以从这几个方向入手:

  • 先修正数据分布

    • 过采样:给类别1的样本做复制,或者用SMOTE这类算法生成合成正样本,拉平两类样本数量差距。
    • 欠采样:随机删掉一部分类别0的样本,缩小两类数量差。
      注意:过采样容易导致模型过拟合,欠采样会丢失有效数据,建议先统计两类样本的比例,再选合适的方法。
  • 给模型加类别权重
    初始化MLPClassifier时,加上class_weight='balanced'参数,它会根据样本比例自动给少数类(类别1)更高的错误代价,逼着模型重视类别1的预测。你也可以手动指定权重,比如class_weight={0:1, 1:3},意思是错判类别1的代价是错判类别0的3倍,具体倍数根据数据不平衡程度调整。

  • 更换GridSearchCV的评估指标
    别再用默认的准确率,换成对类别1更友好的指标,比如类别1的召回率、F1分数或者ROC-AUC。比如把GridSearchCV的scoring参数设为'recall'(召回率),这样它会优先选择能多预测出类别1的参数,而非全预测0的“伪最优”模型。示例代码:

    from sklearn.model_selection import GridSearchCV
    from sklearn.neural_network import MLPClassifier
    
    mlp = MLPClassifier(random_state=42)
    param_grid = {
        # 你的参数网格内容
    }
    # 用类别1的召回率作为评估指标
    grid_search = GridSearchCV(mlp, param_grid, scoring='recall', cv=5)
    grid_search.fit(X_train, y_train)
    
  • 调整模型训练细节
    你之前的最优参数里设了shuffle=False,这可能让模型先接触大量类别0样本,直接陷入偏向0的局部最优。改成shuffle=True,每次迭代打乱样本顺序,让模型交替接触两类样本。另外可以检查模型的损失曲线,确认300次迭代是否真的收敛,有时候迭代次数过多反而会让模型过度偏向多数类。

之前用hidden_layer_sizes=(64, 32), max_iter=100时能有0.47的类别1准确率,是因为模型还没收敛到全预测0的状态,反而能学到类别1的部分特征,但GridSearchCV因整体准确率更高,把全预测0的模型当成了最优,这显然不是你需要的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 17:45:15