我正在学习ML。我想检查模型的质量。
这里有一些示例代码:
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值是好的,因为它太好了,难以置信。
答案 0 :(得分:1)
如果它太好以至于不能成立,那就可能是。检查信息是否泄漏到测试数据集中。有关测试集的信息可能由于多种原因而泄漏到训练中。在Google上阅读并了解相关资源。一种常见的来源是归一化。如果您一起对火车和测试数据进行了标准化/标准化,那么您会将训练数据的均值和标准差信息传递给测试数据。另外,如果您使用的是时间序列数据,请确保您的测试数据集没有被随机打乱。时间序列数据集具有自动相关性,前一个时间点具有有关下一个时间点的信息。如果您通过t-1数据点进行训练,并通过t数据点进行测试,则效果会很好。 话虽如此,如果存在一个可以完美分隔您的数据集的超平面,那么很有可能会得到类似的结果。大多数玩具数据集可以使用复杂的技术完美分离。
答案 1 :(得分:0)
别担心,每个人都面临这个问题。这样的结果使您起床并与所有人共享。不幸的是,几乎每次都可能有问题。
我认为存在“信息泄漏”,这意味着输入数据包含正在使用的某些功能而不是所有功能。在这种情况下,模型不会泛化。但是,我认为很容易确定何时存在信息泄漏。
例如,如果您怀疑存在“信息泄漏”,则检查方法之一就是查看特征重要性图。如果只有一个或两个要素比其他要素具有非常重要的意义,那么您的输入数据或建模方法很可能出了问题。