gpt4 book ai didi

python - 使用python从混淆矩阵进行分层聚类

转载 作者:太空宇宙 更新时间:2023-11-04 01:24:48 25 4
gpt4 key购买 nike

使用以下 answer ,我尝试编写基于混淆矩阵的层次类聚类。混淆矩阵用于评估分类问题的结果,并且不对称。每行代表实际类中的实例。这是混淆矩阵的示例,您可以在其中读到“零”类样本的 25% 被预测为“六”类。

enter image description here

我尝试修改代码:

conf_mat = 1 - conf_mat   # 1.0 means dissimilarity
sch.linkage(conf_mat, method='warp')

但是我得到了错误的结果。

我应该如何组织我的数据以应用聚类?

下面应该给我重新排列的簇顺序,对吧?

ind = sch.fcluster(Y, 0, 'distance')

最佳答案

我不确定我是否理解您为什么要这样做,但是,根据您在上面发布的评论,您似乎想要将 10 个对象(“零”、“一”、“九”)聚集在一起通过比较它们在你的混淆矩阵中的值,由其他算法生成。

I would like the clusters to maximize the classification results: if one class is mainly recognize as another one then both classes should be fused.

... 因此,查看您的数据,对象“八”和对象“九”可能位于同一集群中,因为它们的值大多较低,而“八”列的值相对较高。

为此,您可以将 10 个对象中的每一个都视为具有 10 个任意属性;那么这是一个标准设置。也许欧几里得距离适合确定物体之间的距离;你最清楚。

听起来你想做一些层次聚类,你可以用 scipy.cluster.hierarchy 来做;下面的示例。


例子

我不想手动输入您的数据,所以我只是随机生成了一个矩阵。为避免混淆,我将对象称为“零”...“九”(拼写),并使用数字“1”到“9”作为对象的属性。

       0     1     2     3     4     5     6     7     8     9
zero 0.37 0.27 0.23 0.92 0.86 0.62 0.08 0.95 0.35 0.69
one 0.24 0.23 0.70 0.39 0.52 0.03 0.14 0.00 0.53 0.10
two 0.78 0.12 0.85 0.79 0.32 0.90 0.78 0.07 0.07 0.62
...
nine 0.15 0.39 0.27 0.93 0.12 0.14 0.34 0.11 0.72 0.52

所以这是我的“混淆矩阵”。

Confusion Matrix

使用 SciPy 进行层次聚类。我使用的是欧氏距离和单链接凝聚法。

from scipy.cluster import hierarchy
Y = hierarchy.distance.pdist(data.as_matrix(), metric='euclidean')
Z = hierarchy.linkage(Y, method='single')
ax = hierarchy.dendrogram(Z, show_contracted=True, labels=data.index.tolist())

[我将我的矩阵放在一个数据框中,这样我就可以为列和索引添加标签。这就是为什么我使用 pandas 命令 data.as_matrix() 来获取原始数据,并使用 data.index.tolist() 来设置标签。]

这给出:

Dendrogram

关于python - 使用python从混淆矩阵进行分层聚类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18770348/

25 4 0
文章推荐: html - 如何使
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com