在Python中计算分类报告和混淆矩阵
介绍
在机器学习中,分类问题是最常见的难题之一,其中构建机器学习模型是为了对目标变量的多个类别进行分类。但是,为了评估模型的性能并检查模型在哪里出错,需要用到分类报告和混淆矩阵。
在本文中,我们将讨论分类报告和混淆矩阵,它们是什么,我们如何使用它们,以及它们的解释,方法是在Python中计算相同的代码示例。本文将帮助读者了解这些模型评估方法,并帮助读者在处理分类模型时使用相同的评估方法。
在我们直接进入代码和解释之前,让我们先讨论一下分类报告和混淆矩阵以及它们背后的基本直觉。
什么是混淆矩阵?
在分类中,混淆矩阵是一种表格或矩阵,它根据目标变量的预测类别和实际类别包含多个值。
它主要包括真阳性、真阴性、假阳性、假阴性。
让我们逐一讨论这些类别。
**真阳性 (True Positive)**:真阳性基本上意味着模型的预测是正确的,并且预测值为正。基本上,这是模型没有犯任何错误并正确预测正值的情况。
**真阴性 (True Negative)**:真阴性意味着模型对负值的预测是正确的。这是模型没有犯任何错误并且实际上对负例预测为负值的情况。
**假阳性 (False Positive)**:这是模型出错的情况。当实际值为负而模型预测为正时,这种情况称为假阳性值。这些错误也称为第一类错误。
**假阴性 (False Negative)**:这是实际值为正而模型错误地预测值为负的情况。这些错误也称为第二类错误。
这些值是通常以不同方式表示模型性能的值之一,其基础是模型预测的内容以及实际观察结果。使用这些值,可以进行各种度量,这可以帮助我们以不同方式确定模型的性能。
主要使用这些值计算准确率、精确率、召回率和F1分数。让我们逐一讨论它们。
准确率
它是模型正确预测相对于模型所做的所有预测的度量。它是通过将模型的正确预测与模型所做的总预测之比来计算的。
准确率 = (TP + TN) / (TP + TN + FP + FN)
精确率
精确率是对所有预测为正的值中正确预测的正值的度量。
精确率 = TP / (TP + FP)
召回率
召回率是对实际正值中正确预测的正值的度量。它也称为真阳性率。
召回率 = TP / (TP + FN)
F1分数
F1分数是精确率和召回率的某种比例的度量。在这里,精确率和召回率之间保持平衡,并使用 beta 参数为精确率或召回率赋予更大的权重。
F1分数 = (1 + beta²) * (精确率 * 召回率) / (beta² * 精确率 + 召回率)
什么是分类报告?
顾名思义,分类报告是一种报告,其中包含模型的各种参数,这些参数基本上是目标变量每个类别的评估指标。
分类报告通常包括四个参数:精确率、召回率、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 分数平均值的度量。
结论
在本文中,我们讨论了分类报告和混淆矩阵,它们是什么,如何使用它们以及它们的重要性,并讨论了与它们相关的术语以及计算相同的代码示例。本文将帮助读者更好地理解这些指标并在需要时使用它们。