Reconhecimento de
Padrões
1. Introdução
1.1.
O que são padrões ?
1.2. Como
montamos um padrão ?
1.3. Sinais
X Padrões, Exemplos Sinais e Aplicações.
1.4. Quais
as atividades que realizamos com padrões ?
1.5. Medidas
de distância entre padrões: a distância de Hamming,
Nearest Neighbour e outras.
1.6. Como
trabalhamos com padrões usando medidas de distância simples.
1.7. Como
trabalhamos com padrões usando medidas de distância simples.
1.6. Como
trabalhamos com padrões usando medidas de distância simples.
1.7. Tesselação:
Trangulação de Delaunay e o Diagrama de Voronoi
1.8. Exercícios
1.9. Links
Úteis e Interesasantes sobre o Assunto.
1.1.
O que são padrões ?
Assunto
ministrado como aula expositiva ao quadro.
1.2.
Como montamos um padrão ?
Assunto
ministrado como aula expositiva ao quadro.
1.3.
Sinais X Padrões, Exemplos de Sinais e Aplicações.
Assunto
ministrado como aula expositiva ao quadro.
1.4.
Quais as atividades que realizamos com padrões ?
Assunto
ministrado como aula expositiva ao quadro.
1.5.
Medidas de distância entre padrões: a distância de Hamming,
Nearest Neighbour e outras
Assunto
ministrado como aula expositiva ao quadro.
1.6.
Como trabalhamos com padrões usando medidas de distância simples
Assunto
ministrado como aula expositiva ao quadro.
1.7.
Tesselação: Trangulação de Delaunay e o Diagrama
de Voronoi
Uma outra forma de gerarmos
um classificador para padrões é a de dividirmos o espaço
de dados em regiões através de algum método geométrico.
Cada região representa então uma categoria ou classe. Classificamos
padrões simplesmente olhando em que região caem. Chamamos
a este conjunto de técnicas tesselação.
A forma mais tradicional de tesselação é o Diagrama
de Voronoi.
1.7.1. O que é
um Diagrama de Voronoi ?
O Diagrama de Voronoi
foi inventado para resolver um problema simples: Como dividir uma cidade
em áreas irregulares de forma a que a área coberta por um
carteiro vinculado a uma determinada agência de correio seja otimizada
?

G.
F. Voronoi, em sua tese de outorado entitulada Ob odnom obobshchenii
algorifma nepreryvnykh drobei (Isto é russo para Sobre
uma generalização do algoritmo de quebra de cadeias.
A
transliteração do cirílico é de http://www.algebra.at/voron_d.htm),
publicada em Russo em Varsóvia, Polônia, em 1896, desenvolveu
um método onde, com base em uma triangulação préexistente
de pontos que representam os centros de alguma coisa (no caso da primeira
aplicação, agências de correio), se determina qual
a área de influência de cada um destes centros em função
da posição dos outros centros, delimitando de forma geométrica
cada área de influência.
Abaixo um exemplo encontrado
em vários sites na WWW mostrando o problema da distribuição
da área de influência dos McDonalds do centro de San Francisco,
CA., segundo Th.Ottmann.
O diagrama de Voronoi é
um método que tem extrema utilidade em reconhecimento de padrões
para delimitar as áreas de categorias ou classes em uma representação
geométrica de suas distribuições.
Chamamos estes "centros"
de centróides. Se nós temos um conjunto de padrões
constituído de um elemento típico para cada categoria que
queremos representar (protótipo), podemos nos utilizar
do diagrama de Voronoi para determinar a extensão de cada uma das
categorias, simplesmente utilizando cada um dos protótipos como
um centróide e gerando um diagrama de Voronoi sobre estes.
Para podermos gerar um diagrama
de Voronoi partimos do conjunto de protótipos e geramos primeiramente
uma triangulação. Para isto utilizamos o método da
Triangulação de Delaunay, que veremos em detalhe adiante.
Na figura abaixo, a triangulação está em vermelho.

Realizada a triangulação,
geramos as linhas que formarão as fronteiras das células
do diagrama de Voronoi. Estas fronteiras são geradas por linhas
perpendiculares ao ponto médio de cada aresta da triangulação
produzida anteriormente. As intersecções destas perpendiculares
formam os vértices das células do diagrama de Voronoi. Os
segmentos de reta da perpendicular que se extendem para além de
sua primeira intersecção com outra perpendicular nos dois
sentidos são descartados.
Na figura acima vemos em
(a) uma triangulação inicial, em (b) o diagrama de Voronoi
resultante e em (c) ambos sobrepostos.
1.7.2. Passos para a geração
de um Diagrama de Voronoi
O algoritmo que descreveremos
a aseguir é uma descrição de alto nível dos
passos necessários para a geração de um diagrama de
Voronoi para uma distribuição qualquer de dados sobre um
plano. O método pressupõe que a distribuição
de dados é bidimensional, sendo um caso particular do modelo geral.
Se desejarmso mapear uma distribuição de dados de dimensão
maior ou igual a 3 temos de utilizar planos e não segmentos de reta
como fornteiras e cada elemento da triangulação será
representado por um volume com n+1 faces, onde n é a dimensionalidade
dos dados. Assim, por exemplo, paar representar dados em 3D através
de um diagrama de Voronoi teremos de utilizar tetraedros (4 faces) como
estrutura de triangulação.
Passo
1: Determinação dos pontos para os triangulos (Triangulação
de Delaunay)
Tome sua distribuição
de dados e encontre todos os triângulos definidos por três
pontos da distribuição, de tal forma que um círculo
passando por estes três pontos não inclua nenhum outro ponto.
Passo
2: Determinação dos triangulos (Triangulação
de Delaunay)
Para cada conjunto de três
pontos satisfazendo a condição de Delaunay encontrado, gere
um triângulo.

Passo
3: Determinação das células (Diagrama de Voronoi)
P.3.1. Determine o ponto
médio de cada um adas arestas do conjunto de triângulos gerado
anteriormente. Considere cada aresta apenas uma vez.
P.3.2. Gere uma linha perpendicular
a cada uma das arestas.
P.3.3. Determine as duas
intersecções mais próximas de cada aresta com duas
outras arestas. Um intersecção para cada lado. Ignore os
segmentos de reta que seguem para além das intersecções.
P.3.4. Forme as células
do diagrama com os polgonos formados por segmentos adjacentes. Ciclos geram
células internas, polígonos abertos células externas.
1.8. Exercícios
1.8.1. Alguns problemas clássicos:
Dados em Espiral
Os conjuntos de dados em
espiral podem ser utilizados para testes de performance em algoritmos de
classificação de dados pois podem ser gerados automaticamente
com variados graus de detalhes e ruído.
1.8.1.1. A espiral simples
Neste caso temos dados distribuídos
em espiral em 2D. Cada ponto representa o protótipo de um acategoria
ou classe. A tarefa de reconhecimento de padrões é classificá-los
adequadamente, de forma a associar outros dados aleatórios a uma
das classes existente na espiral.
A figura acima mostra a linha
divisora da espiral que deve obrigatoriamente dividir as categorias das
diferentes voltas do braço da espiral e mostra também algumas
células de um diagrama de Voronoi hipotético gerado sobre
a espiral.
Você pode gerar uma
espiral simples você mesmo através de um algoritmo operando
em coordenadas polares com passo constante e raio reduzindo-se linearmente.
1.8.1.2. A espiral dupla
As espirais múltiplas
consituem um problema diferente da espiral simples. Em uma espiral múltipla,
cada braço da espiral representa uma categoria ou classe. Cada classe
é representada por muitos pontos, que são organizados sob
forma de espiral. A tarefa aqui é classificar um ponto aleatório
como pertencente a uma determinada classe, representada através
de um braço da espiral.
A figura acima mostra uma espiral
de dois braços, onde um braço representa a classe azul
e outro a classe vermelho. Cada classe
é representada por um conjunto de pontos, organizados em espiral,
de tal forma que os dois conjuntos de dados não são lineramente
separáveis. A grande maioria dos algoritmos de classificação,
inclusive redes neurais baseadas no perceptron simples (vide Minsky &
Papert, Perceptrons, 1968), falha na tentativa de gerar um classificador
capaz de separar estas duas classes.
Uma solução
para evitar o uso de um enfoque não-linear para gerar um classificador
para este conjunto de dados (como por exemplo uma rede neural bastante
grande baseada em preceptrons mas utilizando o algoritmo Backpropagation
de Rummelhart e McLelland) é gerar-se um classificador parcialmente
linear (piecewise linear). Isto pode ser obtido, por exemplo
através de comparação através de Nearest Neighbour
com todos os dados da espiral. Nearest Neighbour é um classificador
linear, mas se o usamos passo a passo com todos os elementos da espiral
vamos descobrir uma classificação ótima para um dado
aleatório. Outra opção (que no fundo é bastante
similar nas suas bases) é considerar cada elemtno dos dois conjuntos
de dados como um centroide e gerar-se um diagrama de Voronoi para a espiral
dupla. Depois classifica-se cada uma das células como pertencendo
à categoria vermelha ou azul, de acordo com a categoria de seu centroide.
A figura acima mostra as
duas superfícies de decisão de uma espiral de dois
braços aprendido através de um modelo de rede neural denominado
SEN3 (Self-Editing Nearest Neighbor Net - Rahmel & v.Wangenheim,
1994) com base em um conjunto de dados de uma espiral de dois braços
contendo ruído. Observe que a geração das duas superfícies
de decisão nã é perfeita. A rede SEN3 é
inspirada no modelo de Kohonen e utiliza Nearest Neighbour como parte de
sua regra de aprendizado.

A figura acima mostra um
diagrama de Voronoi gerado para um conjunto de dados em espiral situados
sobre a superfície de uma esfera.
1.8.2. Exercícios
para entregar
-
Prepare 4 conjuntos de dados:
2 conjuntos de dados qauisquer (um deles em 2D (duas variáveis apenas)
e outro nD (com um grande numero de variáveis)) e dois conjuntos
de dados espirais (um deles espiral simples e outro espiral de dois braços)
-
Ex.: os dados 2D e nD podem
ser utilizados a partir de conjunos de dados disponíveis nos sites
sugeridos.
-
Os dados em espiral devem ser
gerados a partir de algoritmos que você mesmo vai implementar. Inclua
no algoritmo a possibilidade de introduzir ruído na geração
dos dados (através de uma variável aleatório que modifica
levemente o comprimento do raio gerado para o próximo ponto).
-
Implemente a Distância
de Hamming, NN (Nearest Neighbour) e kNN (k-Nearest Neighbours) e teste
em todos os 4 conjuntos de dados. Observe que na espiral dupla, cada braço
da espiral em seu total representa uma classe. Ilemente um programa de
teste de tal forma que nos casos 2D e espiral dupla os dados sejam plotados
de forma colorida (duas cores para os dados originais e outras duas cores
para o resultado de classificação dos dados). Dessa forma
pode-se visualizar onde estão os dados que definem as classes e
também onde estão pontos gerados para teste e como foram
classificados. No caso da espiral simples utiliza cores alternadas, já
que cada ponto representa uma classe por si.
-
Implemente o Diagrama de Voronoi
e teste nos Dados 2D e nas duas espirais.
1.9.
Links Úteis e Interesasantes sobre o Assunto
Tesselação: Triangulação
de Delaunay e Diagrama de Voronoi
|
The Cyclops Project
German-Brazilian Cooperation
Programme on IT
CNPq GMD DLR
|
|
|