如何使用KNeighborsClassifier将不同k值的ROC曲线绘制在同一图中?
解决KNeighborsClassifier多k值ROC曲线合并绘图问题
我来帮你搞定这个把不同k值对应的ROC曲线合并到同一幅图里的需求~ 你的原代码问题在于每次循环都会默认创建新的绘图窗口,所以才会生成多个独立图像。我们只需要提前初始化一个画布,然后在循环里把每条曲线都画到这个画布上就行,具体修改如下:
修改后的完整代码
# 先导入需要的库(如果还没导入的话) from sklearn.neighbors import KNeighborsClassifier from sklearn.metrics import roc_curve, auc import matplotlib.pyplot as plt import numpy as np # 假设你的X_train、Y_train、X_test、Y_test已经准备好 k_range = range(1, 20) # 初始化一个绘图画布 plt.figure(figsize=(8, 6)) for k in k_range: knn = KNeighborsClassifier(n_neighbors=k) model = knn.fit(X_train, Y_train) # 获取正类的预测概率 probabilities = model.predict_proba(X_test)[:, 1] # 计算ROC曲线的fpr、tpr和阈值 fpr, tpr, thresholds = roc_curve(Y_test, probabilities) # 计算AUC值 roc_auc = auc(fpr, tpr) # 绘制当前k值的ROC曲线,添加标签方便识别 plt.plot(fpr, tpr, label=f'k={k}, AUC={roc_auc:.2f}') # 添加对角线参考线(随机猜测的ROC曲线) plt.plot([0, 1], [0, 1], 'r--') # 设置图表标题和坐标轴标签 plt.title('ROC Curves for Different k Values in KNeighborsClassifier') plt.xlabel('False Positive Rate') plt.ylabel('True Positive Rate') # 添加图例,让每条曲线对应的k值和AUC清晰可见 plt.legend(loc='lower right') # 显示最终合并后的图 plt.show()
关键修改点说明
- 把
plt.figure()放在循环外面,确保所有曲线都绘制在同一个画布上 - 每次循环绘制曲线时,通过
label参数标注对应的k值和AUC值,方便后续图例识别 - 添加了红色虚线的对角线作为参考,代表随机分类器的ROC表现
- 最后统一添加标题、坐标轴标签和图例,让图表更直观易读
这样运行后,你就能得到一幅包含所有k值ROC曲线的合并图啦,每条曲线的差异和对应的AUC值都能一目了然~
内容的提问来源于stack exchange,提问作者Mr. Wizard
相关产品推荐
相关产品推荐

