Discussão do artigo "Redes Neurais Profundas (Parte VI). Ensemble de classificadores de redes neurais: bagging"
Obrigado, interessante, o elmNN parece ser um substituto válido para o nnet, especialmente em conjuntos. Também aprendi sobre o rBayesianOptimization, tentarei usá-lo no futuro.
Artigo interessante!
Foi inesperado aprender 500 redes de uma só vez. Não achei que isso pudesse ser feito tão rapidamente. Com o DNN, serão horas...
1) Em vez do gerador de números aleatórios adicional setRNG(rng[[k]]), você poderia usar a função integrada holdout(Ytrain, ratio = r/10, mode = "random", seed = i ) # em que i é o número da iteração do loop.
Dessa forma, também obteremos um novo conjunto misto de dados de entrada a cada iteração, que é repetido nas reinicializações.
2) Em geral, o holdout é uma função excelente, que mistura muito bem os dados, muito melhor do que a função escrita pelo próprio usuário no MT5, que substitui cada linha por uma outra linha aleatória.
É ao alterar a semente que você pode encontrar um resultado de aprendizado muito bom. Tentei alterar manualmente com o darch - obtive um erro de 50% para 30% e o número de negociações de unidades para centenas - e isso somente depois de alterar a chave de mistura. A verificação automática em um loop provavelmente é mais confiável.
3) elmNN - assemelha-se a um NS regular com uma época de treinamento. Tomando 500 peças (das quais escolhemos a melhor), obtemos um análogo de 1 NS com 500 épocas de treinamento (das quais também escolhemos a melhor época). Entretanto, isso é apenas uma associação, não uma afirmação.
Embora eu ache que a média de várias das melhores redes seja melhor do que 1 melhor resultado após 500 épocas. Gostaria de fazer um conjunto com a DNN, mas temo que a curva de aprendizado seja muito longa. Vou experimentar)
Obrigado pelo artigo!
Artigo interessante!
Foi inesperado aprender 500 redes de uma só vez. Não achei que isso pudesse ser feito tão rapidamente. Com o DNN, serão horas...
1) Em vez de um gerador de números aleatórios adicional setRNG(rng[[k]]), poderíamos usar o holdout(Ytrain, ratio = r/10, mode = "random", seed = i ) # incorporado, em que i é o número da iteração do loop.
Dessa forma, também obteremos um novo conjunto misto de dados de entrada a cada iteração, que é repetido nas reinicializações.
2) Em geral, o holdout é uma função excelente, que mistura muito bem os dados, muito melhor do que a função escrita pelo próprio usuário no MT5, que substitui cada linha por uma outra linha aleatória.
É ao alterar a semente que você pode encontrar um resultado de aprendizado muito bom. Tentei alterar manualmente com o darch - obtive um erro de 50% para 30% e o número de negociações de unidades para centenas - e isso somente depois de alterar a chave de mistura. A verificação automática em um loop provavelmente é mais confiável.
3) elmNN - assemelha-se a um NS regular com uma época de treinamento. Tomando 500 peças (das quais escolhemos a melhor), obtemos um análogo de 1 NS com 500 épocas de treinamento (das quais também escolhemos a melhor época). Entretanto, isso é apenas uma associação, não uma afirmação.
Embora eu ache que a média de várias das melhores redes seja melhor do que 1 melhor resultado após 500 épocas. Gostaria de fazer um conjunto com a DNN, mas receio que a curva de aprendizado seja muito longa. Vou experimentar)
Obrigado pelo artigo!
1. Não é possível. A principal tarefa do RNG é garantir que os pesos das redes neurais no conjunto sejam inicializados por variáveis aleatórias constantes. por variáveis aleatórias constantes. Para otimizar os hiperparâmetros, é necessário um conjunto de qualidade constante.
3) Essa é uma rede neural de camada única, mas sem aprendizado de retropropagação. Leia a descrição nos links. Há um zoológico inteiro deles lá. E, como afirmam os desenvolvedores, eles funcionam com bastante sucesso.
Os resultados do conjunto com ELM foram, honestamente, uma grande surpresa para mim e uma confirmação da afirmação: "nem tudo que é difícil é brilhante". Na próxima parte, tentaremos vários métodos para melhorar a qualidade da classificação por média.
Boa sorte
1. Não é possível. A principal tarefa do RNG é garantir que os pesos das redes neurais no conjunto sejam inicializados por variáveis aleatórias constantes. Para otimizar os hiperparâmetros, é necessário um conjunto de qualidade constante.
3) Essa é uma rede neural de camada única, mas sem aprendizado de retropropagação. Leia a descrição nos links. Há um zoológico inteiro deles lá. E, como afirmam os desenvolvedores, eles funcionam com bastante sucesso.
Os resultados do conjunto com ELM foram, honestamente, uma grande surpresa para mim e uma confirmação da afirmação: "nem tudo que é difícil é brilhante". Na próxima parte, tentaremos vários métodos para melhorar a qualidade da classificação por meio da média.
Boa sorte
1) Consegui. Além de inicializar a mistura, você também está inicializando os pesos da rede.
E apenas set.seed(i); não produzirá o mesmo efeito?
1) Entendi. Além de inicializar a mistura, você também está inicializando os pesos da rede.
E apenas set.seed(i); não produzirá o mesmo efeito?
Não, não dará. Ele definirá o RNG em um estado uma vez, mas temos 500 iterações de foreach e precisamos de um estado diferente do RNG em cada iteração. Dê uma olhada na descrição do pacote doRNG.
Boa sorte
Não, não vai. Ele definirá o RNG em um estado uma vez, mas temos 500 iterações foreach e precisamos de um estado diferente do RNG em cada iteração. Dê uma olhada na descrição do pacote doRNG.
Boa sorte
Ele estará dentro do loop
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") }ou seja, haverá set.seed(1); depois set.seed(2); set.seed(3); ..... set.seed(500);
Ele estará dentro do loop
Experimente. Pode ser que funcione.
Experimente. Talvez funcione.
Deveria funcionar.
E acho que é possível não desativar o multithreading nesse caso.
Tem que ser assim.
E acho que é possível não desativar o multithreading nesse caso.
Basta testá-lo na prática. Se você obtiver o mesmo resultado ou melhor, poderá fazê-lo dessa forma. A linguagem R permite que você execute a mesma ação de maneiras diferentes.
Boa sorte
Basta testá-lo na prática. Se você obtiver o mesmo resultado ou melhor, poderá fazê-lo dessa forma. A linguagem R permite que você execute a mesma ação de diferentes maneiras.
Boa sorte
A versão
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") }
funciona. Ela fornece os mesmos pesos de rede toda vez que é executada. Eu estava comparando na segunda rede. Gerei env$Ens[2] e, em seguida, comparei-os por plug-in no notepad++.
Não funcionou com multithreading:
Erro em setMKLthreads(2): não é possível encontrar a função "setMKLthreads"
O que é essa função? Ela não está no código dos artigos 4 e 6. Como conectá-la?
PS: Seria mais conveniente se você pudesse postar a sessão do R com todas as funções e dados de origem.

- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
Novo artigo Redes Neurais Profundas (Parte VI). Ensemble de classificadores de redes neurais: bagging foi publicado:
O artigo discute os métodos de construção e treinamento de ensembles de redes neurais com estrutura de bagging. Ele também determina as peculiaridades da otimização de hiperparâmetros para classificadores de redes neurais individuais que compõem o ensemble. A qualidade da rede neural otimizada obtida no artigo anterior da série é comparada com a qualidade do ensemble de redes neurais criado. São consideradas as possibilidades de melhorar ainda mais a qualidade da classificação do ensemble.
Apesar do fato de que os hiperparâmetros dos classificadores individuais no ensemble foram escolhidos intuitivamente e obviamente não são ótimos, obteve-se uma qualidade de classificação alta e estável, ambos usando a média e uma votação por maioria simples.
Resumindo tudo acima. Esquematicamente, todo o processo de criação e teste de um ensemble de redes neurais pode ser dividido em 4 etapas:
Fig.3. Estrutura de treinamento e teste do ensemble de redes neurais com o combinador de média/votação
Autor: Vladimir Perervenko