gpt4 book ai didi

machine-learning - 类别的混淆矩阵子集无法正常工作

转载 作者:行者123 更新时间:2023-11-30 08:37:38 25 4
gpt4 key购买 nike

enter image description here enter image description here我在互联网上搜索了这个问题的答案,包括撰写标题时的建议,但仍然无济于事,所以希望有人能提供帮助!

我正在尝试使用 sci-kit learn 构建一个混淆矩阵。这是在 keras 模型之后出现的。

这很奇怪,因为我遇到了以下问题:对于原始数据的训练和测试集...我可以按如下方式构建混淆矩阵(请注意这是一个多标签问题,因此数据必须是不同标签的子集。

以下工作正常:

cm = confusion_matrix(y_train[:,0:6].argmax(axis=1), trainpred[:,0:6].argmax(axis=1))

以及 6:18 等...直到所有类别都已成为子集。由此形成的混淆矩阵反射(reflect)了 keras 模型的真实结果。

当我在完全不可见的数据上部署模型时,问题就出现了。

我通过调用 model.predict() 部署模型并获得如上结果。但是,现在我无法以相同的方式对混淆矩阵进行子集化。

代码 cm=confusion_matrix 等...导致 CM 的输出尺寸错误,即使指定 0:6 等...

因此,我使用了上面使用的代码,但对标签参数进行了修改:

age[0,1,2,3,4]
organ[5,6,7,8]

cm = confusion_matrix(y_train[:,0:6].argmax(axis=1), trainpred[:,0:6].argmax(axis=1), labels=age)

第一个标签 (1:5) 工作完美...但是,接下来的标签却不行!我在混淆矩阵中没有得到正确的值,并且对于其中的值来说匹配也是不正确的。

结合上下文来看:未见过的测试数据中有超过 400 个样本。

model.predict 显示了大多数标签的非常高的分类和正确分数..

调用 CM=ytest[:,4:8]etc 确实会产生一个 4x4 矩阵,但是其中有大约 5 个值而不是 400 个,并且其中的值不正确匹配。

另外..标签年龄为012345,将 ytest 子集化为 0:6 会导致形成正确的混淆矩阵(我不确定为什么 6 必须包含在子集中......尽管如此,我已经尝试过相同问题的不同组合!

我已经多次搜索这个答案,所以非常感谢一些帮助,因为它令人难以置信的令人沮丧。我可以提供更多代码/信息,我将很乐意提供!!

非常感谢!

最佳答案

发生这种情况是因为您试图对生成的混淆矩阵进行子集化,但实际上您必须使用指定的类标签手动生成新的混淆矩阵。如果您对 A、B、C 进行分类,您将得到一个 3X3 矩阵。如果您想创建仅关注类A的矩阵,其他类将成为false类,但误报假阴性将会改变,因此您不能只对初始矩阵进行采样。

这就是你实际做的方式

import matplotlib.pytplot as plt
import seaborn as sns

def generate_matrix(y_true, predict, class_name):
TP, FP, FN, TN = 0, 0, 0, 0
for i in range(len(y_true)):
if y_true[i] == class_name:
if y_true[i] == predict[i]:
TP += 1
else:
FN += 1
else:
if y_true[i] == predict[i]:
TN += 1
else:
FP += 1
return np.array([[TP, FP],
[FN, TN]])

# Plot new matrix
matrix = generate_matrix(actual_labels,
predicted_labels,
class_name = 'A')

这将为A 类生成一个混淆矩阵。

关于machine-learning - 类别的混淆矩阵子集无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56605076/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com