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

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

在机器学习中,分类问题是最常见的问题之一,其中建立机器学习模型来对目标变量的几个类别进行分类。然而,分类报告和混淆矩阵用于评估模型的性能并检查模型的错误。

在本文中,我们将讨论分类报告和混淆矩阵,它们是什么,我们如何使用它们,以及通过在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 classification_report, confusion_matrix

# Generating a random dataset with 200 rows
np.random.seed(0)
X = np.random.rand(200, 5)
y = np.random.randint(2, size=200)

# Split the dataset into training and test sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, 
random_state=42)

# Train the model
model = LogisticRegression()
model.fit(X_train, y_train)

# Make predictions on the test set
y_pred = model.predict(X_test)

from sklearn.metrics import accuracy_score

# Calculating the accuracy
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy:", accuracy)

# Calculating the classification report
c_report = classification_report(y_test, y_pred)
print("Classification Report:\n", c_report)

# Calculating the confusion matrix
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分数的平均值的度量。

结论

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

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程