Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python度量ROC曲线:直方图的负预测值?_Python_Scikit Learn_Metrics_Roc - Fatal编程技术网

Python度量ROC曲线:直方图的负预测值?

Python度量ROC曲线:直方图的负预测值?,python,scikit-learn,metrics,roc,Python,Scikit Learn,Metrics,Roc,我有一个由matplotlib生成的直方图,我一直在使用sklearn metrics来计算精确召回曲线。这是一个显示直方图的阳性预测值(PPV)的曲线图,该值与召回率相关。这是柱状图: 生成的曲线采用以下形式: 我认为负预测值(NPV)是PPV的倒数,所以我的猜测是简单地做NPV=1-PPV,但结果不太理想。到目前为止,我一直在使用sklearn模块中度量库中的函数来生成ROC曲线和精度召回曲线。但到目前为止,我还没有发现任何具体的指标曲线可以像负预测值那样起作用。这是我用来从直方图生成曲

我有一个由matplotlib生成的直方图,我一直在使用sklearn metrics来计算精确召回曲线。这是一个显示直方图的阳性预测值(PPV)的曲线图,该值与召回率相关。这是柱状图:

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

我认为负预测值(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

尽管从绘图中很难判断精度和召回率,但我们可以很容易地修改代码以计算您的要求

从精度来看(也称为阳性预测值或PPV)是真阳性数除以预测为阳性的样本数(即真阳性+假阳性),而阴性预测值或NPV是真阴性数除以预测为阴性的样本数。因此,我们可以通过正负互换来计算净现值。代码:

将numpy导入为np
将matplotlib.mlab导入为mlab
将matplotlib.pyplot作为plt导入
进口派拉布
从SKM学习导入度量
data1=np.loadtxt('1.txt')
data2=np.loadtxt('2.txt')
x=np.转置(数据1)[1]
y=np.转置(数据2)[1]
背景=(1+y)/2
信号=(1+x)/2
分类器_输出=np.连接([背景,信号])
true\u value=np.concatenate([np.zero\u like(background,dtype=int),np.one\u like(signal,dtype=int)])
精度、召回率、阈值=度量。精度、召回率曲线(真值、分类器输出)
npv、fnr、inv\u thresh=度量、精度\u召回\u曲线(1-真值,1-分类器\u输出)
plt.绘图(召回率、精度)
情节图(召回,净现值[:-1])
plt.show()
请注意,我们需要反转
npv
,以匹配
精度的顺序。这是因为
metrics.precision\u recall\u curve
根据阈值(即输入分数)对输出进行排序。因为我们使用了一次
classifier\u output
和一次
1-classifier\u output
作为输入,所以顺序相反。如果要检查此项,请尝试绘制
精度
净现值
w.r.t.
阈值
库存阈值


免责声明:我无法尝试我提供的代码,因此可能需要进行更多的改进

尽管从绘图中很难判断您的精度和召回率,但我们可以轻松修改您的代码以计算您的要求

从精度来看(也称为阳性预测值或PPV)是真阳性数除以预测为阳性的样本数(即真阳性+假阳性),而阴性预测值或NPV是真阴性数除以预测为阴性的样本数。因此,我们可以通过正负互换来计算净现值。代码:

将numpy导入为np
将matplotlib.mlab导入为mlab
将matplotlib.pyplot作为plt导入
进口派拉布
从SKM学习导入度量
data1=np.loadtxt('1.txt')
data2=np.loadtxt('2.txt')
x=np.转置(数据1)[1]
y=np.转置(数据2)[1]
背景=(1+y)/2
信号=(1+x)/2
分类器_输出=np.连接([背景,信号])
true\u value=np.concatenate([np.zero\u like(background,dtype=int),np.one\u like(signal,dtype=int)])
精度、召回率、阈值=度量。精度、召回率曲线(真值、分类器输出)
npv、fnr、inv\u thresh=度量、精度\u召回\u曲线(1-真值,1-分类器\u输出)
plt.绘图(召回率、精度)
情节图(召回,净现值[:-1])
plt.show()
请注意,我们需要反转
npv
,以匹配
精度的顺序。这是因为
metrics.precision\u recall\u curve
根据阈值(即输入分数)对输出进行排序。因为我们使用了一次
classifier\u output
和一次
1-classifier\u output
作为输入,所以顺序相反。如果要检查此项,请尝试绘制
精度
净现值
w.r.t.
阈值
库存阈值

免责声明:我无法尝试我提供的代码,因此可能需要进行更多的改进