混淆矩阵完美的结果。这可能是真的吗?

Posted

技术标签:

【中文标题】混淆矩阵完美的结果。这可能是真的吗?【英文标题】:Confusion matrix perfect result. Can it be true? 【发布时间】:2020-05-18 10:28:42 【问题描述】:

我正在学习机器学习。我想检查我的模型的质量。

这里有一些示例代码:

log_reg = LogisticRegression(max_iter=1000, solver='liblinear', C=1)
log_reg.fit(X_train, y_train)
confusion_matrix(y_test, log_reg.predict(X_test))

我得到了:

array([[ 979,    0],
       [   0, 1052]], dtype=int64)

所以这意味着这个模型是完美的?也许我犯了一些错误。我不认为 100% 的 TN 和 TF 值是好的,因为它好得令人难以置信。

【问题讨论】:

【参考方案1】:

如果它好得令人难以置信,它可能是。检查信息是否泄漏到您的测试数据集中。由于多种原因,有关测试集的信息可能会泄漏到训练中。在 google 上阅读并了解来源。一个常见的来源是归一化。如果您确实将训练数据和测试数据一起标准化/标准化,则您正在将训练数据的均值和标准差信息传递给测试数据。此外,如果您使用的是时间序列数据,请确保您的测试数据集不是随机打乱的。 Timeseries 数据集具有自相关性,前一个时间点有关于下一个时间点的信息。如果您将 t-1 数据点传递给训练并将 t 数据点传递给测试,它会表现得非常好。 话虽如此,如果存在一个完美分离数据集的超平面,也很有可能得到这样的结果。大多数玩具数据集可以使用复杂的技术完美分离。希望我能帮上一点忙。

【讨论】:

【参考方案2】:

    别担心,每个人都遇到过这个问题。像这样的结果会让你起床并与大家分享。不幸的是,几乎每次都极有可能出现问题。

    我认为存在“信息泄漏”,这意味着输入数据包含一些正在使用的特征,而不是所有特征。在这种情况下,模型不会泛化。但是,我认为很容易确定何时存在信息泄漏。

例如,如果您怀疑存在“信息泄漏”,检查的方法之一是查看特征重要性图。如果与其他特征相比,只有一个或两个特征具有非常重要的重要性,那么您的输入数据或建模方法很可能有问题。

【讨论】:

我所做的与本文中描述的完全相同。相同的数据集,相同的操作和相同的结果。 towardsdatascience.com/… @VladTimofeev 我分析了教程。我想解释两点。 1)在教程中,作者将目标变量包含在训练数据X_train & X_test中。 (这是一个错误。) 2)即使我们修复了这个,准确率仍然很高。为什么?原因在于 2 个特征:a) 气味 b) 孢子印色。 如果我们使用这 2 列的 one-hot 编码版本,与使用所有特征相比,我们实际上可以以几乎相似的准确度预测蘑菇。因此,这意味着在这个玩具示例中,这两个特征可以很好地预测蘑菇是否有毒或可食用。我相信这两个特征在现实生活中也可以用来区分蘑菇。 这意味着,是的!在本教程中,可以达到完美的准确性。但是,作为一个友好的建议,我想说的是,您不太可能在现实生活中的数据集中获得完美的预测。

以上是关于混淆矩阵完美的结果。这可能是真的吗?的主要内容,如果未能解决你的问题,请参考以下文章

随机森林 - “完美”的混淆矩阵

遥感软件中混淆矩阵是如何产生的

怎么计算混淆矩阵的消费者精度

混淆矩阵-MATLAB代码详解

29、评估多分类问题--混淆矩阵和F分数

混淆矩阵 - 测试情绪分析模型