文章 "深度神经网络 (第六部分)。 神经网络分类器的融合: 引导聚合"

 

新文章 深度神经网络 (第六部分)。 神经网络分类器的融合: 引导聚合已发布:

本文讨论了用引导聚合结构构建并训练神经网络融合的方法。 它还确定了构成融合的各独立神经网络分类器的超参数优化的特性。 本文中所创建的神经网络融合的品质将与该系列前一篇文章中获得的优化神经网络的品质进行比较。 已考虑到进一步提高融合分类品质的可能性。

尽管事实上,在融合当中的单体分类器的超参数是凭直觉选择的,且显然不是最优的,但是利用平均和简单多数表决获得了较高且稳定的分类品质。

总结以上所有内容。 示意性地,创建和测试神经网络融合的整个过程可以分为 4 个阶段:

图例3. 利用平均/表决合并器训练和测试神经网络融合的结构

作者:Vladimir Perervenko

 

谢谢,很有意思,elmNN 似乎可以替代 nnet,尤其是在集合中。 我还了解了 rBayesianOptimization,今后我会尝试使用它。

 

有趣的文章!
一次学习 500 个网络知识真是出乎意料。我没想到会这么快。使用 DNN 只需要几个小时......

1) 您可以使用内置的 holdout(Ytrain, ratio = r/10, mode = "random", seed = i ) # 来代替额外的随机数生成器 setRNG(rng[[k]]),其中 i 是循环迭代次数。
这样,我们还将在每次迭代时获得一组新的混合输入数据,并在重新启动时重复使用。

2)总的来说,holdout 是一个很好的函数,它能很好地混合数据,比 MT5 中用随机的其他行替换每一行的自写函数要好得多。
当改变种子时,您可以获得很好的学习效果。我试过用 darch 手动更改,结果是错误率从 50% 降到 30%,交易次数从单位降到数百次,而这只是在更改了混合键之后。在循环中自动检查可能更可靠。

3) elmNN - 类似于训练一个历元的普通 NS。取 500 个棋子(我们从中选出最好的一个),我们就得到了一个具有 500 个训练历元(我们也从中选出最好的一个历元)的类似 NS。不过,这只是一种联想,而不是一种说法。

虽然我认为几个最佳网络的平均结果要好于 500 个历元后的一个最佳结果。我想用 DNN 进行合集,但恐怕学习曲线会很长。我会进行实验的)
感谢您的文章!

 
elibrarius:

有趣的文章!
一次学习 500 个网络知识真是出乎意料。我没想到会这么快。有了 DNN,只需要几个小时......

1) 我们可以使用内置的 holdout(Ytrain, ratio = r/10, mode = "random", seed = i ) # 而不是额外的随机数发生器 setRNG(rng[[k]]),其中 i 是循环迭代次数。
这样,我们还将在每次迭代时获得一组新的混合输入数据,并在重新启动时重复这些数据。

2)总的来说,holdout 是一个很好的函数,它能很好地混合数据,比 MT5 中用随机的其他行替换每一行的自写函数要好得多。
当改变种子时,您可以获得很好的学习效果。我试过用 darch 手动更改,结果错误率从 50% 降到 30%,交易次数从单位降到数百次,而这只是在更改了混合键之后。在循环中自动检查可能更可靠。

3) elmNN - 类似于训练一个历元的普通 NS。取 500 个棋子(我们从中选出最好的一个),我们就得到了一个训练了 500 个历元(我们也从中选出最好的历元)的 1 个 NS 的类似物。不过,这只是一种联想,而不是一种说法。

虽然我认为几个最佳网络的平均结果要好于 500 个历元后的一个最佳结果。我想用 DNN 进行合集,但恐怕学习曲线会很长。我会进行实验的)
感谢您的文章!

1.你做不到。RNG 的主要任务是确保集合中神经网络的权重由恒定的随机变量初始化。 由恒定随机变量初始化。为了优化超参数,需要一个恒定质量的集合。

这是一个单层神经网络,但没有反向传播学习。请阅读链接中的描述。那里有一整个动物园。正如开发者所说,它们的工作相当成功。

老实说,ELM 的合集结果让我大吃一惊,也印证了那句话:"并非所有困难的事情都是出色的"。在下一部分中,我们将尝试几种方法来提高平均分类 的质量。

祝好运

 
Vladimir Perervenko:

1.不能RNG 的主要任务是确保集合中神经网络的权重由恒定的随机变量初始化。 由恒定的随机变量初始化。为了优化超参数,需要一个恒定质量的集合。

这是一个单层神经网络,但没有反向传播学习。请阅读链接中的描述。那里有一整个动物园。正如开发者所说,它们的工作相当成功。

老实说,ELM 的合集结果让我大吃一惊,也印证了那句话:"并非所有困难的事情都是出色的"。在下一部分中,我们将尝试几种方法来提高平均分类 的质量。

祝好运

1) 找到了。除了初始化混合之外,您还要初始化网络权重。
只用 set.seed(i);不能达到同样的效果吗?

 
elibrarius:

1) 明白了。除了初始化混合,您还初始化了网络权重。
仅仅 set.seed(i); 不会产生同样的效果吗?

是的,不会。它会将 RNG 设置为一个状态一次,但我们的 foreach 有 500 次迭代,每次迭代都需要不同状态的 RNG。请查看 doRNG 软件包说明。

祝你好运

 
Vladimir Perervenko:

不,不会。它会将 RNG 设置为一个状态一次,但我们有 500 次 foreach 迭代,每次迭代都需要不同状态的 RNG。请看 doRNG 软件包的说明。

祝你好运

它将位于循环内部

  Ens <- foreach(i = 1:n, .packages = "elmNN") %do% {
    set.seed(i);
    idx <- rminer::holdout(Ytrain, ratio = r/10, mode = "random")$tr
    elmtrain(x = Xtrain[idx, ], y = Ytrain[idx], 
             nhid = nh, actfun = "sin")
  }
也就是说,先是 set.seed(1);然后是 set.seed(2);set.seed(3);..... set.seed(500);
 
elibrarius:

它将在环路内

试试看也许能行

 
Vladimir Perervenko:

试试吧也许能行。

应该可以。

我认为在这种情况下可以不关闭多线程。

 
elibrarius:

必须如此。

我认为在这种情况下可以不关闭多线程。

实际测试一下。如果能得到相同的结果或更好的结果,就可以这样做。R 语言允许你以不同的方式执行相同的操作。

祝您好运

 
Vladimir Perervenko:

实际测试一下。如果能得到相同的结果或更好的结果,就可以这样做。R 语言允许您以不同的方式执行相同的操作。

祝你好运

版本

  Ens <- foreach(i = 1:n, .packages = "elmNN") %do% {
    set.seed(i);
    idx <- rminer::holdout(Ytrain, ratio = r/10, mode = "random")$tr
    elmtrain(x = Xtrain[idx, ], y = Ytrain[idx], 
             nhid = nh, actfun = "sin")
  }

版本有效。每次运行时,它都会给出相同的网络权重。我对第二个网络进行了比较。我输出了 env$Ens[2],然后在 notepad++ 中通过插件进行比较。

在多线程情况下无法运行:

在 setMKLthreads(2) 中出错:找不到函数 "setMKLthreads"。

这个函数是什么?第 4 条和第 6 条的代码中没有这个函数。如何连接?

PS: 如果您能发布包含所有函数和源数据的 R 会话,会更方便。