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

如何解决Cubic SVM计算AUC时出现的TypeError错误?

解决多分类Cubic SVM计算AUC时的TypeError错误

错误原因分析

  • SVC.predict()返回的是类别标签(如1-8的整数),而非各类别的概率值,你用np.argmax(y_prob, axis=0)处理单个类别标签,会得到单元素数组(Singleton array),不符合roc_auc_score的输入要求。
  • 默认SVC不输出概率估计,必须显式开启概率计算功能。
  • 多分类场景下计算AUC,roc_auc_score需要接收每个样本在各个类别上的概率值,而非单一类别标签。

修正步骤

  • 修改SVC初始化参数:添加probability=True,让模型支持输出概率估计。
  • 获取类别概率:用predict_proba()代替predict(),得到形状为(n_samples, n_classes)的概率矩阵。
  • 调整AUC计算逻辑:直接用真实标签和概率矩阵计算AUC,无需额外的argmax处理。

修正后的代码

import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.metrics import roc_auc_score
from sklearn.svm import SVC

# 假设X和y是你的特征与目标变量
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 初始化三次多项式核SVC,开启概率计算
model1 = SVC(kernel='poly', degree=3, probability=True, random_state=42)
model1.fit(X_train, y_train)

# 获取每个样本在各类别上的概率
y_prob = model1.predict_proba(X_test)

# 计算多分类AUC(ovr模式:One-vs-Rest)
auc = roc_auc_score(y_test, y_prob, multi_class='ovr')
print(f"多分类AUC值:{auc}")

额外说明

  • 若目标变量y是1-8这类非0起始的整数,roc_auc_score仍能正常处理,它会自动识别类别数量。
  • probability=True会增加模型训练时间,因为需要额外的Platt缩放生成概率估计。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 05:16:01