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

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

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

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

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

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

谢谢,

@Faisal.


回答:

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

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

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

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

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