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

修改OneClassSVM输出标签为0和1后出现Precision和F-score未定义警告怎么办

警告出现的原因
  • 标签处理逻辑错误:你仅修改了classification_report源码中的labels变量映射,没有同步处理输入的真实标签y_true和预测标签y_pred,导致标签匹配混乱。原OneClassSVM输出的-1没有在预测阶段直接转换为0,评估时找不到对应标签的预测样本,触发指标计算异常警告。
  • 模型使用错误:OneClassSVM是单类异常检测模型,训练阶段仅需要传入正常类的特征数据,不需要传入标签y_train,你错误的调用fit(X_train, y_train)会导致模型拟合边界异常,最终出现所有预测结果均为1的情况,没有预测为0的样本,自然无法计算0类的precision、F1指标。
  • 数据集不平衡未适配:你的数据集中异常类样本仅占0.39%,没有调整OneClassSVM的nu参数(控制模型判定为异常的样本比例),模型会默认把绝大多数样本判定为正常类(1),进一步加剧了0类无预测样本的问题。
解决方案(保留输出0/1标签)
  1. 不要修改sklearn源码,在预测输出阶段直接做标签转换,避免破坏库原生逻辑,同时修正模型导入和训练的错误写法:
# 修正导入路径
from sklearn.svm import OneClassSVM

check = OneClassSVM(kernel='rbf', gamma='scale', nu=0.004) # nu设置接近异常样本占比
# 训练仅传入正常类特征,不需要标签
check.fit(X_train)
# 预测后直接转换标签:-1转0,1保持不变
y_pred = check.predict(X_test)
y_pred = [0 if label == -1 else 1 for label in y_pred]
  1. 确保真实标签y_true也已经调整为0/1格式,直接调用原生classification_report即可,不需要修改源码:
from sklearn.metrics import classification_report
# 明确指定labels为你需要的0、1,对应自定义分类名称
print(classification_report(y_true, y_pred, labels=[0,1], target_names=['A', 'B']))
  1. 若仍存在指标异常,可调整OneClassSVM的gamma、nu参数,或对数据做标准化预处理,适配单类模型的输入要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 17:06:02