我有一个类别背景(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/