我试图弄清楚如何使用神经网络为多标签分类任务生成混淆矩阵。我之前设法使用函数“交集”计算准确性,因为对此我不关心任何排序。
intersection = tf.sets.set_intersection(predictions, labels)
然而,为了计算混淆矩阵,我确实关心预测/标签的索引顺序。由于标签的值始终相同(1,1或
0.5,0.5),因此不可能按照较高/较低的值进行排序。
我想知道:
1)是否可以为多标签分类任务计算混淆矩阵?
2) 这将如何实施?
3)你如何处理预测两个标签都失败的情况?因为不可能知道哪个混淆属于哪个预测。
4) 函数tf排序背后的逻辑是什么。nn。top\u k()
下面我展示了我试图使用的代码示例。
import numpy as np
import tensorflow as tf
from sklearn.model_selection import train_test_split
from sklearn.metrics import confusion_matrix
Z = np.array([[7.0, 3.0, 5.0, 1.0, 0.0, 6.0],[2.0, 3.0, 4.0, 1.0, 3.25, 2.2], [2.0 , 5.0, 1.0, 7.0, 0.0, 8.0]])
Y = np.array([[0.5, 0, 0, 0.0, 0, 0.5],[0, 0.0, 0.5, 0, 0.5, 0], [0,0,0,0.5,0,0.5]])
_, predicted_softmax = tf.nn.top_k(tf.nn.softmax(Z), k = 2, sorted = False)
_ , labels = tf.nn.top_k(Y, k = 2, sorted = False)
with tf.Session() as sess:
# reshape to (6,1) because there is 2 correct values per sample(2*3)
print(predicted_softmax.eval().reshape(6,1))
print(labels.eval().reshape(6,1))
predicted = predicted_softmax.eval().reshape(6,1)
labels_idx = labels.eval().reshape(6,1)
class_labels = np.arange(6)
cnf_matrix_train = confusion_matrix(labels_idx, predicted, labels = class_labels)
print(cnf_matrix_train)
我真的不明白为什么predicted\u softmax的输出是:
[[5] [0] [4] [2] [3] [5]] ,
在过去的两个任期里,我一直在期待着[5][3]。此输出没有任何逻辑。在文档中,如果认为排序=False,他们没有指定任何关于排序的内容,但我希望有一些一致的行为。
感谢任何帮助!
是和否。您只能为每个类计算TN(真阴性)、TP(真阳性)、FN(假阴性)、FP(假阳性)矩阵,并基于此导出一些其他度量。它不会向您显示一个特定的类是如何被误分类为另一个特定的类的,但只会显示它是如何被误分类的以及如何被误分类的(FN或FP)。
您可以简单地使用TensorFlow附加包中的MultiLabelConfusionMatrix。它为您提供了:每个类的2x2矩阵,包含TN、TP、FN和FP。
请注意,当前的实现似乎假设y\u pred和y\u true是二进制张量,即仅由0和1组成(转换为int)。
确切地你不能。
文件上说:
如果true
则生成的k
元素将按值降序排序。
例如,tf.nn.top_k([10, 3, 1, 11], k=3)
可以返回[10,3,11]
(无顺序)。
排序时,tf.nn.top_k([10, 3, 1, 11], k=3)
返回[11,10,3]
(降序)。
(为了清楚起见,请忽略一秒钟,它当然会返回张量,而不是常规列表)
我正在对实际数据和来自分类器的预测数据进行多标签分类。实际数据包括三类(c1、c2和c3),同样,预测数据也包括三类(c1、c2和c3)。数据如下 在多标签分类中,文档可能属于多个类别。在上述数据中,1表示文档属于特定类,0表示文档不属于特定类。 第一行Actual\u数据表示文档属于c1类和c2类,不属于c3类。类似地,第一行predicted\u数据表示文档属于类别c1、c2和c3。 最初我使
我正在使用分类器的多类多标签输出。类的总数为14,实例可以关联多个类。例如: 我现在制作混淆矩阵的方式: 输出如下: 现在,我不确定sklearn的混淆矩阵是否能够处理多标签多类数据。谁能帮我一下吗?
我正在y_test并y_pred混淆矩阵。我的数据用于多标签分类,因此行值是一种热编码。 我的数据有30个标签,但在输入混淆矩阵后,输出只有11行和列,这让我很困惑。我想我应该有一辆30X30的。 它们的格式是numpy数组。(y\u test和y\u pred是我使用dataframe.values将其转换为numpy数组的数据帧) y\U测试。形状 y_test y\u预测。形状 y\u预测
我需要计算表示为多个热向量的标签和预测的混淆矩阵。sklearn似乎不支持这种情况。 这是我所拥有的一个例子。假设有三个类,和;目标/标签为: 因此,我们有标签矩阵: 预测是: 预测矩阵为: 我希望输出是一个混淆矩阵,大致如下所示: 我使用来估计分类精度。然而,尽管正在为此类标签的准确性而工作,但混淆矩阵不支持上述场景。是否有任何替代? 另一个问题似乎给出了三个混淆矩阵,这不是我要寻找的情况。
我得到了混淆矩阵,但是因为我的实际数据集有很多分类类别,所以很难理解。 范例- 但是如何打印标签/列名以便更好地理解呢? 我甚至试过这个- 需要帮忙吗?
假设我有一个具有n个级别的因子变量y,我有预测和实际结果。如何构造混淆矩阵? 对于n=2的情况,这个问题已经得到了回答。看见 R:如何为预测模型制作混淆矩阵? 我试过的 这就是我能走多远 现在这必须以矩阵的形式呈现。 出身背景 混淆矩阵具有水平标签“实际类别”和垂直标签“预测类别”。矩阵元素的计数如下所示: 元素(1,1)=实际类的计数数为A,预测类的计数数为A 元素(1,2)=实际类别为A,预测