Python 数据科学模型达到了非常高的、出乎意料的精确度?

Python 数据科学模型达到了非常高的、出乎意料的精确度?,python,machine-learning,scikit-learn,Python,Machine Learning,Scikit Learn,所以我正在训练一个高斯贝叶斯分类器,出于某种原因,我在分类报告中的每一项都变得非常完美。显然这是错误的,我想知道为什么会发生这种情况。我在这方面没有太多经验,所以非常感谢您的帮助! Kaggle内核链接: 给予 然后当我训练它的时候 model = GaussianNB() pred = model.fit(features_train, target_train).predict(features_test) accuracy = classification_report(pred,

所以我正在训练一个高斯贝叶斯分类器,出于某种原因,我在分类报告中的每一项都变得非常完美。显然这是错误的,我想知道为什么会发生这种情况。我在这方面没有太多经验,所以非常感谢您的帮助! Kaggle内核链接:

给予

然后当我训练它的时候

model = GaussianNB()

pred = model.fit(features_train, target_train).predict(features_test)

accuracy = classification_report(pred, target_test)
print(accuracy)
这给了我1.0的一切(精确性,召回率,准确性f1) 即使是逻辑回归模型也给了我100%的准确率。我不认为这是过度装修,因为这是一个100%的单位。 感谢您的帮助

以下是数据的快照:


这是我的目标和我在列车测试中使用的数据分析缩放分割

错误在
数据分析缩放中。下降('state',axis=1)
。 此语句将从数据框中删除列
state
,并返回修改后的数据框,该数据框必须保存在另一个数据框对象中,如:

data\u analyze\u scaled\u x=data\u analyze\u scaled.drop('state',axis=1)

现在你应该在你的列车测试中使用这个

在现有的实现中,您已经将目标变量作为模型的一个特性。所以无论你使用哪种模型,精度都是1


希望这有帮助

检查标签和功能之间是否存在数据泄漏。您的目标是什么,并且任何功能本身都可以用来直接计算目标变量吗?我的目标是状态变量,它是一个二进制成功/失败,因此我认为它无法计算。@G.Anderson确保目标变量在训练集中均匀分布是一个好主意吗?对于分类问题,什么样的比率通常是可以接受的?我建议的第一件事是阅读有关数据泄漏的内容,它是什么,并尝试将其严格应用于您的模型。快速浏览一下kaggle页面,让我问你一个问题。你认为你可以使用承诺金额与目标金额来预测活动的成功吗?@G.Anderson我有一个关于数据泄漏的问题。我从我的模型中删除了承诺的特性,得到了比大多数其他模型更高的更低的精度。然后,我去掉了支持者,得到了更低的频率,但仍然高于其他人得到的频率。现在我在想,什么时候我应该停止删除我认为可能会影响结果的功能,如果我怀疑它比应该的要高?这是数据泄漏,很好的捕捉。还值得注意的是,如果OP不想将原始数据帧保留在内存中,则OP也可以将参数
inplace=True
包含到drop操作中,而不是将其赋值
(265337, 254)
(265337,)
(66335, 254)
(66335,)
model = GaussianNB()

pred = model.fit(features_train, target_train).predict(features_test)

accuracy = classification_report(pred, target_test)
print(accuracy)
target = data_analyze_scaled['state']
data_analyze_scaled.drop('state', axis=1)