# Mapas de Kohonen

O Mapa Auto-Organizável, também conhecido como Mapa de Kohonen é uma rede neural artificial não-supervisionada de aprendizado competitivo formada por uma grade de neurônios artificiais. O algoritmo de Kohonen foi desenvolvido por Teuvo Kohonen em 1982, sendo considerado relativamente simples e com a capacidade de organizar dimensionalmente dados complexos em grupos (clusters), de acordo com suas relações. Também é usado para produzir representações de baixa dimensão e mais fáceis de visualizar e analisar de um conjunto de dados de dimensão superior (redução de dimensionalidade), preservando a estrutura topológica dos dados. Este método solicita apenas os parâmetros de entrada, mostrando-se ideal para problemas onde os padrões são desconhecidos ou indeterminados.
Este algoritmo é considerado um mapa auto-organizável (da sigla SOM, Self-organized map, em inglês), capaz de diminuir a dimensão de um grupo de dados, conseguindo manter a representação real com relação as propriedades relevantes dos vetores de entrada, tendo-se como resultado um conjunto das características do espaço de entrada.
Além disso, possui a propriedade de transformar um mapa multidimensional em bidimensional, adicionando os elementos ao novo mapa de tal forma que os objetos similares sejam posicionados próximos uns dos outros.
Apresenta duas importantes características: utiliza aproximação dos pontos similares onde os mesmos são processados separadamente e permite ao mapa obter centros em um plano bidimensional disponibilizando uma visualização facilmente compreensível.
O algoritmo de Kohonen ordena os objetos i, frequentemente organizados em uma grade retangular, atribuindo-os ao vetor modelo, denominado mi, no espaço multidimensional. Cada item xk é mapeado para a unidade do mapa ck mais adequada, conforme a menor distância entre mi e xk definida pela fórmula [2]: ck = argmin i xk – mi
Este algoritmo utiliza o método de aprendizagem por competição (competitive learning), considerado o mais comum nas RNA auto-organizáveis, permitindo que aconteça o aprendizado dividindo-se os padrões de entrada dos dados em conjuntos inseparáveis. Este método avalia os neurônios de saída da rede de maneira que ocorra uma competição entre eles, tendo-se como resultado o neurônio que possui maior ativação. A rede neural de Kohonen é composta por duas camadas: a de entrada e de Kohonen. Cada nó da camada de entrada tem a função de distribuir os valores padrões para a de Kohonen, que é um conjunto de nodos organizados de forma tabular. O vetor de entrada possui seus elementos conectados com cada nó da camada Kohonen por meio de ligações, as quais são responsáveis por manterem atualizados os valores durante o processo de treinamento da RNA.

## Interpretação

Existem duas maneiras de interpretar um SOM. Como na fase de treinamento os pesos de toda a vizinhança são movidos na mesma direção, itens semelhantes tendem a excitar neurônios adjacentes. Portanto, o SOM forma um mapa semântico onde amostras semelhantes são mapeadas próximas umas das outras e as diferentes separadas. Isso pode ser visualizado por uma Matriz U (distância euclidiana entre vetores de peso de células vizinhas) do SOM.
A outra maneira é pensar nos pesos neurais como ponteiros para o espaço de entrada. Eles formam uma aproximação discreta da distribuição das amostras de treinamento. Mais neurônios apontam para regiões com alta concentração de amostras de treinamento e menos neurônios apontam para regiões com alta concentração de amostras de treinamento e menos neurônios onde as amostras são escassas.
SOM pode ser considerado uma generalização não linear da análise de componentes principais (PCA). Foi demonstrado, usando dados geofísicos artificiais e reais, que o SOM tem muitas vantagens sobre os métodos convencionais de extração de características; como Funções Ortogonais Empíricas (EOF) ou PCA.

## Algoritmo

1) inicialize os pesos de todos os neurônios do látice, varias inicializações podem ser aplicadas, comumente a inicialização aleatória, em que cada um dos pesos do neurônio ${\vec {n}}$ recebe um numero aleatório dentro do espaço dos dados
2) Escolha um dado ${\vec {d}}$ aleatoriamente no conjunto de dados e encontre seu BMU (best match unit) que é o neurônio que possui a menor distancia entre entre o conjunto de características do dado e o conjunto de pesos do neurônio dentre todos os neurônios. A distancia mais comum empregada para medir a similaridade entre estes vetores é a distância euclidiana, porém outras métricas de similaridade podem ser aplicadas.
3) aproxime o o neurônio BMU de seu dado, esta aproximação entre o vetor de pesos e o vetor de características será feita obtendo a diferença entre os dois vetores e incrementando uma parcela desta diferença no BMU ponderada por um fator $0<\alpha \leq 1$ chamado de taxa de aprendizado que tem por objetivo suavizar o processo de ajuste dos neurônios nos dados. Para o ajuste:
Podemos concluir que quanto maior o $\alpha$ maior a aproximação do BMU com o dado.
4) Considerando as relações de vizinhança topológica aproxime também os vizinhos do BMU assim como no passo 3. Entretanto na atualização dos vizinhos será considerado mais um fator de ponderação descrito por uma função $\theta ({\vec {n_{BMU}}},{\vec {n_{V}}})$chamada função de vizinhança, $\theta$ produzirá valores menores quando o BMU e o neurônio ${\vec {n_{V}}}$ forem distantes no espaço matricial (látice).
Muitos tipos diferentes de funções de vizinhança podem ser aplicadas, na maioria dos casos ainda existe mais um parâmetro destas funções que é o raio que aumenta ou diminui os valores de $\theta$.
5) Repita Passo 2 em diante por um numero de vezes determinado, este numero pode variar muito de acordo com a quantidade de neurônios, a taxa de aprendizado e à função de vizinhança escolhida
* Portal de probabilidade e estatística