使用具有不同k的KNeighborsClassifier在一个图中绘制所有ROC曲线

时间:2018-05-02 21:40:49

标签: python roc

如何使用算法KNeighborsClassifier绘制多条ROC曲线?我想绘制不同k的ROC曲线。

这就是我所拥有的,但它会绘制不同的数字,我想将所有这些结合起来

k_range = range(1, 20)
for k in k_range:
    knn = KNeighborsClassifier(n_neighbors=k)
    model = knn.fit(X_train, Y_train)
    y_predict_proba = model.predict_proba(X_test).tolist()
    probabilities = np.array(y_predict_proba)[:, 1]
    fpr, tpr, _ = roc_curve(Y_test, probabilities)
    # roc_auc = (auc(fpr, tpr))

    plt.figure()
    plt.plot(fpr, tpr, color='darkorange', lw=2)
    plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--')
    plt.xlim([-0.05, 1.05])
    plt.ylim([-0.05, 1.05])
    plt.xlabel('False Positive Rate')
    plt.ylabel('True Positive Rate')
    plt.title('ROC Curve')
    plt.legend(loc="lower right")
    plt.show()

1 个答案:

答案 0 :(得分:0)

我弄清楚出了什么问题,万一有人会想要这样做:

for k in k_range:
    knn = KNeighborsClassifier(n_neighbors=k)
    model = knn.fit(X_train, Y_train)
    y_predict_proba = model.predict_proba(X_test).tolist()
    probabilities = np.array(y_predict_proba)[:, 1]
    fpr, tpr, _ = roc_curve(Y_test, probabilities)
    roc_auc = auc(fpr, tpr)
    color = ['blue', 'orange', 'red', 'green', 'coral',
             'grey', 'indigo', 'gold', 'lime', 'olive',
             'pink', 'navy', 'magenta', 'yellow', 'tomato',
             'turquoise', 'yellowgreen', 'maroon', 'lightblue']
    plt.plot(fpr, tpr, color=color[k - 1], lw=1, label='ROC (area = %f)' % roc_auc)
plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--')
plt.xlim([-0.05, 1.05])
plt.ylim([-0.05, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('ROC Curve')
plt.legend(loc="lower right")
plt.show()