Tenho a seguinte configuração para um projeto de pesquisa de Finanças / Aprendizado de Máquina na minha universidade: estou aplicando uma Rede Neural (Profunda) (MLP) com a seguinte estrutura em Keras / Theano para distinguir estoques com desempenho superior (etiqueta 1) dos estoques com desempenho insatisfatório ( etiqueta 0). Em primeiro lugar, apenas uso múltiplos de avaliação reais e histróricos. Por se tratar de dados de estoque, pode-se esperar dados muito barulhentos. Além disso, uma precisão estável fora da amostra acima de 52% já pode ser considerada boa neste domínio.
A estrutura da rede:
- Camada densa com 30 recursos como entrada
- Ativação Relu
- Camada de normalização em lote (sem isso, a rede não está parcialmente convergindo)
- Camada de desistência opcional
- Denso
- Relu
- Lote
- Cair fora
- .... Camadas adicionais, com a mesma estrutura
- Camada densa com ativação sigmóide
Otimizador: RMSprop
Função de perda: Entropia cruzada binária
A única coisa que faço para o pré-processamento é um redimensionamento dos recursos para o intervalo [0,1].
Agora, estou enfrentando um problema típico de sobreajuste / insuficiência, que normalmente enfrentaria com a desistência ou / e com a regularização de kernel L1 e L2. Porém, nesse caso, a regularização do Dropout e a L1 e L2 têm um impacto ruim no desempenho, como você pode ver nos gráficos a seguir.
Minha configuração básica é: NN de 5 camadas (incluindo camada de entrada e saída), 60 neurônios por camada, taxa de aprendizado de 0,02, sem L1 / L2 e sem interrupção, 100 épocas, normalização de lotes, tamanho de lote 1000. Tudo é treinado 76000 amostras de entrada (classes quase equilibradas de 45% / 55%) e aplicadas a aproximadamente a mesma quantidade de amostras de teste. Para os gráficos, mudei apenas um parâmetro de cada vez. "Perf-Diff" significa a diferença média de desempenho das ações classificadas como 1 e ações classificadas como 0, que é basicamente a principal métrica no final. (Mais alto é melhor)
No caso l1, a rede está basicamente classificando cada amostra para uma classe. O pico está ocorrendo porque a rede está fazendo isso novamente, mas classifica 25 amostras aleatoriamente corretas. Portanto, esse pico não deve ser interpretado como um bom resultado, mas como um desvio.
Os outros parâmetros têm o seguinte impacto:
Você tem alguma idéia de como eu poderia melhorar meus resultados? Existe um erro óbvio que estou cometendo ou há uma resposta fácil para os resultados da regularização? Você sugeriria fazer qualquer tipo de seleção de recurso antes do treinamento (por exemplo, PCA)?
Respostas:
Dado que são dados financeiros, é provável que as distribuições de recursos em seus conjuntos de trens e validação sejam diferentes - um fenômeno conhecido como deslocamento covariável - e as redes neurais não tendem a jogar bem com isso. Ter distribuições de recursos diferentes pode causar super ajuste, mesmo que a rede seja relativamente pequena.
Dado que l1 e l2 não ajudam as coisas, suspeito que outras medidas de regularização padrão, como adicionar ruído a entradas / pesos / gradientes, provavelmente não ajudarão, mas pode valer a pena tentar.
Eu ficaria tentado a experimentar um algoritmo de classificação que seja menos afetado pelas magnitudes absolutas de características, como um aumento de gradiente nas árvores.
fonte