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

2023-08-07  本文已影响0人  逍遥_yjz

1. 混淆矩阵

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

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

混淆矩阵的示例:

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

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

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

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)。

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

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

在分类报告中,"macro 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",每个类别被视为同等重要,所以平均值是简单的算术平均。而对于"weighted avg",由于类别B和类别C的样本数量较多,所以加权平均值更接近于这两个类别的指标。

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

上一篇 下一篇

猜你喜欢

热点阅读