使用数据的随机扰动来获取神经网络的训练数据

我正在使用神经网络进行土壤光谱分类研究,我从教授那里得到了实验室的数据,这些数据包括从1200纳米到2400纳米波长的光谱反射率。他只有270个样本。

由于训练数据非常少(只有270个样本),我无法将网络的准确率训练到超过74%。我曾担心我的Matlab代码有问题,但当我使用Matlab的神经网络工具箱时,得到的结果相同…准确率不超过75%。

当我与教授讨论这个问题时,他说没有更多的数据了,但他建议我对现有数据进行随机扰动以获取更多数据。我在网上研究了数据的随机扰动,但没有找到有效的方法。

能否有人指导我如何对270个样本进行随机扰动,以便我能获得更多数据?

另外,由于这样做,我将构建‘假’数据,我不明白这如何能使神经网络表现得更好,因为神经网络的训练不正是使用实际有效的数据吗?

谢谢,

@Faisal.


回答:

我认为试图制造更多数据是个坏主意:除非你知道数据的真实分布,否则你无法创造出比你已有数据信息含量更高的任何东西。如果你确实知道,你将能够以贝叶斯最优错误率进行分类,这将是无法超越的。

我会考虑的是是否可以通过调整神经网络的参数来提高性能。面对少量训练数据时,首先想到的是你的权重正则化器(你是否使用了正则化权重),如果你倾向于这样看,这可以被视为权重的先验。我还会考虑改变激活函数,如果你使用的是简单的线性激活函数,以及增加或减少隐藏节点的数量(样本如此少,我会使用非常少的节点,甚至完全绕过隐藏层,因为用有限的数据很难学习非线性交互)。

虽然我通常不推荐这样做,但鉴于数据量有限,你可能需要使用交叉验证来设置这些超参数,因为10-20%的测试集大小会提供无用的见解。然而,你可以保留10-20%的数据用于最终测试,以免结果偏向于有利于你的方向。

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中创建了一个多类分类项目。该项目可以对…

发表回复

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