详解TP TN FP FN

一、简介

在机器学习领域中,模型的预测结果通常被分为四类:True Positive(TP)、True Negative(TN)、False Positive(FP)、False Negative(FN),简称TP,TN,FP,FN,这四个指标也一直是模型评估中重要的指标之一。下面我们将从定义、计算、评估指标、实际应用等多个方面对TP,TN,FP,FN进行详细阐述。

二、定义

TP表示实际为正样本且被模型预测为正样本的样本数;TN表示实际为负样本且被模型预测为负样本的样本数;FP表示实际为负样本且被模型预测为正样本的样本数;FN表示实际为正样本且被模型预测为负样本的样本数。

def cal_tp_tn_fp_fn(y_true, y_pred):
    tp = tn = fp = fn = 0
    for i in range(len(y_true)):
        if y_true[i] == 1 and y_pred[i] == 1:
            tp += 1
        elif y_true[i] == 0 and y_pred[i] == 0:
            tn += 1
        elif y_true[i] == 0 and y_pred[i] == 1:
            fp += 1
        elif y_true[i] == 1 and y_pred[i] == 0:
            fn += 1
    return tp, tn, fp, fn

三、计算

除了直接计算之外,TP,TN,FP,FN还可以通过其他指标计算得出。在分类模型的模型评估中,常用的指标包括准确率(Accuracy)、精确率(Precision)、召回率(Recall)、F1-score等,这些指标都与TP,TN,FP,FN有关。

TPR(True Positive Rate)、FPR(False Positive Rate):TPR是TP与所有实际正样本的比例,也就是召回率(Recall);FPR是FP与所有实际负样本的比例。

Accuracy=(TP+TN)/(TP+TN+FP+FN)
Precision=TP/(TP+FP)
Recall=TP/(TP+FN)
F1-score=2*Precision*Recall/(Precision+Recall)
TPR=TP/(TP+FN)
FPR=FP/(FP+TN)

def cal_accuracy(y_true, y_pred):
    tp, tn, fp, fn = cal_tp_tn_fp_fn(y_true, y_pred)
    acc = (tp+tn)/(tp+tn+fp+fn)
    return acc

def cal_precision(y_true, y_pred):
    tp, tn, fp, fn = cal_tp_tn_fp_fn(y_true, y_pred)
    precision = tp/(tp+fp)
    return precision

def cal_recall(y_true, y_pred):
    tp, tn, fp, fn = cal_tp_tn_fp_fn(y_true, y_pred)
    recall = tp/(tp+fn)
    return recall

def cal_f1score(y_true, y_pred):
    precision = cal_precision(y_true, y_pred)
    recall = cal_recall(y_true, y_pred)
    f1 = 2*precision*recall/(precision+recall)
    return f1

def cal_tpr(y_true, y_pred):
    tp, tn, fp, fn = cal_tp_tn_fp_fn(y_true, y_pred)
    tpr = tp/(tp+fn)
    return tpr

def cal_fpr(y_true, y_pred):
    tp, tn, fp, fn = cal_tp_tn_fp_fn(y_true, y_pred)
    fpr = fp/(fp+tn)
    return fpr

四、评估指标

在实际应用中,我们常用这些评估指标来评估模型的性能。通常情况下,我们会关注哪些评估指标呢?

当我们关注模型将正样本预测为正样本的表现时,我们会关注精确率(Precision),当我们关注模型将所有实际正样本预测为正样本的表现时,我们会关注召回率(Recall),当我们关注模型的整体效果时,我们会关注F1-score和准确率(Accuracy)。

五、实际应用

下面,我们可以通过如下的代码来演示应用。

from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score

X, y = make_classification(n_samples=1000, n_features=20, n_informative=10, n_classes=2, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# 训练并预测
lr = LogisticRegression()
lr.fit(X_train, y_train)
y_pred = lr.predict(X_test)
# 计算各项指标
acc = accuracy_score(y_test, y_pred)
precision = precision_score(y_test, y_pred)
recall = recall_score(y_test, y_pred)
f1 = f1_score(y_test, y_pred)
print('Accuracy:', acc)
print('Precision:', precision)
print('Recall:', recall)
print('F1-score:', f1)

六、总结

TP,TN,FP,FN是评估分类模型性能的四个重要指标,除了直接计算之外,还可以通过其他指标计算得出,如准确率、精确率、召回率和F1-score,这些指标在实际应用中经常被应用。在使用的时候,我们需要对每个指标有深刻的认识,选择最适合我们模型的评估指标。

原创文章,作者:CHKA,如若转载,请注明出处:https://www.506064.com/n/131003.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
CHKACHKA
上一篇 2024-10-03 23:42
下一篇 2024-10-03 23:42

相关推荐

  • 神经网络代码详解

    神经网络作为一种人工智能技术,被广泛应用于语音识别、图像识别、自然语言处理等领域。而神经网络的模型编写,离不开代码。本文将从多个方面详细阐述神经网络模型编写的代码技术。 一、神经网…

    编程 2025-04-25
  • Linux sync详解

    一、sync概述 sync是Linux中一个非常重要的命令,它可以将文件系统缓存中的内容,强制写入磁盘中。在执行sync之前,所有的文件系统更新将不会立即写入磁盘,而是先缓存在内存…

    编程 2025-04-25
  • 详解eclipse设置

    一、安装与基础设置 1、下载eclipse并进行安装。 2、打开eclipse,选择对应的工作空间路径。 File -> Switch Workspace -> [选择…

    编程 2025-04-25
  • git config user.name的详解

    一、为什么要使用git config user.name? git是一个非常流行的分布式版本控制系统,很多程序员都会用到它。在使用git commit提交代码时,需要记录commi…

    编程 2025-04-25
  • Python安装OS库详解

    一、OS简介 OS库是Python标准库的一部分,它提供了跨平台的操作系统功能,使得Python可以进行文件操作、进程管理、环境变量读取等系统级操作。 OS库中包含了大量的文件和目…

    编程 2025-04-25
  • Python输入输出详解

    一、文件读写 Python中文件的读写操作是必不可少的基本技能之一。读写文件分别使用open()函数中的’r’和’w’参数,读取文件…

    编程 2025-04-25
  • Java BigDecimal 精度详解

    一、基础概念 Java BigDecimal 是一个用于高精度计算的类。普通的 double 或 float 类型只能精确表示有限的数字,而对于需要高精度计算的场景,BigDeci…

    编程 2025-04-25
  • Linux修改文件名命令详解

    在Linux系统中,修改文件名是一个很常见的操作。Linux提供了多种方式来修改文件名,这篇文章将介绍Linux修改文件名的详细操作。 一、mv命令 mv命令是Linux下的常用命…

    编程 2025-04-25
  • MPU6050工作原理详解

    一、什么是MPU6050 MPU6050是一种六轴惯性传感器,能够同时测量加速度和角速度。它由三个传感器组成:一个三轴加速度计和一个三轴陀螺仪。这个组合提供了非常精细的姿态解算,其…

    编程 2025-04-25
  • nginx与apache应用开发详解

    一、概述 nginx和apache都是常见的web服务器。nginx是一个高性能的反向代理web服务器,将负载均衡和缓存集成在了一起,可以动静分离。apache是一个可扩展的web…

    编程 2025-04-25

发表回复

登录后才能评论