2013-12-14 53 views
0

我在MATLAB中用652500个数据点训练了我的artificial neural network(ANN),在另一个盲测中(652,100个数据点 - 对于全新的输入数据集)优秀(如我所愿)。但是当我插入的数据量非常少(例如,低于50个数据点)时会出现问题。输出是非常意外的,我检查了很多次。神经网络中的输出问题(在MATLAB的神经网络工具箱中)

更确切地说,培训阶段包含10%的培训数据,45%的验证和45%的测试。培训非常成功,而且对于大量新的输入数据,它的工作效果非常好。问题是当非常有限的数据(与训练数据点相比)被插入到神经网络中时,它显示出非常不切实际的输出,超出了训练的范围。

这是为什么?任何人都可以点亮一些棚子吗?

另外请提一下,在培训和最终测试数据点方面是否存在严格(严格和快速)的规则?例如:应该/必须在新的输入数据集中引入多少百分比的训练数据。我想问题在于我的网络高估或低估了输出,因为与训练阶段相比,它收到的数据的百分比非常低。

+1

在分组之前尝试对数据进行洗牌,然后再查看该行为是否经常发生。这可能是因为数据空间没有在“有限数据”情况下用于测试的数据正确覆盖,并且当您有更多数据用于测试时,这些错误被其他人平均“掩盖”。 – damienfrancois

+0

我明白你的逻辑,非常感谢。 我的数据集已经洗牌了。 – mmenvo

回答

0

您的问题是训练期间数据集过度拟合。数据分割是神经网络训练中非常重要的任务。一般而言,更科学的是,训练集的比例应该在70-80%之间。测试和验证集应该在10-15%左右。例如:

net.divideParam.trainRatio = 70/100; 
net.divideParam.valRatio = 15/100; 
net.divideParam.testRatio = 15/100; 

你想象一个班上的学生。 TrainRatio是应由学生学习的材料/讲座。 ValRatio是作为中期检查应该检查的材料的百分比,而TestRatio是作为期末检查应该检查的材料的百分比。所以,如果你没有足够的培训材料,那么这个学生在中期和期末考试中就不会取得成功。清楚吗?神经网络适用于这样一个简单的学生进行学习/训练。所以,你的网络面临过度的问题。

+0

我也知道这个数据分割问题。即使使用70%的数据进行训练,也不能为很少的新输入数据集提供良好的输出。 要提到的是,我不会在我的网络中出现过度的问题,因为我在matlab中使用了一些函数,这有助于在任何过度配合和不足配合发生时停止网络。 – mmenvo

+0

除了当我的模型训练得当时,我检查了新的输入数据(大量的数据库),并且工作得很好。但是,每当我提供少于50个的数据点时,就会显示异常输出。这个特例是我面临的问题。 – mmenvo

+0

在神经网络中,任何事情都取决于训练阶段。你确信支持数据集中的所有类型的数据吗?我的意思是,如果您的测试数据集包含训练阶段的一些未经训练的数据,则无法获得好的结果。如果是这样,你不能应用神经网络,应该专注于聚类建模。您的测试数据集应该接近训练数据集结构,否则,NN对于这种类型的训练来说很弱。 – BlueBit