关于使用NN进行数据拟合任务的数据准备的困惑

时间:2019-05-11 20:14:53

标签: matlab neural-network deep-learning data-fitting

按照教程https://www.mathworks.com/help/deeplearning/gs/fit-data-with-a-neural-network.html,我使用多层感知器将模型拟合到给定输入-输出对的数据。

混乱1)我很难理解使用命令net.divideParam.testRatio创建的测试集在哪里?通常,我们将数据集分为训练,验证和不可见的测试集,用于性能评估和报告混淆矩阵。这种方法通常用于分类任务。但是对于回归和模型拟合问题。使用NN时,我们是否应该不明确拥有训练期间看不见的测试集?此命令net.divideParam.testRatio是否在创建该看不见的测试集,但从未在网络测试中使用它?程序代码在测试中使用所有inputs。尚不清楚训练后是否应使用看不见的数据集进行测试,然后报告性能。

% Create a Fitting Network
hiddenLayerSize = 10;
net = fitnet(hiddenLayerSize);
inputs = houseInputs;
targets = houseTargets;
% Set up Division of Data for Training, Validation, Testing
net.divideParam.trainRatio = 70/100;
net.divideParam.valRatio = 15/100;
net.divideParam.testRatio = 15/100; 
% Train the Network
[net,tr] = train(net,inputs,targets);

% Test the Network
outputs = net(inputs);
errors = gsubtract(outputs,targets);
performance = perform(net,targets,outputs)

困惑2)使用回归模型mvregress时,我们采用的方法与困惑1)的答案相同

请帮助。我无法为这些初始步骤找到正确的做法和方法,我相信正确使用会对结果产生重大影响。

1 个答案:

答案 0 :(得分:1)

我可以在大多数情况下为您提供帮助1)。 训练神经网络时,您将数据集分为3组:

  1. 训练集,用于训练网络(实际上是唯一允许更新网络权重的数据集);
  2. 验证集,用于停止训练(这是GUI中的Validationchecks参数);
  3. 测试集,它会影响性能图和钳工的整体性能;

因此,在这3个中,只有训练集被网络看到,并且影响权重更新;而验证集允许在网络过度拟合训练数据时停止训练(训练数据拟合的改进不会改善验证数据的拟合/分类)。最后,测试仪对于首次检查钳工性能很有用。 如果检查net.divideParam的值,则可以看到网络存储了每个集合的值的百分比。在训练过程中,输入和目标将根据这三个值随机分配。这就是为什么如果使用工具箱来绘制网络性能的原因。您也可以通过将net.divideFcn设置为'divideind'来避免随机进行此操作。如果您非常了解数据集,这将非常有用。 当您使用

训练网络时
[net,tr] = train(net,inputs,targets);

tr存储训练的结果,包括训练的索引(tr.trainInd),验证(tr.valInd)和测试集(tr.testInd)。要检索每个集合,可以用这些输入为输入建立索引,同时可以通过tr检索其他参数,例如网络的准确性或性能。

关于混乱2,我认为回归模型mvregress使用不同的方法:它应该只评估拟合的参数,而不必将数据集分成三部分。应该通过添加一些点或从输入中删除点来评估回归。