如何解决用装袋训练神经网络时,混淆矩阵存在问题
我正在尝试使用装袋技术来训练神经网络。
该技术采用原始训练数据集,并重复采样此数据集以构成新的训练集。
通过这种方式,可以重复训练集中的某些元素。
示例以80/20除法包含10个元素(1、2 ... 10)。
-
没有装袋
训练集: [1、2、3、4、5、6、7、8]
测试集: [9,10]
-
带套袋
训练集: [1、2、3、3、5、6、8、8]
测试集: [9,10]
我正在Matlab上训练前馈网络。为了表明我将手动告知培训/验证/测试数据索引,我正在使用:
net.divideFcn = 'divideind'
我选择要用于训练的索引。现在我有重复的索引,而其他却没有显示。
ind1 = randi([1 size(ind1)],1,size(ind1))
之后,我定义索引:
> net.divideParam.trainInd = ind1;
> net.divideParam.valInd = ind2;
> net.divideParam.testInd = ind3;
接下来, 最终我训练了网子。其中x和t是数据和目标的完整集合。
train(net,x,t)
这里出现问题。我正在使用 nntraintool ,当我单击“混淆”时,会出现混淆矩阵,用于训练,验证和测试。但是,这个混淆矩阵中出现的精度与我使用以下方法时的精度不同:
respTest = net(xTest);
[c,cm,ind,per] = confusion(tTest,respTest)
acc = (1-c)*100;
仅当我使用套袋技术时才会发生这种差异。如果我输入的训练索引不重复的向量,则混淆表的值是相同的。如果我使用装袋,并用重复的索引通知训练集,则会发生这种差异。怎么了?如何使用装袋使其工作?
编辑: 我通过重复使用创建新的数据集来“解决”该问题 原始集的索引(ind1)与验证(ind2)和测试(ind3)数据串联在一起。这样,我不会将重复的索引传递给train函数。它有效,但是如果有人想到更多 优雅的解决方案会很棒。
x_aux = [x(:,ind1) x(:,ind2) x(:,ind3)]
t_aux = [t(:,ind1) t(:,ind2) t(:,ind3)]
train(net,x_aux,t_aux)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。