美文网首页
分类模型性能可视化等分析

分类模型性能可视化等分析

作者: 逍遥_yjz | 来源:发表于2023-08-07 16:07 被阅读0次

1. 混淆矩阵

混淆矩阵(Confusion Matrix)是用于评估分类模型性能的一种表格形式的工具。它对模型的预测结果与实际标签之间的关系进行了可视化展示,帮助我们了解模型在不同类别上的分类情况。

混淆矩阵通常是一个2x2的矩阵,对于二分类问题,它包含以下四个指标:

  • 真正例(True Positive,TP):模型正确地预测为正例的样本数量。
  • 真反例(True Negative,TN):模型正确地预测为反例的样本数量。
  • 假正例(False Positive,FP):模型错误地预测为正例的样本数量。
  • 假反例(False Negative,FN):模型错误地预测为反例的样本数量。

混淆矩阵的示例:

             预测正例    预测反例
实际正例      TP           FN
实际反例      FP           TN

通过混淆矩阵,我们可以计算出一些分类指标,包括:

  • 精确度(Precision):表示模型预测为正例的样本中,真正例的比例,计算公式为 TP / (TP + FP)。
  • 召回率(Recall):表示模型正确预测为正例的样本占所有实际正例样本的比例,计算公式为 TP / (TP + FN)。
  • F1分数(F1 Score):综合考虑了精确度和召回率,是二者的调和平均值,计算公式为 2 * (精确度 * 召回率) / (精确度 + 召回率)。

混淆矩阵提供了对模型分类性能的详细了解,帮助我们判断模型在不同类别上的表现,并进一步优化模型。

2. Demo

如果有多个模型预测多个预测值,可以考虑使用多个混淆矩阵或分类报告进行可视化比较。每个模型的混淆矩阵和分类报告可以分别绘制和输出,以便进行比较和分析。

以下是一种方法,使用for循环在一个图表中绘制多个模型的混淆矩阵:

import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.metrics import confusion_matrix

models = [model1, model2, model3]  # 假设有三个模型
y_true = test_labels  # 真实值

fig, axes = plt.subplots(nrows=1, ncols=len(models), figsize=(12, 4))

for i, model in enumerate(models):
    y_pred = model.predict(test_data)  # 模型预测值
    confusion = confusion_matrix(y_true, y_pred)
    sns.heatmap(confusion, cmap='Blues', annot=True, fmt='d', ax=axes[i])
    axes[i].set_xlabel('Predicted labels')
    axes[i].set_ylabel('True labels')
    axes[i].set_title('Model {}'.format(i+1))

plt.tight_layout()
plt.show()

这段代码假定有三个模型(model1model2model3),并使用plt.subplots()创建了一个包含三个子图的图表。然后,使用for循环迭代每个模型,并在每个子图中绘制混淆矩阵。最后,使用plt.tight_layout()函数调整子图的布局,并显示图表。

同样,您可以使用for循环输出每个模型的分类报告:

from sklearn.metrics import classification_report

models = [model1, model2, model3]  # 假设有三个模型
y_true = test_labels  # 真实值

for i, model in enumerate(models):
    y_pred = model.predict(test_data)  # 模型预测值
    classification_rep = classification_report(y_true, y_pred)
    print('Model {}:\n{}'.format(i+1, classification_rep))
    print('----------------------')

在这段代码中,我们使用for循环遍历每个模型,并在每次迭代中计算模型的分类报告。然后,通过打印输出来显示每个模型的分类报告。

根据具体情况,您可以调整代码以适应多个模型和多个预测值的情况。

3. 评估指标

# 这里我使用四种模型预测的结果,利用指标评估。
0
Model GB_pridict:
              precision    recall  f1-score   support

           0       0.85      0.94      0.89        31
           1       0.60      0.38      0.46         8

    accuracy                           0.82        39
   macro avg       0.73      0.66      0.68        39
weighted avg       0.80      0.82      0.80        39

----------------------
1
Model svm_pridict:
              precision    recall  f1-score   support

           0       0.79      1.00      0.89        31
           1       0.00      0.00      0.00         8

    accuracy                           0.79        39
   macro avg       0.40      0.50      0.44        39
weighted avg       0.63      0.79      0.70        39

----------------------
2
Model RandomForest_pridict:
              precision    recall  f1-score   support

           0       0.86      0.97      0.91        31
           1       0.75      0.38      0.50         8

    accuracy                           0.85        39
   macro avg       0.80      0.67      0.70        39
weighted avg       0.84      0.85      0.83        39

----------------------
3
Model LR_pridict:
              precision    recall  f1-score   support

           0       0.86      0.97      0.91        31
           1       0.75      0.38      0.50         8

    accuracy                           0.85        39
   macro avg       0.80      0.67      0.70        39
weighted avg       0.84      0.85      0.83        39

分类报告提供了对模型的分类性能进行评估的指标,包括精确度(Precision)、召回率(Recall)、F1分数(F1-Score)和支持度(Support)。

  • 精确度(Precision):精确度表示在所有预测为某个类别的样本中,实际属于该类别的比例。高精确度表示分类结果中真正的正类别样本较多。
  • 召回率(Recall):召回率表示在所有实际属于某个类别的样本中,被正确预测为该类别的比例。高召回率表示模型能够较好地捕捉到该类别的样本。
  • F1分数(F1-Score):F1分数是精确度和召回率的综合度量,它取精确度和召回率的调和平均值。高F1分数表示模型在精确度和召回率之间取得了较好的平衡。
  • 支持度(Support):支持度是指属于某个类别的样本数量。

通过分类报告,您可以从多个方面评估模型的性能。以下是一些常见的情况和解释:

  • 如果某个类别的精确度很高,但召回率较低,说明模型将该类别的样本预测得相对准确,但漏掉了许多实际属于该类别的样本。
  • 如果某个类别的召回率很高,但精确度较低,说明模型将许多样本预测为该类别,但其中有很多是错误的预测。
  • 如果某个类别的F1分数很高,说明模型在该类别上具有较好的平衡性能,既能捕捉到大部分属于该类别的样本,又能保持较高的精确度。

总的来说,分类报告提供了对模型不同类别分类性能的整体评估。通过比较不同模型或改变模型参数,您可以根据分类报告中的指标来判断模型的优劣,并进行进一步的分析和优化。

在分类报告中,"macro avg"和"weighted avg"是两种不同的平均方式,用于计算不同类别的指标的平均值。

  • "macro avg":它计算每个类别指标的简单平均值,而不考虑每个类别的样本数量。每个类别被视为同等重要,不管其在数据集中的分布如何。"macro avg"适用于各类别样本数量相近的情况。

  • "weighted avg":它计算每个类别指标的加权平均值,其中权重是每个类别在数据集中的支持度(样本数量)的比例。较大的类别样本数量会对加权平均值产生更大的影响。"weighted avg"适用于各类别样本数量不平衡的情况。

举例说明:

假设有一个三分类问题,类别A有100个样本,类别B有500个样本,类别C有1000个样本。模型在类别A上的精确度为0.8,召回率为0.6,模型在类别B上的精确度为0.7,召回率为0.8,模型在类别C上的精确度为0.9,召回率为0.7。

  • "macro avg":精确度的"macro avg"为(0.8 + 0.7 + 0.9)/3 = 0.8,召回率的"macro avg"为(0.6 + 0.8 + 0.7)/3 = 0.7。
  • "weighted avg":精确度的"weighted avg"为(0.8 * 100 + 0.7 * 500 + 0.9 * 1000)/(100 + 500 + 1000) = 0.8,召回率的"weighted avg"为(0.6 * 100 + 0.8 * 500 + 0.7 * 1000)/(100 + 500 + 1000) = 0.7。

可以看到,对于"macro avg",每个类别被视为同等重要,所以平均值是简单的算术平均。而对于"weighted avg",由于类别B和类别C的样本数量较多,所以加权平均值更接近于这两个类别的指标。

根据具体情况,您可以选择使用"macro avg"或"weighted avg"来评估模型在不同类别上的性能。如果类别样本数量相近,可以使用"macro avg"。如果类别样本数量不平衡,可以使用"weighted avg"。

相关文章

  • 思维模型

    一、思维模型 思维模型是用简单易懂的图形、符号、结构化语言等组成的可视化的模型,是人们观察、分析、解决问题的可视化...

  • pprof 工具使用

    pprof golang pprof是golang的可视化和性能分析的工具。其提供了可视化的web页面,火焰图等更...

  • CPDA_数据的获取_2019-07-15

    数据分析的主要流程涵盖:数据的获取、数据预处理、数据模型分析、数据可视化等,其中数据预处理很重要,数据模型分析较为...

  • keras手写数字分类

    测试加载已经训练好的模型做分类 模型可视化

  • 数据分析的分析视角与思维技巧

    思维技巧: 象限法(SWOT分析,KNO模型客户分群,RFM模型等,分类视角): 优点:清晰,简单,直观,划分结果...

  • 我的管理元认知(7)-思维模型

    什么是思维模型? 思维模型就是用简单易懂的图形、符号、结构化语言等组成的可视化的模型,是人们观察、分析、解决...

  • 思考力

    思维模型就是用简单易懂的图形、符号、结构化语言等组成的可视化的模型,是分析解决问题的可视化的“心理结构”。是模块化...

  • Python数据挖掘010-分类与回归建模

    数据挖掘可以大概分为:分类与回归,聚类分析,关联规则,时序模式,异常检测等模型。 分类主要是预测分类标号,即离散属...

  • python深入系列(四):高性能python代码

    1、性能分析工具 cProfile、hotshot、profile、runsnake(可视化cProfile分析结...

  • python代码性能分析

    分类 基于事件的性能分析(event-based profiling) 统计式的性能分析(statistical ...

网友评论

      本文标题:分类模型性能可视化等分析

      本文链接:https://www.haomeiwen.com/subject/xbugpdtx.html