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