试图用python为分类结果制作引人注目的图

数据挖掘 Python 分类 可视化
2021-09-19 08:37:45

我一直在研究分类问题并取得了一些不错的结果,但现在我努力拼凑出一个好的图来说明每个预测的概率。这是我目前的数据:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

df_voting_output.head(n=5)
    prob    actual  pred    correct
0   0.460200    0   0   1
1   0.548478    1   1   1
2   0.270609    0   0   1
3   0.686557    0   1   0
4   0.527935    0   1   0
5   0.098687    0   0   1

我已经能够使用以下代码创建带有概率的条形图:

plt.bar(np.arange(len(voting_predictions[:,1])), voting_predictions[:,1])
plt.xlabel("record number")
plt.ylabel("probability")
plt.title("Classification Probabilities")
plt.show()

当前图表

但是,我认为必须有更好的方法来包含更多信息和密钥。我希望清楚地看到“正确”标签,因此从视觉的角度来看,您可以看到概率与正确分类的关系。

2个回答

你想通过呈现这个情节来传达什么信息?这决定了合适的绘图类型。

如果概率的特定索引很重要,您在问题中显示的条形图将很有用 - 例如,如果索引 504-559 可能有一些特别之处,并且有人想查看这些索引的概率 -但我怀疑情况并非如此。您更有可能对概率如何与实际结果相关联感兴趣。为了证明这一点,您可以从一个简单的散点图开始,横轴为概率,纵轴为实际结果。如果您对 0 和 1 的实际结果使用不同的颜色(可能还有稍微不同的符号),这也会有所帮助。这是一个原始示例:

实际结果与概率的散点图

显示几乎相同信息的另一种选择是将概率分组为范围并绘制一个直方图,显示每个范围中有多少 1 结果。这更好地传达了从 0 到 1 预测的交叉范围有多窄。

1 个结果与概率的直方图

如果您只想传达每种类型的预测有多少正确与错误,那么StatsSorceress 推荐的混淆矩阵可能是更好的选择,因为它更直接地呈现了该信息。您可以将其“装饰”为热图,如果您认为这会增强影响(即,如果这是针对数字意识较少的人或者它符合整体图形主题),但这可能并没有多大作用不同之处。

热图混淆矩阵

您很少会为您的集合中的每个示例显示概率图。你确定要这么做吗?更好的表示可能是混淆矩阵。以下是它的工作原理:

1)列是真正的类标签

2)行是预测的类

3) 在图的右侧,您可以显示正确分配给某个类别的概率(或分类错误,如果您愿意)。

例如,假设我的数据集中有三个类。每个类我有 10 个例子,所以总共有 30 个例子。

我的模型的分类结果是:

第 1 类的 10 个示例中有 8 个被正确标记;1 被错误分类为 2 类,1 被错误分类为 3 类。

第 2 类的 10 个示例中有 7 个被正确标记;3 人被错误分类为第 3 类。

第 3 类的 10 个示例中有 9 个被正确标记;1 被错误分类为 2 类。

然后我的混淆矩阵如下所示:

[0.80.10.10.00.70.30.00.10.9]

沿着我的混淆矩阵的右手边,我可以包括分类错误:0.2 代表第 1 类;2 级为 0.3;第 3 类为 0.1。

请注意,行必须加到 1。