terça-feira, 10 de fevereiro de 2009

Nota acerca de Espaço de Características

Nestes últimos dias um problema tem me rondado da seguinte forma: dois amigos me indagaram (quase no mesmo dia) sobre problemas relacionados a representação do espaço de características e as consequências de uma má representação nos dados de treinamento.
Pensei cá comigo um exemplo bem simples de uma só dimensão*, vamos lá:
Suponha que desejamos fazer um classificador para prever, com base apenas em uma pesagem, se o animal pesado trata-se ou não de um elefante.
Agora imagine que, no dia do levantamento da base de dados para treinamento (na verdade seriam precisas duas bases de dados, uma para treinamento e outra para validação, mas isto é 'pano' para outro post) só levam, dos exemplos negativos (chamados assim por corresponderem a exemplos para os quais o classificador deve gerar um NAO como saída),  animais de pequeno porte, como pequenos macacos, gatos, cachorros...
Poderiamos escrever nossa base como (em Kg)**:
Positiva = {3750, 4500, 6000, 3000, 5300, 4200, 5000, 1501}
Negativa = {22, 15, 17, 30, 50, 55, 10, 5, 23, 37, 45, 51}
Fácil ver que este é um problema bem fácil de ser resolvido. Para o problema, independente do método, suponhamos que temos um threshold (limiar) no classificador e que seu valor deve ser encontrado através de um algoritmo de aprendizado qualquer. Aplicando o problema a base de treinamento, digamos que o algoritmo de aprendizado gere como limiar o valor 723 (escolhi este valor por ser a mediana entre o maior valor da base negativa, 55,  e o menor da base positiva, 1501)***. Com uma função simples de classificação do tipo "se valor maior que limiar, SIM (é um elefante); caso contrário, NAO" podemos observar que na base de treinamento o classificador teria 100% de acerto facilmente.
Não sei se está dando para perceber aonde quero chegar mas imagine se colocam um sistema na portaria de recepção de um zoológico separando os elefantes dos outros animais com base neste classificador. Assim que chegarem rinocerontes, búfalos e até algumas zebras ou mesmo felinos avantajados o sistema erraria feio.
Pode-se ainda argumentar: ao menos ele separou os animais mais pesados dos mais leves. Contra isto observe que o algoritmo de aprendizado poderia ter gerado como saída o limiar 56 que continuaria dando 100% na base positiva e agora sim tornando-se um sistema catastrófico.
Aonde quero chegar? Uma má representação da realidade pode gerar grandes problemas durante a utilização do sistema em ambientes reais. Levando para o campo dos sistemas 'não-inteligentes', seria como se fizéssemos apenas os testes que passam em um sistema, deixando de fora os mais problemáticos.
Por isso, tome extremo cuidado na hora de representar o problema, treine com a maior quantidade de dados (válidos) possível e, assim que adquirir, use e abuse da sua experiência!
Observações finais:
  1. Você pode sugerir aumentar o número de dimensões para resolver o problema, mas isto pode apenas maquiá-lo;
  2. Este problema é dificílimo de ser visualizado em dimensões maiores, imaginem como observar isto em um sistema de processamento de áudio, de imagens ou ainda pior, com 10, 100, 1000 dimensões;
  3. Nada melhor que um intenso e qualitativo estudo do problema em questão para evitar estas armadilhas;
  4. Existem ferramentas estatísticas de tratamento de dados que podem ajudar numa possível análise de dados ainda no pré-processamento, mas nenhuma delas resolve o problemas 100%.
Abraço e até a próxima!

* dimensão em problemas de reconhecimento de padrões é cada uma das caracteríticas que você utiliza para 'representar' o seu indivíduo. Ou seja, se você representa uma pessoa por seu peso e altura, este é um problema de dimensão 2, ou ainda bi-dimensional, 2D... Facilmente, o espaço pode ser pensado como um plano cartesiano e o espaço de características como um sub-plano desse espaço (altura entre zero e 10 metros e peso entre zero e 500 Kgs? Inclusive estes valores limitantes podem gerar vários problemas quando mal escolhidos, mas falarei disto em outro post).
** segundo o Wikipedia elefantes podem nascer com 90 Kg e ter ate 12 toneladas.
*** Este valor pode ser questionado mas muitos dos bons algoritmos de hoje chegariam a este valor como ótimo dentro da base apresentada.

sexta-feira, 6 de fevereiro de 2009

Resumos - RBC

Como parte das atividades do grupo, segue o primeiro pequeno resumo. A intenção é ter resumos introdutórios sobre diversos temas relacionados à area e, com o tempo, ir aprofundando o conhecimento nestes temas.
Para o primeiro desses resumos, escolhi como tema o RBC, abreviação de Raciocínio Baseado em Casos, um paradigma de Inteligência Artificial que utiliza experiências passadas para solucionar  problemas correntes. A mais conhecida técnica deste paradigma é o K-NN ou K Vizinhos mais Próximos, técnica simples, elegante e que pode solucionar uma grande quantidade de problemas além de poder ser facilmente utilizado na construção de uma solução mais complexa através de hibridação.

quinta-feira, 5 de fevereiro de 2009

Recognize, World!

Hello World!!!
Este blog/grupo foi criado com a intenção de reunir conhecimentos diversos nas áreas de Reconhecimento de Padrões, Aprendizagem de Máquinas, Redes Neurais, Sistemas Híbridos, Algoritmos/Modelos Genéticos ou baseados na natureza e outros métodos (estatísticos ou não). Enfim, toda a ciência, engenharia e matemática envolvidas neste facinante campo da inteligência artificial relacionado à capacitação de máquinas a fim de que, cada vez mais, elas se aproximem (ou ultrapassem) a capacidade humana em determinadas funções as quais os humanos (ainda) têm o domínio. Bem, não é intuito deste post inicial dar uma definição formal, isto poderá e deverá ser feito mais tarde. A intenção aqui é mais incentivar a participação de todos.
Pretendemos aqui criar um ambiente para a livre circulação de informação, compartilhando conhecimento através da divulgação de resumos, tutorias, notícias da área, discussões, códigos, etc.
O grupo é inicialmente formado por três membros mas este número pode crescer a medida que sentirmos a vontade e efetiva participação de outros membros. Os membros 'fundadores' são: eu mesmo :D (Joao Paulo Magalhães), Tiago Figuerêdo e Marcos Artur. Não somos super especialistas em nada, por isto a participação de todos é importante, inclusive na correção das informações colocadas aqui ou no envio de textos diversos para publicação.
Enjoy us!!!