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

Confusion regarding Preparation of data for the task of data fitting using NN

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

困惑 1) 我很难理解使用命令 net.divideParam.testRatio 创建的测试集在哪里使用?一般来说,我们将数据集分成训练集、验证集和一个不可见的测试集,用于性能评估和报告混淆矩阵。这种方法通常用于分类任务。但是对于回归和模型拟合的问题es。使用神经网络我们不应该明确地有一个在训练期间看不见的测试集吗?这个命令 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)。 训练神经网络时,您将数据集分成 3 组:

  1. 训练集,用于训练网络(唯一实际允许更新网络权重的数据集);
  2. Validation set,用于停止训练(这是GUI中的参数Validation checks);
  3. 测试集,影响性能图和fitter的整体性能;

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

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

tr存储训练结果,包括训练(tr.trainInd)、验证(tr.valInd)和测试集(tr.testInd)的索引。要检索每个集合,可以使用这些输入对输入进行索引,而可以通过 tr.

检索网络的准确性或性能等其他参数

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