python如何绘制roc曲线_如何在Python中绘制ROC曲线

uniquegino..

70

假设您model是一个sklearn预测器,您可以尝试以下两种方法:

import sklearn.metrics as metrics

# calculate the fpr and tpr for all thresholds of the classification

probs = model.predict_proba(X_test)

preds = probs[:,1]

fpr, tpr, threshold = metrics.roc_curve(y_test, preds)

roc_auc = metrics.auc(fpr, tpr)

# method I: plt

import matplotlib.pyplot as plt

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.show()

# method II: ggplot

from ggplot import *

df = pd.DataFrame(dict(fpr = fpr, tpr = tpr))

ggplot(df, aes(x = 'fpr', y = 'tpr')) + geom_line() + geom_abline(linetype = 'dashed')

或尝试

ggplot(df, aes(x = 'fpr', ymin = 0, ymax = 'tpr')) + geom_line(aes(y = 'tpr')) + geom_area(alpha = 0.2) + ggtitle("ROC Curve w/ AUC = %s" % str(roc_auc))

Reii Nakano..

61

在给定一组地面实况标签和预测概率的情况下,这是绘制ROC曲线的最简单方法.最好的部分是,它绘制了所有类的ROC曲线,因此您也可以获得多个整齐的曲线

import scikitplot as skplt

import matplotlib.pyplot as plt

y_true = # ground truth labels

y_probas = # predicted probabilities generated by sklearn classifier

skplt.metrics.plot_roc_curve(y_true, y_probas)

plt.show()

这是plot_roc_curve生成的样本曲线.我使用了来自scikit-learn的样本数据集,因此有10个类.请注意,为每个类绘制了一条ROC曲线.

免责声明:请注意,这使用我构建的scikit-plot库.

我在尝试使用包时遇到问题.每当我试图提供曲线roc曲线时,它告诉我我有"太多指数".我正在喂我的y_test,并且正在为它做准备.我能够做出我的预测.但由于这个错误,不能得到阴谋.是由于我正在运行的python版本? (10认同)

Reii Nakano - 你是天使伪装的天才.你结识了我的一天.这个包很简单但是非常有效.你对我充满敬意.关于您上面的代码段,请注意一下; 最后一行不读它:`skplt.metrics.plot_roc_curve(y_true,y_probas)`?十分感谢你. (3认同)

我不得不将我的y_pred数据重新整形为大小为Nx1而不仅仅是一个列表:y_pred.reshape(len(y_pred),1).现在我得到错误'IndexError:索引1超出了轴1的大小为1',但绘制了一个数字,我猜是因为代码需要一个二进制分类器来提供每个类概率的Nx2向量 (3认同)

ebarr..

33

这里的问题根本不清楚,但是如果你有一个数组true_positive_rate和一个数组false_positive_rate,那么绘制ROC曲线并得到AUC就像这样简单:

import matplotlib.pyplot as plt

import numpy as np

x = # false_positive_rate

y = # true_positive_rate

# This is the ROC curve

plt.plot(x,y)

plt.show()

# This is the AUC

auc = np.trapz(y,x)

如果代码中有FPR,TPR oneliners,那么这个答案会好得多. (3认同)

fpr,tpr,阈值= metrics.roc_curve(y_test,preds) (3认同)

ajayramesh..

27

AUC曲线使用matplotlib进行二进制分类

from sklearn import svm, datasets

from sklearn import metrics

from sklearn.linear_model import LogisticRegression

from sklearn.model_selection import train_test_split

from sklearn.datasets import load_breast_cancer

import matplotlib.pyplot as plt

加载乳腺癌数据集

breast_cancer = load_breast_cancer()

X = breast_cancer.data

y = breast_cancer.target

拆分数据集

X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.33, random_state=44)

模型

clf = LogisticRegression(penalty='l2', C=0.1)

clf.fit(X_train, y_train)

y_pred = clf.predict(X_test)

准确性

print("Accuracy", metrics.accuracy_score(y_test, y_pred))

AUC曲线

y_pred_proba = clf.predict_proba(X_test)[::,1]

fpr, tpr, _ = metrics.roc_curve(y_test, y_pred_proba)

auc = metrics.roc_auc_score(y_test, y_pred_proba)

plt.plot(fpr,tpr,label="data 1, auc="+str(auc))

plt.legend(loc=4)

plt.show()

小智..

12

这是一个python代码:

import matplotlib.pyplot as plt

import numpy as np

score = np.array([0.9, 0.8, 0.7, 0.6, 0.55, 0.54, 0.53, 0.52, 0.51, 0.505, 0.4, 0.39, 0.38, 0.37, 0.36, 0.35, 0.34, 0.33, 0.30, 0.1])

y = np.array([1,1,0, 1, 1, 1, 0, 0, 1, 0, 1,0, 1, 0, 0, 0, 1 , 0, 1, 0])

# false positive rate

fpr = []

# true positive rate

tpr = []

# Iterate thresholds from 0.0, 0.01, ... 1.0

thresholds = np.arange(0.0, 1.01, .01)

# get number of positive and negative examples in the dataset

P = sum(y)

N = len(y) - P

# iterate through all thresholds and determine fraction of true positives

# and false positives found at this threshold

for thresh in thresholds:

FP=0

TP=0

for i in range(len(score)):

if (score[i] > thresh):

if y[i] == 1:

TP = TP + 1

if y[i] == 0:

FP = FP + 1

fpr.append(FP/float(N))

tpr.append(TP/float(P))

plt.scatter(fpr, tpr)

plt.show()

更多参考

Max..

6

之前的答案假设您确实自己计算了TP/Sens.手动执行此操作是一个坏主意,通过计算很容易出错,而是使用库函数来完成所有这些操作.

scikit_lean中的plot_roc函数正是您所需要的:http://scikit-learn.org/stable/auto_examples/model_selection/plot_roc.html

代码的基本部分是:

for i in range(n_classes):

fpr[i], tpr[i], _ = roc_curve(y_test[:, i], y_score[:, i])

roc_auc[i] = auc(fpr[i], tpr[i])

Cherry Wu..

6

from sklearn import metrics

import numpy as np

import matplotlib.pyplot as plt

y_true = # true labels

y_probas = # predicted results

fpr, tpr, thresholds = metrics.roc_curve(y_true, y_probas, pos_label=0)

# Print ROC curve

plt.plot(fpr,tpr)

plt.show()

# Print AUC

auc = np.trapz(tpr,fpr)

print('AUC:', auc)

如何计算`y_true = #trical labels,y_probas = #prepected results`? (2认同)

如果您有基本事实,则y_true是您的基本事实(标签),y_probas是模型的预测结果 (2认同)

你可能感兴趣的:(python如何绘制roc曲线)