2

我正在使用神经网络进行土壤光谱分类,我的教授从他的实验室获得了数据,其中包括从波长 1200 nm 到 2400 nm 的光谱反射率。他只有 270 个样本。

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

当我和我的教授谈论这件事时,他说他没有更多的数据,但要求我对这些数据进行随机扰动以获得更多数据。我在网上对数据的随机扰动进行了研究,但结果不足。

有人可以指出我对 270 个数据样本执行随机扰动的正确方向,以便我可以获得更多数据吗?

另外,由于这样做,我将构建“假”数据,我看不出神经网络会变得更好,因为神经网络不是使用实际的真实有效数据来训练网络吗?

谢谢,

费萨尔。

4

3 回答 3

3

我认为试图制造更多的数据是个坏主意:除非你知道要从中采样的数据的真实分布,否则你不能创建任何信息内容比你已经拥有的更高的东西。但是,如果您这样做了,您将能够使用贝叶斯最佳错误率进行分类,这是不可能被击败的。

相反,我要看的是您是否可以更改神经网络的参数以提高性能。使用少量训练数据立即浮现在脑海的是您的权重正则化器(您是否甚至使用正则化权重),如果您愿意,可以将其视为权重的先验。如果您使用简单的线性激活,我还会考虑更改激活函数,以及隐藏节点的数量(示例很少,我会使用很少,甚至完全绕过隐藏层,因为这很难学习与有限数据的非线性相互作用)。

虽然我通常不推荐它,但你可能应该使用交叉验证来设置这些超参数,因为它们的大小有限,因为你将从 10-20% 的测试集大小中获得无益的洞察力。但是,您可能会为最终测试保留 10-20%,以免结果偏向于您。

于 2013-03-25T11:31:06.347 回答
3

向数据添加随机噪声的最简单方法是应用高斯噪声。

我想您的措施有与之相关的错误(没有错误的措施几乎没有意义)。对于每个测量值 M+-DeltaM,您可以使用 N(M,DeltaM) 生成一个新数字,其中 n 是正态分布

这将添加新点作为先前点的实验噪声,并将增加考虑分类测量中的实验误差的帮助。但是,我不确定是否可以提前知道这会有多大帮助!

于 2013-03-25T14:06:41.373 回答
3

首先,一些一般性建议:

  1. 将每个输入和输出变量标准化为 [0.0, 1.0]
  2. 使用前馈 MLP 时,尝试使用 2 个或更多隐藏层
  3. 确保每个隐藏层的神经元数量足够大,以便网络能够处理数据的复杂性

如果模型的复杂性足够,则应该始终可以在训练集上达到 100% 的准确度。但要小心,100% 的训练集准确率并不一定意味着你的模型在看不见的数据上表现良好(泛化性能)。

如果您添加的扰动在实践中发生(或至少类似的扰动),则数据的随机扰动可以提高泛化性能。这是可行的,因为这意味着让您的网络了解数据如何看起来不同但仍属于给定标签。

在图像分类的情况下,您可以旋转、缩放、噪声等输入图像(输出自然保持不变)。您需要弄清楚什么样的扰动可能适用于您的数据。对于某些问题,这很困难或不会产生任何改进,因此您需要尝试一下。如果这不起作用,并不一定意味着您的实现或数据已损坏。

于 2013-03-25T11:25:07.130 回答