Python 无TP和FPs时ROC-AUC得分为1

Python 无TP和FPs时ROC-AUC得分为1,python,scikit-learn,Python,Scikit Learn,我试图根据以下输入df1和ROC_输入计算指标和ROC-AUC分数。 当所有四种度量类型中都有一些值时,下面的代码可以正常工作,但如果某些度量值为零,我会遇到零除法问题或ROC-AUC分数为1。我应该如何解决这个问题 df1 代码 roc_输入 下载数据 代码 你想要什么样的解决方案?如果tp+fp为零,并且被tp+fp除,则会出现被零除的错误。而AUC将毫无意义。看起来问题要么在采样中,要么在数据中。你是如何得到一个没有正面案例的数据集的?我有一些不应该有正面预测的案例,这就是其中之一。我希望

我试图根据以下输入df1和ROC_输入计算指标和ROC-AUC分数。 当所有四种度量类型中都有一些值时,下面的代码可以正常工作,但如果某些度量值为零,我会遇到零除法问题或ROC-AUC分数为1。我应该如何解决这个问题

df1

代码

roc_输入

下载数据

代码


你想要什么样的解决方案?如果tp+fp为零,并且被tp+fp除,则会出现被零除的错误。而AUC将毫无意义。看起来问题要么在采样中,要么在数据中。你是如何得到一个没有正面案例的数据集的?我有一些不应该有正面预测的案例,这就是其中之一。我希望将序列号/Sp/P/R打印为零,而不是出现错误,并将AUC打印为零。使用上面的代码,我得到了一个奇怪的AUC值1。如果你只想打印出一个0,那么做一些类似于If(tp+fp==0):print(无论你想打印什么)。但是为什么要0?正确的值不是0,打印0可能会产生误导。AUC是一而不是零,这只是一个设计决策。当然,你可以随心所欲地打印出来。但我强烈怀疑你在某个地方有概念上的误解。如果您知道数据集中的所有行都有负标签,那么对它们运行预测模型有什么意义?你所拥有的是一个总是预测负面情况的模型,这不是一个很好的模型。如果不向我们展示你用来训练模型的代码,我们就无法解释为什么会发生这种情况。在这种情况下,我应该打印NA而不是0?最后一条评论是,这些数据集有一个负面标签,模型不起作用。我需要这个来评估有多少数据集足以计算ROC分数。目的不是要有一个完美的分数,而是要看是否有可能计算出它。这有意义吗?
TP= 0
FN= 673
TN= 826
FP= 0
    def metrics(self, tp, fp, tn, fn):
        sensitivity = tp / (tp+fn),
        specificity = tn / (tn+fp),
        precision = tp / (tp+fp),
        recall = tn / (tn+fn),
        return sensitivity, specificity, precision, recall
    def roc_plot(self, roc_input):
        n_classes = 2
        y_test = np.array(roc_input['y_test'], dtype=int)
        y_score = np.array(roc_input['y_score'], dtype=int)
        plt.figure(figsize=(5,5))
        fpr, tpr, thresholds = roc_curve(y_test, y_score)
        auc1 = auc(fpr,tpr)
        plt.plot(fpr, tpr,label='AUC = %0.2f)' % auc1, color='red', linewidth=2)
        plt.plot([0, 1], [0, 1], 'k--', lw=1)
        plt.xlim([0.0, 1.0])
        plt.ylim([0.0, 1.05])
        plt.xlabel('False Positive Rate')  
        plt.ylabel('True Positive Rate') 
        plt.title(myphd_id) 
        plt.grid(True)
        plt.legend(loc="lower right")
        plt.tight_layout()
        return auc1