出现该错误是因为在计算AUC值时,需要指定multi_class参数为'ovo'(one-vs-one)或'ovr'(one-vs-rest)。在鸢尾花数据集中,有三个类别,因此我们需要使用'ovo'或'ovr'。

修改代码如下:

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score, roc_curve, roc_auc_score
import matplotlib.pyplot as plt

# 加载鸢尾花数据集
iris = load_iris()

# 划分数据集为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.2, random_state=42)

# 创建SVC模型并进行训练
model = SVC(probability=True)
model.fit(X_train, y_train)

# 在测试集上进行预测
y_pred = model.predict(X_test)

# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print("准确率:", accuracy)

# 获取每个类别的概率
y_prob = model.predict_proba(X_test)

# 计算ROC曲线和AUC值
roc_auc = roc_auc_score(y_test, y_prob, multi_class='ovr')
print("AUC值:", roc_auc)

# 绘制ROC曲线
fpr = dict()
tpr = dict()
for i in range(3):
    fpr[i], tpr[i], _ = roc_curve(y_test, y_prob[:, i], pos_label=i)
plt.plot(fpr[0], tpr[0], label='Class 0 vs Rest')
plt.plot(fpr[1], tpr[1], label='Class 1 vs Rest')
plt.plot(fpr[2], tpr[2], label='Class 2 vs Rest')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('ROC Curve')
plt.legend(loc="lower right")
plt.show()

在修改后的代码中,我们使用roc_auc_score函数计算AUC值时,将multi_class参数设置为'ovr'。另外,我们针对每个类别绘制了对应的ROC曲线。

运行上述代码,将输出模型在测试集上的准确率和AUC值,并绘制三个类别的ROC曲线。

解决'ValueError: multi_class must be in ('ovo', 'ovr')'错误:计算多类别AUC值的正确方法

原文地址: https://www.cveoy.top/t/topic/66c 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录