tpr和fpr含义及其具体计算方法见下列代码段:
def calculate_accuracy(threshold, dist, actual_issame):
predict_issame = np.less(dist, threshold)
tp = np.sum(np.logical_and(predict_issame, actual_issame))
fp = np.sum(np.logical_and(predict_issame, np.logical_not(actual_issame)))
tn = np.sum(np.logical_and(np.logical_not(predict_issame), np.logical_not(actual_issame)))
fn = np.sum(np.logical_and(np.logical_not(predict_issame), actual_issame))
tpr = 0 if (tp+fn == 0) else float(tp) / float(tp+fn) # 正确预测的正样本占原始样本中正类的概率
fpr = 0 if (fp+tn == 0) else float(fp) / float(fp+tn) # 错误预测的正样本占原始样本中负类的概率
acc = float(tp+tn)/dist.size
return tpr, fpr, acc
val和far含义及其具体计算方法见下列代码段:
def calculate_val_far(threshold, dist, actual_issame):
predict_issame = np.less(dist, threshold)
true_accept = np.sum(np.logical_and(predict_issame, actual_issame))
false_accept = np.sum(np.logical_and(predict_issame, np.logical_not(actual_issame)))
n_same = np.sum(actual_issame)
n_diff = np.sum(np.logical_not(actual_issame))
val = float(true_accept) / float(n_same) # 正确预测为正类的样本数占原始样本中正类样本的数量
far = float(false_accept) / float(n_diff) # 错误预测为正类的样本数占原始样本中负类样本的数量
return val, far