python sklearn包——混淆矩阵、分类报告等自动生成

1. sklearn包简介

Scikit-Learn,简称 sklearn,是一个致力于构建 Python 语言的开源机器学习工具。 它旨在与 Python 数值和科学计算工具包NumPy 和 SciPy 以及数据可视化工具包matplotlib 协同工作,实现机器学习引擎的效率、易用性和自适应性。

sklearn 中包含了丰富的机器学习算法、数据预处理方法、数据可视化方法等,可以进行全方位的机器学习应用,包括分类、聚类、回归等方面。

2. 混淆矩阵

2.1 定义

混淆矩阵(Confusion Matrix)是在统计学中常用的一种分类错误率分析工具,用于评估分类模型的质量,并且可以展示出分类模型常犯的错误类型。

混淆矩阵中的每一行代表真实的类别,每一列代表预测的类别,每个单元格中的数值表示样本数。 混淆矩阵的对角线表示预测正确的样本数量,非对角线上的数表示预测错误的情况。混淆矩阵的具体值可以用来计算模型的准确率、召回率等。

2.2 代码示例

from sklearn.metrics import confusion_matrix

import numpy as np

y_true = ["cat", "dog", "cat", "cat", "dog"]

y_pred = ["dog", "dog", "cat", "cat", "dog"]

labels = np.unique(y_true)

matrix = confusion_matrix(y_true, y_pred, labels=labels)

print(matrix)

上述代码中,我们使用了 sklearn.metrics 模块的 confusion_matrix 方法生成了一个混淆矩阵。该混淆矩阵矩阵使用了标签数组 y_true 和预测标签数组 y_pred,labels 参数指定样本的类别名称,即分类列表。

2.3 输出结果

[[2 1]

[1 1]]

上述结果表示矩阵 [[2,1],[1,1]] 中,(0,0) 位置的数字 2 表示分类为 cat, 且实际标签也为 cat 的样本数为 2;(0,1) 位置的数字 1 表示分类为 dog, 但实际标签为 cat 的样本数为 1;同理,(1,0) 表示实际为 dog,但分类为 cat 的样本数为 1, (1,1) 表示样本既被分类为 dog,也是 dog。

3. 分类报告

3.1 定义

分类报告(Classification Report)用于对分类模型的评估结果进行综合分析,包括了精确率、召回率、F1_score 和支持度。

Precision(精确率),即正预测的标签中实际正确的比例。

Recall(召回率),即实际标签中被正确预测的比例,也称为真正类率。

F1_score 具体描述了精确率和召回率之间的权衡,它通过创建精确率和召回率的加权平衡来给出一个更全面的指标。F1_score 等于精确率和召回率的调和均值,其中F1=2*(precision*recall)/(precision+recall)

Support(支持度)是指在样本数据集上每一个类别的数量(样本量),它是分类的准确度与召回率的权衡结果,因为当一个类别的支持度很小,我们可能会通过从这个类别排除一些关键特征来提高它的精度及召回率。

3.2 代码示例

from sklearn.metrics import classification_report

y_true = ["cat", "dog", "cat", "cat", "dog"]

y_pred = ["dog", "dog", "cat", "cat", "dog"]

cls_report = classification_report(y_true, y_pred)

print(cls_report)

3.3 输出结果

              precision    recall  f1-score   support

cat 0.67 0.67 0.67 3

dog 0.50 0.50 0.50 2

accuracy 0.60 5

macro avg 0.58 0.58 0.58 5

weighted avg 0.60 0.60 0.60 5

上述结果中,每个类别都有自己的统计信息。比如,cat 类的 precision 是 0.67,意味着其中有 67% 的 cat 被正确预测出来;其 recall 是 0.67,意味着在样本中的 cat 被正确预测收率为 67% 。

它们的调和平均值是 F1-score,从公式 F1=2*(precision*recall)/(precision+recall)可以得到 cat 的 F1_score 为 0.67。weighted avg 显示了有多少样本被预测到了正确的类别,当然,如果样本类别分布不平衡,考虑 macro avg 。

4. 总结

本文介绍了在 Python 中使用 sklearn 包生成混淆矩阵和分类报告的方法,同时分别定义了混淆矩阵和分类报告,并对分类报告中的几个指标进行了解释。混淆矩阵和分类报告可以在评估分类器性能时非常有用,建议读者在工作中参考本文内容并使用自己的数据集进行尝试!

后端开发标签