Matlab 关于为使用NN进行数据拟合任务准备数据的混淆

Matlab 关于为使用NN进行数据拟合任务准备数据的混淆,matlab,neural-network,deep-learning,data-fitting,Matlab,Neural Network,Deep Learning,Data Fitting,我正在使用多层感知器来将模型拟合到教程之后给定的输入-输出对数据 困惑1)我很难理解使用命令net.divideParam.testRatio创建的测试集在哪里使用?通常,我们将数据集分为训练、验证和一个不可见的测试集,用于绩效评估和报告混淆矩阵。这种方法通常用于分类任务。但是对于回归和模型拟合的问题,我们提出了一种新的方法。使用NN,我们是否应该明确地拥有一个在训练期间看不见的测试集?这个命令是不是创建了一个看不见的测试集,但它从未用于测试网络?程序代码使用测试中的所有输入。目前还不清楚培训后

我正在使用多层感知器来将模型拟合到教程之后给定的输入-输出对数据

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

% 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)当使用回归模型时,我们是否遵循与困惑1答案相同的方法


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

我可以帮助您解决大部分困惑1)。 训练神经网络时,将数据集分为3组:

  • 训练集,用于训练网络(实际允许更新网络权重的唯一数据集)
  • 验证集,用于停止培训(这是GUI中的参数验证检查)
  • 测试集,影响装配工的性能曲线和整体性能 因此,在这3种方法中,只有训练集可以被网络看到并影响权重更新;而验证集允许在网络过度拟合训练数据时停止训练(训练数据拟合的改进不会改进验证数据拟合/分类)。最后,测试集对于钳工性能的首次检查非常有用。 如果检查net.divideParam的值,可以看到网络存储了每个集合的值百分比;在培训期间,输入和目标将根据这3个值随机划分。这就是为什么使用工具箱来绘制网络的性能。您还可以通过将net.divideFcn设置为“divideind”来避免随机执行此操作。如果您非常了解自己的数据集,这将非常有用。 当您使用

    [net,tr] = train(net,inputs,targets);
    
    tr存储培训结果,包括培训(tr.trainInd)、验证(tr.valInd)和测试集(tr.testInd)的索引。为了检索每个集合,可以使用这些输入对输入进行索引,而其他参数,例如网络的精度或性能,可以通过tr检索


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

    感谢您的回答,它涵盖了我所有的基本困惑,除了如何使用NN之后的
    net.divideParam
    方法访问测试集的部分之外。我想如果
    inputs=houseInputs
    是整个数据集,那么如何使用
    net.divideParam.testRatio=15/100
    样本数生成训练期间未看到的测试集?另外,是否有方法知道并停止过度装配开始发生?我在编辑中添加了信息,您可以在tr中找到培训、验证和测试索引,这是train的第二个输出