为什么我在Keras中使用前馈神经网络对独立的训练、验证和测试数据集获得100%的准确率?

今天我正在开发一个分类器,用于根据蘑菇的特征检测其是否有毒。数据存储在一个.csv文件中(读取到pandas DataFrame),数据链接将在文末提供。

我使用了sci-kit learn的train_test_split函数将数据分为训练和测试集。

然后,我移除了训练和测试标签中指定蘑菇是否有毒的列,并将其分配给了yTrain和yTest变量。

之后,我对数据应用了一键编码(使用pd.get_dummies()),因为参数是分类数据。

此后,我对训练和测试的输入数据进行了归一化处理。

本质上,训练和测试的输入数据是一组独特的经过一键编码的参数,而输出数据是一组一和零的列表,代表输出(一表示有毒,零表示可食)。

我使用了Keras和一个简单的前馈网络来完成这个项目。这个网络由三层组成;一个简单的Dense层(对于PyTorch用户来说是线性层)包含300个神经元,一个包含100个神经元的Dense层,以及一个包含两个神经元的Dense层,每个神经元代表给定蘑菇参数是有毒还是可食的概率。我使用的优化器是Adam,损失函数是稀疏分类交叉熵

我训练了网络60个周期。大约5个周期后,损失基本为零,我的准确率达到了1。训练结束后,我担心网络可能过拟合了,所以我在不同的测试数据上进行了尝试。结果与训练和验证数据相同;准确率达到了100%,我的损失可以忽略不计。

在50个周期结束时,我的验证损失为2.258996e-07,训练损失为1.998715e-07。我的测试损失为4.732502e-09。我对这种情况感到非常困惑,损失应该这么低吗?我认为我没有过拟合,我的验证损失只是比训练损失略高一些,所以我也不认为我有欠拟合的情况。

你们中有谁知道这个问题的答案吗?如果我犯了什么愚蠢的错误,我深感抱歉。

数据集链接:https://www.kaggle.com/uciml/mushroom-classification


回答:

看起来那个Kaggle数据集是可解的,意思是你可以创建一个模型,100%的时间都能给出正确答案(如果这些结果是可信的话)。如果你查看那些结果,你会发现作者实际上能够找到使用几种方法(包括决策树)达到100%准确率的模型。

Related Posts

如何在Tensorflow中找到train_losses和val_losses,神经机器翻译与注意力

我正在学习这个教程中的神经机器翻译https://ww…

使用Scikit进行邮政编码的特征哈希

我正在处理一个机器学习问题,我的数据集中有大量的邮政编…

分类变量的限制值为53

我正在使用R编程语言。我试图将“随机森林”(一种统计模…

如何使用torch.hub.load加载本地模型?

我需要避免从网络上下载模型(因为安装机器上的限制)。 …

如何知道模型期望的输入格式是二维数组而不是一维数组?

考虑到这个讨论,我仍然无法理解如何知道模型期望输入必须…

Python face_recognition 为何无法识别卡通图像?

我正在尝试使用Python的Face-recognit…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注