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

如何使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:31:49