我有一个类别背景(bg)= 0,信号(sig)= 1的二进制分类问题,为此我正在训练NN。为了进行监控,我正在尝试使用TensorFlow后端在Keras中实现自定义指标,该指标可以执行以下操作:

1)计算我的NN输出上的阈值,这将导致X的误报率(将bg分类为信号)(在这种情况下,X = 0.02,但可能是任意值)。

2)计算此阈值下的真实阳性率。

给定numpy数组y_true,y_pred,我将编写类似以下的函数:

def eff_at_2percent_metric(y_true, y_pred):
    #Find list of bg events
    bg_list = np.argwhere(y_true < 0.5)
    #Order by the NN output
    ordered_bg_predictions = np.flip(np.sort(y_pred[bg_list]),axis=0)
    #Find the threshold with 2% false positive rate
    threshold = ordered_bg_predictions[0.02*round(len(ordered_bg_list))]

    #Find list of signal events
    sig_list = np.argwhere(y_true > 0.5)
    #Order these by NN output
    ordered_sig_predictions = np.sort(y_pred[sig_list])
    #Find true positive rate with this threshold
    sig_eff = 1 - np.searchsorted(ordered_sig_predictions,threshold)/len(ordered_sig_predictions)

    return sig_eff


当然,这是行不通的,因为要实现自定义指标,y_true和y_pred应该是TensorFlow张量而不是numpy数组。有什么办法可以使它正常工作?

最佳答案

我认为有一个sensitivity at specificity度量标准,该度量标准是等效的(特异性为FRP减去1)。

关于python - 自定义TensorFlow指标:给定假阳性率时的真阳性率,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49244969/

10-11 02:20