我正在使用神经网络进行土壤光谱分类,我从他的实验室获得了我的教授的数据,该数据包括波长为1200 nm到2400 nm的光谱反射率。他只有270个样本。
由于训练数据非常少(仅270个样本),我无法对网络进行精确度超过74%的训练。我担心我的Matlab代码不正确,但是当我在Matlab中使用神经网络工具箱时,我得到了相同的结果......只有75%的准确度。
当我和我的教授谈论它时,他说他没有更多的数据,但要求我对这些数据进行随机扰动以获得更多数据。我在网上有关于数据的随机扰动的研究,但已经做空了。
有人能指出我在270个数据样本上执行随机扰动的正确方向,以便我可以获得更多数据吗?
此外,由于通过这样做,我将构建'假的'数据,我不知道神经网络将如何更好cos不是神经网络使用实际真实有效数据来训练网络的点?
谢谢,
费萨尔。
答案 0 :(得分:3)
首先,一些一般建议:
如果模型的复杂性足够,应该始终可以在训练集上达到100%的准确度。但要小心,100%的训练集准确性并不一定意味着你的模型在看不见的数据(泛化性能)上表现良好。
如果您正在添加的扰动发生在实践中(或至少是类似的扰动),则数据的随机扰动可以提高泛化性能。这是有效的,因为这意味着教你的网络数据如何看起来不同但仍然属于给定的标签。
在图像分类的情况下,您可以旋转,缩放,噪声等输入图像(输出保持相同,自然)。您需要弄清楚哪种扰动可能适用于您的数据。对于某些问题,这很难或没有任何改进,所以你需要尝试一下。如果这不起作用,则不一定意味着您的实现或数据被破坏。
答案 1 :(得分:3)
我认为尝试制作更多数据是一个坏主意:除非您知道要从中采样的数据的真实分布,否则您无法创建信息内容比现有信息更高的任何内容。但是,如果你这样做了,你就可以使用Bayes optimal error rate进行分类,这是不可能的。
我要看的是你是否可以改变神经网络的参数以提高性能。通过少量训练数据立即想到的东西是你的体重规则(你甚至使用正则化的权重),如果你倾向于那么可以看作权重的先验。如果你使用简单的线性激活,我还会考虑改变激活函数,另外还有隐藏节点的数量(只有很少的例子,我使用的很少,甚至完全绕过隐藏层,因为它很难学习与有限数据的非线性交互。)
虽然我通常不会推荐它,但鉴于大小有限,您应该使用交叉验证来设置这些超参数,因为您将从10-20%的测试集大小中获得无益的洞察力。但是,您可能会支持10-20%进行最终测试,以免对结果产生偏见。
答案 2 :(得分:3)
向数据添加随机噪声的最简单方法是应用高斯噪声。
我认为你的措施有与之相关的错误(没有错误的措施几乎没有意义)。对于每个测量值M + -DeltaM,您可以使用N(M,DeltaM)生成一个新数字,其中n是normal distribution。
这将添加新点作为以前的实验噪音,并将添加帮助考虑到分类测量中的实验误差。我不确定是否有可能提前知道这将有多大帮助!