按照教程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)的答案相同
请帮助。我无法为这些初始步骤找到正确的做法和方法,我相信正确使用会对结果产生重大影响。
答案 0 :(得分:1)
我可以在大多数情况下为您提供帮助1)。 训练神经网络时,您将数据集分为3组:
因此,在这3个中,只有训练集被网络看到,并且影响权重更新;而验证集允许在网络过度拟合训练数据时停止训练(训练数据拟合的改进不会改善验证数据的拟合/分类)。最后,测试仪对于首次检查钳工性能很有用。 如果检查net.divideParam的值,则可以看到网络存储了每个集合的值的百分比。在训练过程中,输入和目标将根据这三个值随机分配。这就是为什么如果使用工具箱来绘制网络性能的原因。您也可以通过将net.divideFcn设置为'divideind'来避免随机进行此操作。如果您非常了解数据集,这将非常有用。 当您使用
训练网络时[net,tr] = train(net,inputs,targets);
tr存储训练的结果,包括训练的索引(tr.trainInd),验证(tr.valInd)和测试集(tr.testInd)。要检索每个集合,可以用这些输入为输入建立索引,同时可以通过tr检索其他参数,例如网络的准确性或性能。
关于混乱2,我认为回归模型mvregress使用不同的方法:它应该只评估拟合的参数,而不必将数据集分成三部分。应该通过添加一些点或从输入中删除点来评估回归。