Como classificar dados com formato espiral?


9

Eu tenho mexido no playground tensorflow . Um dos conjuntos de dados de entrada é uma espiral. Quaisquer que sejam os parâmetros de entrada que eu escolher, não importa quão ampla e profunda seja a rede neural que eu crie, não consigo encaixar na espiral. Como os cientistas de dados se encaixam em dados dessa forma?


Respostas:


11

Existem muitas abordagens para esse tipo de problema. O mais óbvio é criar novos recursos . As melhores características que posso apresentar é transformar as coordenadas em coordenadas esféricas .

Eu não encontrei uma maneira de fazer isso no playground, então acabei de criar alguns recursos que devem ajudar com isso (recursos de pecado). Após 500 iterações, ele irá saturar e flutuar na pontuação de 0,1. Isso sugere que nenhuma melhoria adicional será feita e, provavelmente, eu devo aumentar a camada oculta ou adicionar outra camada.

Não é surpresa que, após adicionar apenas um neurônio à camada oculta, você obtenha facilmente 0,013 após 300 iterações. O mesmo ocorre com a adição de uma nova camada (0,017, mas após 500 iterações significativamente mais longas. Também não é surpresa, pois é mais difícil propagar os erros). Provavelmente, você pode jogar com uma taxa de aprendizado ou fazer um aprendizado adaptável para torná-lo mais rápido, mas esse não é o ponto aqui.

insira a descrição da imagem aqui


Coordenadas esféricas! Me lembrou o cálculo da graduação.
Souradeep Nanda 20/09/16

4
@SouradeepNanda você vai encontrar um monte de coisas de matemática que as pessoas acham inútil na escola extremamente importante no ML
Salvador Dali

Apenas para aqueles curiosos como eu, eu tento resultados replicam , mas as coisas não vão tão suave
codevision

4

Idealmente, as redes neurais devem ser capazes de descobrir a função por si mesmas, sem fornecermos os recursos esféricos. Após algumas experiências, consegui alcançar uma configuração em que não precisamos de nada, exceto e . Essa rede convergiu após cerca de 1500 épocas, o que é bastante longo. Portanto, a melhor maneira ainda é adicionar recursos adicionais, mas estou apenas tentando dizer que ainda é possível convergir sem eles.X1X2

Solução sem recursos adicionais


3

Trapaceando ... thetaé , é .arctan(y,x)r(x2+y2)

Em teoria, e devem funcionar, mas, na prática, eles de alguma forma falharam, embora, ocasionalmente, funcione.x2y2

insira a descrição da imagem aqui


Você pode elaborar como você "trapaceou"? Como você adicionou esses recursos? Você baixou o playground do GitHub e o modificou? Ou existe uma maneira mais direta de fazer isso?
Jim

Eu queria saber como aplicar esse hack também. Tentei fazê-lo dentro do navegador, mas não tive sorte com isso. Então eu decidi bifurcar o código fonte e adicionei os novos recursos de entrada. Você pode vê-lo aqui
Cankut 10/04

0

solução espiral de recreio de baunilha tensorflow

Este é um exemplo do playground de baunilha Tensorflow sem recursos adicionais nem modificações. A corrida para Spiral foi entre 187 e ~ 300 Epoch, dependendo. Usei a Lasso Regularization L1 para eliminar os coeficientes. Reduzi o tamanho do lote em 1 para evitar que a saída caísse demais. No meu segundo exemplo, adicionei algum ruído ao conjunto de dados e, em seguida, levantei o L1 para compensar.

insira a descrição da imagem aqui


0

A solução que cheguei após uma hora de teste geralmente converge em apenas 100 épocas .

Sim, eu sei que ele não tem o limite de decisão mais suave, mas converge muito rápido.

! [0,6% erro de teste

Aprendi algumas coisas com esse experimento em espiral:

  • A camada de saída deve ser maior ou igual à camada de entrada . Pelo menos foi o que notei no caso desse problema em espiral.
  • Mantenha a taxa de aprendizado inicial alta , como 0,1 neste caso, e ao se aproximar de um erro de teste baixo, como 3-5% ou menos, diminua a taxa de aprendizado em um ponto (0,03) ou dois. Isso ajuda a convergir mais rapidamente e evita pular os mínimos globais.
  • Você pode ver os efeitos de manter a taxa de aprendizado alta verificando o gráfico de erros no canto superior direito.
  • Para tamanhos de lote menores, como 1, 0,1 é uma taxa de aprendizado muito alta, pois o modelo falha na convergência à medida que salta em torno dos mínimos globais.
  • Portanto, se você deseja manter uma alta taxa de aprendizado (0,1), mantenha o tamanho do lote alto (10) também. Isso geralmente dá uma convergência lenta, porém mais suave.

Por coincidência, a solução que encontrei é muito semelhante à fornecida por Salvador Dali .

Por favor, adicione um comentário, se você encontrar mais intuições ou raciocínios.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.