You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

二分类器代码中True Negative Rate(TNR)计算方法及变量含义解析

理解二分类器变量含义与TNR计算方法

首先,先帮你拆解代码里每个变量的含义(结合二分类场景,这里0代表良性样本(阴性类),1代表广告/恶意样本(阳性类)):

  • benign_guesses:分类器预测为**良性(类别0)**的样本总数量。每遍历到一个预测值为0的样本,这个变量就加1。
  • benign_rate:分类器正确预测为良性的样本数,也就是统计学里的真阴性(TN, True Negative)——真实标签是0,且预测结果也为0的样本数。
  • ad_guesses:分类器预测为**广告/恶意(类别1)**的样本总数量。每遍历到一个预测值为1的样本,这个变量就加1。
  • ad_rate:分类器正确预测为广告/恶意的样本数,也就是统计学里的真阳性(TP, True Positive)——真实标签是1,且预测结果也为1的样本数。

关于TNR(真阴性率)的正确计算

你猜测的公式TNR = 2*benign_rate/len(y_hat)是错误的,这个结果只是在你的测试样本数刚好为2时的巧合,不具备通用性。

TNR的定义

真阴性率是真实为阴性(良性)的样本中,被分类器正确识别为阴性的比例,公式为:

TNR = 真阴性数(TN) / 真实阴性样本总数

其中真实阴性样本总数是sum(y_test == 0)(即所有真实标签为0的样本数量)。

结合你的代码计算TNR

用代码里的变量代入的话,正确的计算方式是:

# 先计算真实阴性样本总数
total_benign = sum(y_test == 0)
# 计算TNR,注意处理total_benign为0的情况(避免除以0)
TNR = benign_rate / total_benign if total_benign != 0 else 0.0

原代码里的错误点补充

你提供的代码里还有几个明显的计算错误:

  1. TP = 2*ad_rate/len(y_hat):TP就是ad_rate本身(真阳性的数量),不需要乘以2再除以样本数,这是把TP和TPR(真阳性率)混淆了。
  2. TPR = 2 * ad_rate / len(y_hat):TPR(真阳性率/召回率)的正确公式是TP / 真实阳性样本总数,也就是ad_rate / sum(y_test == 1),原代码的计算方式完全错误。
  3. recall = round(100*TPR, 2):这里还出现了变量顺序错误——先调用了TPR,但代码里是在这之后才定义TPR的,会导致运行报错。

内容的提问来源于stack exchange,提问作者j35t3r

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 19:47:26