如何确保神经网络的效率

我训练了一个用于二元分类的前馈神经网络,获得了83%的准确率,我希望通过调整输入参数来提高这一成绩。但一些测试让我感到困惑:

我的数据集长度为671,所以我将其分为513个训练集,58个验证集和100个测试集

  1. 当我改变数据集(训练集、验证集、测试集)的大小时,准确率可能会下降到非常低的分数,比如40%

  2. 神经网络应该从训练集中学习,但在训练后使用相同的训练集而不是测试集进行测试时,我以为模型应该达到100%的得分,因为它刚从中学习过,看过它,但实际上只提高了一点点,达到了87%…

我是机器学习的新手,所以我不知道这是否正常,我只是好奇,想抓住所有的小细节,完美地理解我在做什么。我猜可能是我的向量集的归一化问题,但我不太了解。如果你想看,我可以分享我的完整代码,但像所有神经网络一样,它相当长但易于阅读。


回答:

正如许多人所建议的,3:1:1(60:20:20 = 训练-验证-测试)比例是分割数据的一个经验法则,如果你在处理小数据集,最好坚持使用80:20或70:30的训练-测试比例,我通常选择90:10的比例以获得更好的结果。

在开始分类之前,首先检查你的数据集是否平衡或不平衡(一个类别的例子不应该比另一个类别的少),因为即使它给你很好的准确率,也会误导结果。

如果数据集不平衡,使用采样算法(例如SMOTE)对数据集进行预处理并重新采样。它将根据邻居创建每个类别的等量示例集。

正如其他答案中正确提到的,使用交叉验证分类,例如K折交叉验证。交叉验证的概念是为了调整用于训练的参数,以优化其准确率,并消除对训练数据过拟合的影响,它还可以去除数据集中的噪声。我通常使用10折交叉验证,其中数据集被分为10个部分,每次迭代中使用1/10的部分作为测试,其余部分作为训练。计算10次计算的平均值,以获得你分类器性能的一个良好估计。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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