Python机器学习SGD多分类调用roc_curve触发multiclass格式不支持报错求助
问题原因
- sklearn的
roc_curve接口原生仅支持二分类任务的ROC计算,你使用的红酒数据集是3分类任务,直接传入多类别标签y_test和3列的决策函数输出y_score会触发格式不支持报错 - 原有代码循环计算每个类别的ROC时,没有对标签做二值化转换,也没有按类别切片取对应的决策值,是触发错误的直接原因
修复方案
将原有ROC计算的代码段替换为以下内容即可:
# 先对测试集标签做二值化处理,转为one-hot格式 y_test_bin = label_binarize(y_test, classes=[0,1,2]) y_score = best_clf.decision_function(X_test[:,[best_f1, best_f2]]) # 绘制ROC曲线并计算AUC fpr = dict() tpr = dict() roc_auc = dict() for i in range(nclasses): # 针对每个类别,取对应二值化后的标签和对应类别的决策值 fpr[i], tpr[i], _ = roc_curve(y_test_bin[:, i], y_score[:, i]) roc_auc[i] = auc(fpr[i], tpr[i])
其他可修复的已知问题
- 原有代码绘制测试集散点时定义的
colors = ['cyan','orange']只有2个颜色,3分类任务会触发索引越界,修改为3个颜色即可,比如colors = ['cyan','orange','purple'] - 原有代码重复创建了两次决策边界的画布,可删掉一段重复的画布创建和绘图逻辑,避免生成多余空白图
内容的提问来源于stack exchange,提问作者bugzoid
相关产品推荐
相关产品推荐

