解决Scikit-learn中roc_auc_score报错:ValueError: multi_class must be in ('ovo', 'ovr')
解决Scikit-learn中roc_auc_score报错:ValueError: multi_class must be in ('ovo', 'ovr')
在使用Scikit-learn库进行机器学习任务时,你可能会遇到'ValueError: multi_class must be in ('ovo', 'ovr')'错误。这个错误通常发生在你使用roc_auc_score函数计算多类别分类问题的AUC值时。
错误原因
roc_auc_score函数默认情况下对多类别分类任务是一对多(one-vs-rest,简称'ovr')方式进行计算AUC值。然而,并非所有分类器都支持'ovr'方式。例如,SVC模型默认情况下使用一对一(one-vs-one,简称'ovo')方式。
解决方法
要解决此错误,你需要在调用roc_auc_score函数时明确指定multi_class参数为'ovr':pythonroc_auc = roc_auc_score(y_test, y_prob_positive, multi_class='ovr')
代码示例
以下代码演示了如何在使用SVC模型时解决此错误:pythonfrom sklearn.datasets import load_irisfrom sklearn.model_selection import train_test_splitfrom sklearn.svm import SVCfrom sklearn.metrics import accuracy_score, recall_score, precision_score, roc_curve, roc_auc_scoreimport matplotlib.pyplot as plt
加载鸢尾花数据集iris = load_iris()
打印特征名print('特征名:', iris.feature_names)
划分数据集为训练集和测试集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)recall = recall_score(y_test, y_pred, average='weighted')precision = precision_score(y_test, y_pred, average='weighted')print('准确率:', accuracy)print('召回率:', recall)print('精确率:', precision)
计算ROC曲线和AUC值y_prob = model.predict_proba(X_test)y_prob_positive = y_prob[:, 2] # 取正例的概率作为y_probfpr, tpr, thresholds = roc_curve(y_test, y_prob_positive, pos_label=2)# 指定multi_class参数为'ovr'roc_auc = roc_auc_score(y_test, y_prob_positive, multi_class='ovr')print('AUC值:', roc_auc)
绘制ROC曲线plt.plot(fpr, tpr, label='ROC curve (area = %0.2f)' % roc_auc)plt.plot([0, 1], [0, 1], 'k--')plt.xlim([0.0, 1.0])plt.ylim([0.0, 1.05])plt.xlabel('False Positive Rate')plt.ylabel('True Positive Rate')plt.title('Receiver Operating Characteristic')plt.legend(loc='lower right')plt.show()
总结
通过在roc_auc_score函数中指定multi_class='ovr'参数,你可以解决'ValueError: multi_class must be in ('ovo', 'ovr')'错误,并成功计算多类别分类问题的AUC值。
原文地址: http://www.cveoy.top/t/topic/6Vc 著作权归作者所有。请勿转载和采集!