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

sklearn计算matthews_corrcoef和precision_score出现警告及运行慢如何解决

问题根因

你遇到的两个警告和返回0的结果和输入特征有无NaN无关,核心原因是模型对测试集的预测结果全为负类,没有预测出任何pos_label=1的正样本:

  • precision的警告已经明确说明due to no predicted samples,没有预测到正样本的情况下precision无意义,默认返回0
  • MCC的报错是因为预测值没有类间方差,计算时分母为0,触发非法数值计算警告

排查步骤

  • 先统计标签与预测值的分布,执行以下代码确认分布情况:
# 查看测试集真实标签分布
print(np.unique(test_labels, return_counts=True))
# 查看测试集预测结果分布
print(np.unique(y_test_pred, return_counts=True))

优先确认是否存在类别极度不平衡、标签编码与pos_label设置不匹配的问题

  • 排查训练过程:查看训练集的标签分布,如果正样本占比极低,模型会直接选择全部预测负类来获取最高的整体准确率,没有学到正样本的判别特征
  • 模型运行慢排查:先检查输入特征的维度是否过高、数据类型是否为非数值型(如object类型)、是否使用了未做轻量化配置的复杂模型

解决方案

指标报错处理

  1. 先解决类别不平衡问题:可通过SMOTE上采样少数类、下采样多数类,或在模型初始化时添加class_weight='balanced'参数,提高少数类的损失权重,避免模型直接全部预测多数类
  2. 调用指标时添加参数规避警告:调用precision_score时添加zero_division参数,示例:
precision_score(test_labels, y_test_pred, pos_label=1, zero_division=0)*100

可直接消除UndefinedMetricWarning,MCC的警告会在预测结果存在两类样本时自动消失
3. 可根据业务场景更换对不平衡数据更友好的评估指标,如AUC-ROC、F1-score

模型运行慢处理

  1. 做特征筛选:通过方差过滤、互信息法等去掉冗余特征,降低输入维度
  2. 统一输入数据类型:将所有特征转换为float32类型,降低计算开销,示例:
te_fin = te_fin.astype('float32')
  1. 轻量化模型配置:调低集成模型的树数量、最大深度等超参数,或先使用逻辑回归等轻量模型跑通基线,再逐步迭代更复杂的模型

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 08:09:02