问题描述
我正在尝试使用装袋技术来训练神经网络。
该技术采用原始训练数据集,并重复采样此数据集以构成新的训练集。
通过这种方式,可以重复训练集中的某些元素。
示例以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 (将#修改为@)