我正在使用神经网络进行土壤光谱分类研究,我从教授那里得到了实验室的数据,这些数据包括从1200纳米到2400纳米波长的光谱反射率。他只有270个样本。
由于训练数据非常少(只有270个样本),我无法将网络的准确率训练到超过74%。我曾担心我的Matlab代码有问题,但当我使用Matlab的神经网络工具箱时,得到的结果相同…准确率不超过75%。
当我与教授讨论这个问题时,他说没有更多的数据了,但他建议我对现有数据进行随机扰动以获取更多数据。我在网上研究了数据的随机扰动,但没有找到有效的方法。
能否有人指导我如何对270个样本进行随机扰动,以便我能获得更多数据?
另外,由于这样做,我将构建‘假’数据,我不明白这如何能使神经网络表现得更好,因为神经网络的训练不正是使用实际有效的数据吗?
谢谢,
@Faisal.
回答:
我认为试图制造更多数据是个坏主意:除非你知道数据的真实分布,否则你无法创造出比你已有数据信息含量更高的任何东西。如果你确实知道,你将能够以贝叶斯最优错误率进行分类,这将是无法超越的。
我会考虑的是是否可以通过调整神经网络的参数来提高性能。面对少量训练数据时,首先想到的是你的权重正则化器(你是否使用了正则化权重),如果你倾向于这样看,这可以被视为权重的先验。我还会考虑改变激活函数,如果你使用的是简单的线性激活函数,以及增加或减少隐藏节点的数量(样本如此少,我会使用非常少的节点,甚至完全绕过隐藏层,因为用有限的数据很难学习非线性交互)。
虽然我通常不推荐这样做,但鉴于数据量有限,你可能需要使用交叉验证来设置这些超参数,因为10-20%的测试集大小会提供无用的见解。然而,你可以保留10-20%的数据用于最终测试,以免结果偏向于有利于你的方向。