Python指标ROC曲线:直方图的负预测值?

问题描述 投票:1回答:1

我有一个由matplotlib生成的直方图,并且我一直在使用sklearn度量标准来计算精确调用曲线。这是一个曲线图,显示了与召回相关的直方图的正预测值(PPV)。这是直方图:enter image description here

生成的曲线采用以下形式:

enter image description here

我以为负预测值(NPV)是PPV的倒数,所以我的猜测是简单地将NPV设为1-PPV,但效果不佳。到目前为止,我一直在使用sklearn模块的指标库中的函数来生成ROC曲线和精度调用曲线。但是到目前为止,我还没有发现指标中的任何特定曲线,这些曲线可以完成负预测值之类的工作。这是我一直用来从直方图生成曲线的源代码:


import numpy as np
import matplotlib.mlab as mlab
import matplotlib.pyplot as plt
import pylab
from sklearn import metrics

data1 = np.loadtxt('1.txt') 
data2 = np.loadtxt('2.txt') 
x = np.transpose(data1)[1]
y = np.transpose(data2)[1]

background =  (1 + y)/2
signal =  (1 + x)/2

classifier_output = np.concatenate([background,signal])
true_value = np.concatenate([np.zeros_like(background, dtype=int), np.ones_like(signal, dtype=int)])

precision, recall, threshold = metrics.precision_recall_curve(true_value, classifier_output)
plt.plot(recall, precision)
plt.show()

度量标准中是否还有其他方法或一般方式来计算此直方图的NPV?

python scikit-learn metrics roc
1个回答
0
投票

虽然很难从您的绘图中分辨出适合您的精度和召回率,但我们可以轻松地修改您的代码以计算您的要求。

wiki开始,精度(aka阳性预测值或PPV)是真实阳性的数量除以预测为阳性的样本数量(即,真实阳性+假阳性),而阴性预测值或NPV是数量真实阴性数除以预测为阴性的样本数。因此,我们可以通过将正负互换来计算NPV。在代码中:

import numpy as np
import matplotlib.mlab as mlab
import matplotlib.pyplot as plt
import pylab
from sklearn import metrics

data1 = np.loadtxt('1.txt') 
data2 = np.loadtxt('2.txt') 
x = np.transpose(data1)[1]
y = np.transpose(data2)[1]

background =  (1 + y)/2
signal =  (1 + x)/2

classifier_output = np.concatenate([background,signal])
true_value = np.concatenate([np.zeros_like(background, dtype=int), np.ones_like(signal, dtype=int)])

precision, recall, threshold = metrics.precision_recall_curve(true_value, classifier_output)
npv, fnr, inv_thresh = metrics.precision_recall_curve(1 - true_value, 1 - classifier_output)
plt.plot(recall, precision)
plt.plot(recall, npv[::-1])
plt.show()

注意,为了匹配npv的顺序,我们需要反转precision。这是由于metrics.precision_recall_curve按阈值(即输入分数)对输出进行排序的事实。因为我们使用了一次classifier_output和一次1 - classifier_output作为输入,所以顺序相反。如果要检查这一点,请尝试绘制precisionnpv w.r.t.。 thresholdinv_thresh

免责声明:我无法尝试提供的代码,因此可能需要进一步完善。

© www.soinside.com 2019 - 2024. All rights reserved.