用装袋训练神经网络时,混淆矩阵存在问题

问题描述

我正在尝试使用装袋技术来训练神经网络。

该技术采用原始训练数据集,并重复采样此数据集以构成新的训练集。

通过这种方式,可以重复训练集中的某些元素。

示例以80/20除法包含10个元素(1、2 ... 10)。

  1. 没有装袋

    训练集: [1、2、3、4、5、6、7、8]

    测试集: [9,10]

  2. 带套袋

    训练集: [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 (将#修改为@)