A automação de processos sempre foi uma importante aplicação computacional. Em particular, o interesse na automação na classificação de entidades tem crescido, tendo em vista a sua aplicação na indústria e na pesquisa, em particular nas ciências biomédicas.
Uma possibilidade para esses problemas é a parametrização das características dessas entidades e sobre esses parâmetros definir um critério de decisão que permita classificar os elementos com uma boa confiabilidade. Tal parâmetro é denominado classificador.
Assim queremos definir um classificador cujo erro na classificação seja mínimo. Tendo isso em vista esses classificadores são construídos baseados nas distribuições das classes envolvidas. Quando essas distribuições são desconhecidas é utilizada uma amostra denominada conjunto de treino cujos elementos de uma determinada classe serão adotados como representante de toda classe. Por isso convém que essa amostra seja suficientemente grande e bem distribuída.
A representatividade da amostra tem um papel importante na definição do classificador pois, conforme diminui o tamanho da amostra, mais perceptível são os efeitos do "overfitting" e/ou "underfitting".
Temos o fenômeno do underfitting quando devido a uma amostra muito pouco representativa, elementos de grande participação/importância são desconsiderados ou tem menor peso que o ideal fazendo assim que o classificador cubra uma extensão menor que a adequada.
Temos o fenômeno do overfitting quando devido à consideração excessiva de um ruído na amostra ou de simplesmente uma amostra anômala acarretando que o classificador acaba desviando o classificador de forma que este considere uma extensão maior que a ideal.
Assim, como foi visto na seção passada, temos que é desejável que o conjunto de treino utilizado na definição do classificador seja grande o suficiente para cobrir todo conjunto mantendo suas devidas proporções. No entanto, para alguns casos onde o processo de extração de características se trata de uma tarefa custosa, a obtenção de um conjunto extenso se torna inviável. Por exemplo, em estudos relacionados ao genoma de uma determinada espécie, o custo da extração das expressões gênicas de uma única amostra pode chegar a centenas de dólares.
Em vista disso, temos que através dos métodos convencionais podemos obter classificadores excessivamente imprecisos impossibilitando assim a sua aplicação. Assim, o objetivo dessa iniciação científica é o estudo, implementação e teste de uma abordagem que amenize essas variações no classificador.
Como os ruídos são particularmente críticos quando se possui pequenas amostras, então tentaremos encontrar classificadores para as características que sejam pouco sensíveis a estes ruídos. Partindo dessa idéia foi desenvolvido os chamados “Strong Features Sets”. Basicamente, para cada ponto do conjunto de treino é feito um espalhamento dos pontos segundo uma gaussiana e o classificador é desenvolvido sobre essa distribuição. Daí o algoritmo seleciona o conjunto de características que se preservam fortes em relação a espalhamento maiores. O erro provê uma medida da força de um par de características em função de um espalhamento.
Considere o conjunto de características( variáveis aleatórias ) X1 , X2 , X3 , ... , Xd as quais formam o vetor de características X = ( X1 , X2 , X3 , ... , Xd ). Um problema de classificação binária envolvendo X é determinado pela variável aleatória binária Y, que pode receber os valores 0 e 1. O classificador ψ é a função de X onde ψ(X) é um estimador de Y. O erro de ψ é definido pela esperança da diferença de Y e ψ(X)( ε[φ]=E[|Y-ψ(X)|] ), ou seja o erro é igual a probabilidade de uma classificação errônea( ε[φ] = P(ψ(X)≠Y) ).
O uso das características fortes (Strong Features) pode ser aplicado para o desenvolvimento de qualquer classificador, mas nesse estudo nos restringiremos a perceptrons ( classificadores lineares no espaço euclidiano ). Para um vetor de características X = ( X1 , X2 , X3 , ... , Xd, o perceptron é definido por ψ(X)=T( a0 + a1X1 + a2X2 + ... + adXd )
Dados uma distribuição conjunta de um grupo de características, o estimador linear optimal de Y é determinado por um vetor de pesos a. Seja Rx a matriz de correlação de X e E[XY] o vetor de correlação entre X e Y. Temos que se Rx for não singular, o vetor de pesos ótimo é dado por a=Rx-1E[XY]. Caso Rxfor singular, então Rx-1 é substituída pela pseudo-inversa de Rx. Assim para uma amostra de tamanho n temos
Daí aplicamos um espalhamento com RZ e obtemos um novo vetor de pesos w
E por fim obtemos o perceptron classificador aplicando T(um threshold) sobre o estimador linear determinado por w.
Se Z é parametrizado pela sua variância σ², então o perceptron resultante, ψσ é parametrizado por essa variância. Denotaremos de Z o espalhamento e de σ-perceptron o ψσ.Daí o erro εσ, para ψσ pode ser calculado analiticamente a partir do hiperplano definido. E sejam A0 e A1 referentes aos possíveis valores de X como pertencentes a classe 0 ou 1 respectivamente. Assim, para um espalhamento Z de variância σ², temos
Ou seja, temos que cada ponto xk da amostra participa do erro total com sua extensão( resultante de RZ ) que está sendo erroneamente classificada.
Com os classificadores lineares desenvolvidos, somos capazes de classificar um elemento dentre dois grupos distintos. No entanto, podemos ter mais do que duas possibilidades para um elemento. Nesses casos, podemos fazer as decisões em árvores, que consiste de uma série de classificações de conjuntos cada vez menores até que seja decidido por uma das classes.
O sistema desenvolvido tem como objetivo a implementação do classificador descrito acima para a seleção de pares de características fortes na classificação de diversos grupos. A implementação foi feita na linguagem C e baseada num projeto já existente para a classificação de dois grupos.
A implementação feita nessa iniciação científica foi baseada numa prévia implementação do desenvolvimento de classificadores a partir dos Strong Feature Sets chamada gclass. O gclass foi implementado para encontrar os classificadores e seus respectivos erros de classificação dentre duas classes para um dado σ.
Temos que o gclass calcula para cada permutação de características( nesse caso não necessariamente pares ) o erro referente ao espalhamento Z ponto a ponto. Isso quer dizer que a operação do cálculo do erro associado a um ponto, idealmente, deve ser muito leve já que esta será chamada para cada ponto para cada combinação de c características. Felizmente, esse cálculo pode ser feito facilmente tendo em vista que o espalhamento é feito de forma simétrica. Assim para qualquer ponto, temos que seu erro está associado exclusivamente a sua distância ao classificador e o erro é dado pela distribuição complementar da gaussiana unidimensional parametrizada por essa distância.
Esse sistema foi desenvolvido visando suprir a deficiência do gclass para múltiplas classes, uma vez que apesar de ser possível a utilização do gclass para a classificação numa árvore de decisão, o erro estimado por este estaria incorreto já que nesses casos as informações das classificações de nós anteriores seriam desconsiderados. Mais especificamente, temos que a cada passo da árvore, o espaço amostral é restringido e conseqüentemente dependências são criadas.
Como foi visto anteriormente, não podemos simplesmente calcular o erro referente a um ponto somando o erro para cada classificador que esteja no seu caminho na árvore. Isso porque seja o grupo 0 o grupo que estaremos sempre associando a classe desse ponto. Então estaremos calculando a integral sobre A0,0 em um primeiro passo e sobreA0,1 em um passo seguinte. Como a integral representa o hiper-volume sob a função dada limitada pelos seus parâmetros. Tendo isso em vista, é fácil perceber que se houver intersecção entre A0,0 e A0,1, os quais limitam as funções de sua integral, também haverá um intersecção nesse hiper-volume calculado. Ou seja se esses erros forem simplesmente somados entre si, estaremos obtendo um erro maior que o real já que nessas intersecções parte do valor estará sendo reconsiderado.
Para resolver o problema, poderiamos calcular o erro referente a todos os classificadores de uma única vez, ou então continuarmos a fazer o cálculo separadamente e posteriormente subtrair o erro que foi reconsiderado. Optaremos pela segunda opção, pois o cálculo do erro associado a uma região arbitrária não é uma tarefa trivial e muito possivelmente é computacionalmente cara. Além disso, como veremos a seguir, podemos encontrar uma boa aproximação do erro da intersecção de forma simples e relativamente pouco custosa.
Como optamos por deduzir da soma dos erros as porções reconsideradas, a nossa tarefa se resume a encontrar esses erros, já que possuimos um algoritmo para o calculo dos erros referentes a cada um dos classificadores.
Inicialmente, vamos considerar apenas a intersecção de erro para dois classificadores c0 e c1. Para calcular esse erro vamos dividir a área sobre a qual esse erro será calculado em pequenos retângulos, que, como veremos posteriormetne, facilitará bastante as operações ao custo de uma pequena perda de precisão do erro.
Mas antes de calcularmos os retângulos e seus respectivos erros, vamos fazer uma transformação de coordenadas definindo um novo eixo o qual orientará os nossos retângulos e cálculos. Esse eixo é definido como a bissetriz do ângulo formado pelos dois classificadores, do quadrante em que o erro ocorre para ambos os classificadores( area cujo erro queremos estimar ).
Definido o novo eixo, o sistema é rotacionado de forma que o eixo seja paralelo ao eixo x do sistema. Daí os retângulos são definidos ao longo desse eixo a partir do ponto de intersecção dos classificadores até o infinito( um retângulo distante o suficiente para que seu erro não seja significativo ).
Definidos os retângulos, agora basta encontrar seus respectivos erros e somá-los. Dessa forma obteremos uma estimativa do erro da intersecção. Note que a precisão do cálculo do erro pelos retângulos está em função da sua base, quanto menor esta for, maior será a precisão do erro, porém maior será o custo computacional.
O cálculo por retângulos é de fato vantajoso, pois dessa forma podemos encontrar uma boa aproximação do erro através de uma soma de produtos. Isso se deve novamente pela simetria da gaussiana, que permite que calculemos os erros em função da distância. Além disso, a simetria também acarreta na independência de eixos paralelos o que nos permite calcular o erro do retângulo simplesmente multiplicando os erros referentes a cada uma das suas dimensões.
Uma vez que sabemos calcular o erro da intersecção, agora podemos calcular o erro total somando os erros referentes a cada um dos classificadores e subtraindo os erros das intersecções. Vale ressaltar que na subtração dos erros das intersecções, nem todos os pares de classificadores são relevantes. Temos que as restrições impostas pelos classificadores formam uma borda para cada classe. Assim para uma dada classe, as intersecções relevantes são aquelas cujo ponto de intersecção pertença a essa borda. Essas intersecções serão denominadas internas e as demais externas. Isso porque, apesar do pares de classificadores externos”( com o ponto de intersecção externo à borda ) terem uma região em comum cujo erro é calculado mais de uma vez, quando o erro da intersecção é calculado para os pares de classificadores internos( com o ponto de intersecção pertencente à borda ) as áreas calculadas também possuirão regiões em comuns correspondem a essas áreas aparentemente ignoradas.
Terminada a implementação, o sistema foi testado com a utilização de dados gerados computacionalmente para a verificação de consistência do erro calculado e se a escolha de características foi boa. Para uma amostra com 5 classes cada uma contento 701 amostras, foi retirada 1 subamostra a qual continham 20 amostras para cada classe. A análise comparativa do erro real com o erro estimado dado os classificadores encontrados no teste feito podem ser encontrados aqui junto aos dados obtidas na pesquisa.
Como pode-se ver apesar de haver algumas flutuações significativa no erro encontrado, no geral os erros estão bem estimados e quanto a ordem dos elementos, temos que o melhor resultado encontrado na subamostra se encontra entre os 10 melhores resultados obtidos da amostra real.
A grande desvantagem do projeto desenvolvido quanto ao gclass é que este está restrito a análise das características duas a duas quando nem sempre são suficientes para uma boa distinção das classes. Por isso seria bastante interessante a extensão desse projeto para 3 ou mais dimensões.Note que a abordagem tomada no caso 2D também seria possível em dimensões maiores pelo uso de hipercubos, note também que estaremos aproximando o cálculo do erro referente ao hipercubo para cada dimensão extra que temos.
Outro detalhe importante que não foi abordado nessa implementação foi a escolha da árvore de decisão que nesse caso está fixa. A escolha da árvore é interessante pois, ela determina como as classes são agrupadas. Isso é importante já que o erro de classificação varia dependendo de como as características são agrupada. Como idealmente as classe devem ser agrupadas por proximidade e separadas por diferenças. Assim uma possível solução seria tendo em vista as distâncias entre as médias de cada classe e tentar separar aquelas que tem maior distância, daí as demais classes devem ser agrupadas a aquelas que tem menor distância a aquelas que estão sendo separadas.
Quando me decidi pela iniciação científica, o intuito inicial era o estudo e desenvolvimento na área de análise e processamento de imagens, no entanto a iniciação científica acabou voltando-se para uma pesquisa já em andamento voltada para a pesquisa genômica. Esse fato teve aspectos tanto positivos como negativos. Creio que o principal aspecto positivo foi o contato, mesmo que superficial, com um domínio diferente. Possibilitando assim, uma visão geral dessa crescente área de pesquisa. Como aspecto negativo, temos que tendo em vista o foco procedural da pesquisa, o contato foi bastante superficial nessa nova área, mas nem por isso manteve o intuito inicial de estudo na área de análise e reconhecimento de formas, já que apesar de ser possível a aplicação em reconhecimento de imagens, no geral é possivel obter um conjunto de tamanho satisfatório o que torna desnecessária essa abordagem. Outro fator negativo foi o total desconhecimento da área de aplicação o que me desmotivou um pouco, já que tinha um caminho certo mas o destino estava muito obscuro.
Definitivamente o BCC foi uma fase muito importante para mim. O mais engraçado é que você não se dá conta do quanto aprendeu nos quatro anos de curso até que tenha de colocar esse conhecimento a prova. Talvez por isso acho que foi interessante esse projeto de IC, pois ele me levou a estudar assuntos novos e rever outros previamente vistos que talvez não tenha dado a devida atenção. De qualquer forma, gostaria de agradecer meus colegas e professores que ajudaram muito na minha formação. Além disso gostaria de ressaltar as disciplinas que considero as mais importantes para meu desenvolvimento e projeto.
Posso dizer que a experiência da iniciação científica foi bastante positiva. E devo boa parte desse mérito ao meu professor orientador que dadas as freqüentes reuniões que me serviam como uma cobrança me mantiveram no rumo mas ao mesmo tempo ele soube ser paciente e compreensivo quanto aos meus outros afazeres dentro e fora do BCC. Além disso ele se mostrou muito disposto a explicar e me ajudar nos pontos onde tive mais dificuldades.
A experiência obtida nesse projeto e na disciplina que cursei no ICB foram bastante positivas o que possibilitaria uma continuação do projeto, talvez dessa vez mais a fundo. No entanto, meu interesse na área de análise e processamento de imagens tão como de computação gráfica só aumentou nesse último ano no qual tive mais contato com essas áreas. E por conseqüencia disso, creio que qualquer estudo posterior estará relacionado de alguma forma a alguma dessas áreas.