混淆矩阵完美的结果。这可能是真的吗?
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 编码版本,与使用所有特征相比,我们实际上可以以几乎相似的准确度预测蘑菇。因此,这意味着在这个玩具示例中,这两个特征可以很好地预测蘑菇是否有毒或可食用。我相信这两个特征在现实生活中也可以用来区分蘑菇。 这意味着,是的!在本教程中,可以达到完美的准确性。但是,作为一个友好的建议,我想说的是,您不太可能在现实生活中的数据集中获得完美的预测。以上是关于混淆矩阵完美的结果。这可能是真的吗?的主要内容,如果未能解决你的问题,请参考以下文章