使用 Python 计算分类报告和混淆矩阵

machine learningpythonserver side programming

简介

在机器学习中,分类问题是最普遍的问题之一,其中机器学习模型用于对目标变量的几个类别进行分类。但是,分类报告和混淆矩阵用于评估模型的性能并检查模型在哪里出错。

在本文中,我们将讨论分类报告和混淆矩阵,它们是什么,我们如何使用它们,以及通过在 Python 中计算相同的代码示例来解释它们。本文将帮助人们明确这些模型评估方法,并帮助人们在处理分类模型时使用这些方法评估模型。

在我们直接进入代码和解释之前,让我们先讨论一下分类报告和混淆矩阵以及它们背后的基本直觉。

什么是混淆指标?

分类中的混淆矩阵是一种表格或矩阵,根据目标变量的预测和实际类别包含多个值。

它主要包括真阳性、真阴性、假阳性和假阴性。

让我们一一讨论这些类别。

真阳性:真阳性基本上意味着模型已被真实预测,并且预测值为正。基本上,这是模型没有犯任何错误并正确预测正值的情况。

真负:真负意味着模型对负值的预测正确。这是模型没有犯任何错误并实际预测负值的负值的情况。

假正:这是模型犯错误的情况。当实际值为负值,而模型预测为正值时,这种情况称为假正值。这些错误也称为 1 类错误。

假阴性:实际值为正,而模型错误地预测值为负的情况。这些错误也称为 2 类错误。

这些值通常根据模型预测的内容和实际观察结果以不同方式表示模型的性能。使用这些值可以进行各种测量,这可以帮助我们以不同的方式确定模型的性能。

主要使用这些值来计算准确度、精确度、召回率和 F Beta 分数。让我们一一讨论它们。

准确度

它是模型对所有预测的正确预测的度量。它是通过计算模型的真实预测与模型所做的总预测之比来计算的。

准确率 = TP + TN / TP + TN + FP + FN

精确度

精确度是所有预测的正值中正确预测的正值的度量。

精确度 = TP / TP + FP

召回率

召回率是实际正值中正确预测的正值的度量。它也被称为真实阳性率。

召回率 = TP / TP + FN

F beta 分数

F beta 分数是精确度和召回率的度量,两者都有一定比例。这里,精确度和召回率保持平衡,beta参数用于赋予精确度或召回率更大的权重。

F Beta分数=(1+Beta^2)精确度*召回率/(Beta)^2精确度+召回率

什么是分类报告?

分类报告,顾名思义,是一种报告,其中包括模型的各种参数,这些参数基本上是目标变量每个类别的评估指标。

分类报告通常包括四个参数,精确度、召回率、F1分数和支持度。

如上所述,精确度和召回率是模型正确预测的正值占所有正预测值的比率,召回率是正确预测的正值占所有实际正值的指标。

F1分数是F beta分数,其中beta取1。这里beta取1;精度和调用率将获得相同的权重。

支持度是指示目标变量中每个类别实例的参数。用简单的语言来说,它是目标变量中特定类别的发生度量或观察次数。

计算分类报告和混淆矩阵的示例

现在让我们尝试在 Python 的帮助下通过获取数据集并在其上训练模型来计算混淆矩阵和分类报告。

在这里,我们将生成一个包含 200 个观测值的虚拟数据集,它将包含一个具有 0 和 1 个类的目标变量,这基本上是一个分类问题。

示例

import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import class_report,fusion_matrix

# 生成一个包含 200 行的随机数据集
np.random.seed(0)
X = np.random.rand(200, 5)
y = np.random.randint(2, size=200)

# 将数据集拆分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3,
random_state=42)

# 训练模型
model = LogisticRegression()
model.fit(X_train, y_train)

# 对测试进行预测设置
y_pred = model.predict(X_test)

from sklearn.metrics import accuracy_score

# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy:", accuracy)

# 计算分类报告
c_report = classes_report(y_test, y_pred)
print("Classification Report:\n", c_report)

# 计算混淆矩阵
con_m = confusion_matrix(y_test, y_pred)
print("Confusion Matrix:\n", con_m)

输出

Accuracy: 0.6
Classification Report:
            precision   recall  f1-score   support

         0      0.62     0.73     0.67      33
         1      0.57     0.44     0.50      27

   accuracy                     0.60      60
   macro avg      0.59     0.59     0.58      60
weighted avg      0.60     0.60     0.59      60

Confusion Matrix:
 [[24  9]
 [15 12]]

上述代码返回三个结果,即模型的准确率、混淆矩阵和分类报告。

可以借助准确率、精确率、召回率和 F1 分数以及分类报告中包含的微观和宏观平均值来很好地评估模型,这是对目标变量不同类别的精确率、召回率和 f1 分数的平均值的度量。

结论

在本文中,我们讨论了分类报告和混淆矩阵,它们是什么,如何使用它们,以及它们的重要性是什么,讨论了与它们相关的所有术语以及计算它们的代码示例。本文将帮助人们很好地理解这些矩阵并在必要时使用它们。


相关文章