用python和Scikit-Learn实现KNN机器学习算法的ROC曲线

2024-05-28 23:07:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在为我的kNN分类算法实现ROC曲线。我知道ROC曲线是真阳性率与假阳性率的曲线图,我正努力从数据集中找到这些值。我进口'自身免疫.csv'并在其上运行kNN算法以输出精度值。化学试剂盒-学习网文件显示,要生成TPR和FPR,我需要通过y_test和y_分数的值,如下所示:

fpr, tpr, threshold = roc_curve(y_test, y_scores)

我只是在挣扎我应该用什么作为这些价值观。 感谢您的帮助,如果有什么我错过了道歉,因为这是我在这里的第一个帖子。在

^{pr2}$

Tags: 文件csv数据test算法分类曲线roc
1条回答
网友
1楼 · 发布于 2024-05-28 23:07:03

如果您查看documentation for ^{},您将看到关于y_score参数的以下内容:

y_score : array, shape = [n_samples] Target scores, can either be probability estimates of the positive class, confidence values, or non-thresholded measure of decisions (as returned by “decision_function” on some classifiers).

您可以使用sklearn中的^{} method of the ^{}获得概率估计。这将返回一个numpy数组,其中两列用于二进制分类,负类和正类各一列。对于roc_curve()函数,您要使用正类的概率估计值,因此可以替换:

y_scores = cross_val_score(knn_cv, X, y, cv=76)
fpr, tpr, threshold = roc_curve(y_test, y_scores)

有:

^{pr2}$

请注意,您需要如何使用[:, 1]获取第二列的所有行,以便只选择正类的概率估计值。这里有一个使用威斯康星州乳腺癌数据集的最小可重复性示例,因为我没有您的autoimmune.csv

from sklearn.datasets import load_breast_cancer
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import roc_curve
from sklearn.metrics import auc
import matplotlib.pyplot as plt

X, y = load_breast_cancer(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)

knn = KNeighborsClassifier(n_neighbors = 10)
knn.fit(X_train,y_train)

y_scores = knn.predict_proba(X_test)
fpr, tpr, threshold = roc_curve(y_test, y_scores[:, 1])
roc_auc = auc(fpr, tpr)

plt.title('Receiver Operating Characteristic')
plt.plot(fpr, tpr, 'b', label = 'AUC = %0.2f' % roc_auc)
plt.legend(loc = 'lower right')
plt.plot([0, 1], [0, 1],'r ')
plt.xlim([0, 1])
plt.ylim([0, 1])
plt.ylabel('True Positive Rate')
plt.xlabel('False Positive Rate')
plt.title('ROC Curve of kNN')
plt.show()

这将生成以下ROC曲线:

KNN ROC curve

相关问题 更多 >

    热门问题