Universidade Federal de Ouro Preto (UFOP) Programa de Pós-Graduação em Ciência da Computação (PPGCC) Reconhecimento de Padrões Classificadores Lineares David Menotti, Ph.D. www.decom.ufop.br/menotti Objetivos • Introduzir o conceito de classificação linear. – LDA – Funções Discriminantes Lineares • Perceptron • SVM Introdução • Para utilizar uma função discriminante linear (Linear Discriminant Function) precisamos ter: – Dados rotulados (supervisão) – Conhecer o shape da fronteira – Estimar os parâmetros desta fronteira a partir dos dados de treinamento. • Nesse caso uma reta. Introdução: Idéia Básica Ruim Boa • Suponha duas classes • Assuma que elas são linearmente separáveis por uma fronteira l(θ) • Otimizar o parâmetro θ para encontrar a melhor fronteira. • Como encontrar o parâmetro – Minimizar o erro no treinamento – O ideal é utilizar uma base de validação. Introdução • Funções discriminantes podem ser mais gerais do que lineares • Vamos focar em problemas lineares – Mais fácil de compreender – Entender a base da classificação linear • Diferentemente de métodos paramétricos, não precisamos conhecer a distribuição dos dados – Podemos dizer que temos uma abordagem não paramétrica. Análise Discriminante Linear LDA (Linear Discriminant Analysis) • LDA tenta encontrar uma transformação linear através da maximização da distância entreclasses e minimização da distância intra-classe. • O método tenta encontrar a melhor direção de maneira que quando os dados são projetados em um plano, as classes possam ser separadas. Reta ruim Reta boa LDA LDA • Diferença entre PCA e LDA quando aplicados sobre os mesmos dados LDA • Para um problema linearmente separável, o problema consiste em rotacionar os dados de maneira a maximizar a distância entre as classes e minimizar a distância intra-classe. LDA Tutorial • 1) Para um dado conjunto de dados, calcule os vetores médios de cada classe μ1,μ2 (centróides) e o vetor médio geral,μ. Centroide Classe +1 Centroide Classe -1 Centroide geral LDA Tutorial • Calcular as médias de cada classe e a total. LDA Tutorial • Calcular o espalhamento de cada classe Si = SUM{(m-xi)(m-xi)t} • Calcular o espalhamento entre classes (within class) SW = S1 + S2 priors LDA Tutorial • Calcular a inversa de SW – Custo??? • Finalmente, o vetor projeção w = SW-1 (m1 – m2) • Reprojetando os vetores sobre w x 1’ = ( x 1 w ) w t x 2’ = ( x 2 w ) w t LDA Tutorial • Para visualizar a transformação, basta aplicar a função discriminante a todos os dados LDA Tutorial Taxa de Reconhecimento = 99% Exercício • Gere duas distribuições • Classifique os dados usado LDA • Verifique o impacto da sobreposição das distribuições. Tutorial 1/2 • • • • • • • • • • x1 = [ 2.95 6.63; 2.53 7.79; 3.57 5.65; 3.16 5.47]; x2 = [2.58 4.46; 2.16 6.22; 3.27 3.52]; m1 = mean(x1);m2 = mean(x2);m = mean([x1;x2]); S1 = (x1-repmat(m1,size(x1,1),1))'* ... (x1-repmat(m1,size(x1,1),1)); S2 = (x2-repmat(m2,size(x2,1),1))'* ... (x2-repmat(m2,size(x2,1),1)); S = S1 + S2; w=inv(S)*(m1-m2)'; Tutorial 2/2 • • • • • • • • • • • • • • figure,hold on axis([0 8 0 8]); plot(x1(:,1),x1(:,2),'bx'); plot(m1(1),m1(2),'bd'); plot(x2(:,1),x2(:,2),'rx'); plot(m2(1),m2(2),'rd'); plot(m(1),m(2),'kd'); plot([w(1) 0],[w(2) 0],'g'); w = w/norm(w); x1l=(x1*w)*w‘; x2l=(x2*w)*w'; plot(x1l(:,1),x1l(:,2),'bo'); plot(x2l(:,1),x2l(:,2),'ro'); Tutorial 2 1/3 • http://www.eeprogrammer.com/tutorials/Matlab/discriminant_analyses.html • a b c d e = = = = = 5*[randn(500,1)+5, randn(500,1)+5]; 5*[randn(500,1)+5, randn(500,1)-5]; 5*[randn(500,1)-5, randn(500,1)+5]; 5*[randn(500,1)-5, randn(500,1)-5]; 5*[randn(500,1), randn(500,1)]; Group_X = [a;b;c]; Group_Y = [d;e]; All_data = [Group_X; Group_Y]; All_data_label = []; for k = 1:length(All_data) if k<=length(Group_X) All_data_label = [All_data_label; 'X']; else All_data_label = [All_data_label; 'Y']; end end testing_ind = []; for i = 1:length(All_data) if rand>0.8 testing_ind = [testing_ind, i]; end end training_ind = setxor(1:length(All_data), testing_ind); Tutorial 2 2/3 • http://www.eeprogrammer.com/tutorials/Matlab/discriminant_analyses.html • [ldaClass,err,P,logp,coeff] = classify(All_data(testing_ind,:),... All_data((training_ind),:),All_data_label(training_ind,:),'linear'); [ldaResubCM,grpOrder] = confusionmat(All_data_label(testing_ind,:),ldaClass) K = coeff(1,2).const; L = coeff(1,2).linear; f = @(x,y) K + [x y]*L; h2 = ezplot(f,[min(All_data(:,1)) max(All_data(:,1)) min(All_data(:,2)) max(All_data(:,2))]); hold on [ldaClass,err,P,logp,coeff] = classify(All_data(testing_ind,:),... All_data((training_ind),:),All_data_label(training_ind,:),'diagQuadratic'); [ldaResubCM,grpOrder] = confusionmat(All_data_label(testing_ind,:),ldaClass) K = coeff(1,2).const; L = coeff(1,2).linear; Q = coeff(1,2).quadratic; f = @(x,y) K + [x y]*L + sum(([x y]*Q) .* [x y], 2); h2 = ezplot(f,[min(All_data(:,1)) max(All_data(:,1)) min(All_data(:,2)) max(All_data(:,2))]); hold on Tutorial 2 3/3 • http://www.eeprogrammer.com/tutorials/Matlab/discriminant_analyses.html • Group_X_testing = []; Group_Y_testing = []; for k = 1:length(All_data) if ~isempty(find(testing_ind==k)) if strcmp(All_data_label(k,:),'X')==1 Group_X_testing = [Group_X_testing,k]; else Group_Y_testing = [Group_Y_testing,k]; end end end plot(All_data(Group_X_testing,1),All_data(Group_X_testing,2),'g.'); hold on plot(All_data(Group_Y_testing,1),All_data(Group_Y_testing,2),'r.'); Funções Discriminante Lineares • Em geral, uma função discriminante linear pode ser escrita na forma g ( x) wT x w0 • w é conhecido como o vetor dos pesos e w0 representa o bias Funções Discriminante Lineares • é um hiperplano – Um hiperplano é • Um ponto em 1D • Uma reta em 2D • Um plano em 3D Funções Discriminante Lineares • Para duas dimensões, w determina a orientação do hiperplano enquanto w0 representa o deslocamento com relação a origem Perceptron • Um classificador linear bastante simples, mas bastante importante no desenvolvimento das redes neuronais é o Perceptron. – O perceptron é considerado como sendo a primeira e mais primitiva estrutura de rede neuronial artificial. – Concebido por McCulloch and Pits na década de 50. • Diferentemente do LDA, o perceptron não transforma os dados para fazer classificação. – Tenta encontrar a melhor fronteira linear que separa os dados. Perceptron x1 x2 xn w1 w2 wn (.) w0 y wi xi w0 y A função de ativação normalmente utilizada no perceptron é a hardlim (threshold) 1 x 0 f ( x) 0 x 0 A função de ativação é responsável por determinar a forma e a intensidade de alteração dos valores transmitido de um neurônio a outro. Perceptron: Algoritmo de Aprendizagem 1. 2. 3. 4. 5. Iniciar os pesos e bias com valores pequenos, geralmente no intervalo [0.3-0.8] Aplicar um padrão de entrada com seu respectivo valor desejado de saída (ti) e verificar a saída y da rede. Calcular o erro da saída e t j a Se e=0, volta ao passo 2 Se e<>0, 1. 2. 6. • Atualizar pesos wi wi e xi Atualizar o bias b bold e old Voltar ao passo 2 Critério de parada: Todos os padrões classificados corretamente. Perceptron: Exemplo • Considere o seguinte conjunto de aprendizagem. 2 X 2 t 0 -2 -2 1 -2 2 0 -1 1 1 Nesse tipo de algoritmo é importante que os dados sejam apresentados ao algoritmo de treinamento de maneira intercalada (shuffle) Perceptron: Exemplo • Nesse exemplo, vamos inicializar os pesos e bias com 0, ou seja, w =(0,0) e b = 0 Apresentando o primeiro padrão (x1) a rede: 2 y hard lim[0,0] 0 hard lim(0) 1 2 Calcula-se o erro e ti y 0 1 1 Como o erro é diferente de 0, atualizam se os pesos e o bias W W old e xi [0,0] (1[2,2]) [2,2] b bold e 0 (1) 1 Apresentando o segundo padrão (x2) a rede: 2 y hard lim[2,2] (1) hard lim(7) 1 2 Calcula-se o erro e ti y 1 1 0 Como o erro é 0, os pesos e o bias não precisam ser atualizados. Apresentando o terceiro padrão (x3) a rede: 2 y hard lim[2,2] (1) hard lim(1) 0 2 Calcula-se o erro e ti y 0 0 0 Como o erro é 0, os pesos e o bias não precisam ser atualizados. Apresentando o quarto padrão (x4) a rede: 1 y hard lim[2,2] (1) hard lim(1) 0 1 Calcula-se o erro e ti y 1 0 1 W W old e xi [2,2] (1[1,1]) [3,1] b bold e 1 1 0 Perceptron: Exemplo • O processo acaba quando todos os padrões forem classificados corretamente. • Para esse exemplo, os pesos finais são w=[-1,-3] e b = 2. Determinando a fronteira • No caso bi-dimensional, a fronteira de decisão pode ser facilmente encontrada usando a seguinte equação W1 x b y W2 Considere o seguinte exemplo, w = [1.41, 1.41], b = 0.354 Escolha duas coordenadas x, para então encontrar os y’s correspondentes x=[-3,3] Efeito do bias diferente de zero. Para x = -3, y = 2.74 Para x = 3, y = -3.25 SVM • Proposto em 79 por Vladimir Vapnik • Um dos mais importantes acontecimentos na área de reconhecimento de padrões nos últimos 15 anos. • Tem sido largamente utilizado com sucesso para resolver diferentes problemas. SVM - Introdução • Como vimos anteriormente, o perceptron é capaz de construir uma fronteira se os dados forem linearmente separáveis. A B Mas qual a fronteira que deve ser escolhida?? SVM - Introdução • Suponha que a fronteira escolhida é a A. • Como ela está bem próxima da classe azul, seu poder de generalização é baixo – Note que um novo elemento (dados não usados no treimamento), bem próximo de um azul será classificado erroneamente. SVM - Introdução • Escolhendo a fronteira B, podemos notar que o poder de generalização é bem melhor. • Novos dados são corretamente classificados, pois temos uma fronteira mais distante dos dados de treinamento. Maximização da Margem • O conceito por traz do SVM é a maximização da margem, ou seja, maximizar a distância da margem dos dados de treinamento Distância Pequena Distância Grande Hiperplano ótimo: Distância da margem para o exemplo da classe positiva é igual a distância da margem para o exemplo da classe negativa. Vetores de Suporte • São os exemplos da base de treinamento mais próximos do hiperplano. – O hiperplano é definido unicamente pelos vetores de suporte, os quais são encontrados durante o treinamento. – Minimização de uma função quadrática • Alto custo computacional. SVM: Decisão f ( x) i yi K ( x, xi ) b i • A função de decisão pode ser descrita pela fórmula acima, na qual, – K é a função de kernel, – α e b são os parâmetros encontrados durante o treinamento, – xi e yi são os vetores de características e o label da classe respectivamente. Soft Margin • Mesmo para dados que não podem ser separados linearmente, o SVM ainda pode ser apropriado. • Isso é possível através do uso das “variáveis de folga” (parâmetro C). Para um bom desempenho, os dados devem ser “quase” linearmente separáveis Soft Margin • Quanto maior o número de variáveis de folga (C), mais outliers serão descartados. • Se C for igual a zero, temos um problema linearmente separável. Mapeamento não Linear • A grande maioria dos problemas reais não são linearmente separáveis. • A pergunta então é: “Como resolver problemas que não são linearmente separáveis com um classificador linear?” Projetar os dados em um espaço onde os dados são linearmente separáveis. xi Espaço de entrada ( xi ) Espaço de características Mapeamento não Linear • Projetar os dados em outra dimensão usando uma função de kernel (kernel trick). • Encontrar um hiperplano que separe os dados nesse espaço. Em qual dimensão esses dados seriam linearmente separáveis? ( x) ( x, x 2 ) 1D 2D Kernel Trick • A função que projeta o espaço de entrada no espaço de características é conhecida como Kernel • Baseado no teorema de Cover – Dados no espaço de entrada são transformados (transf. não linear) para o espaço de características, onde são linearmente separáveis. • O vetor ( xi ) representa a “imagem” induzida no espaço de características pelo vetor de entrada Exemplo Exemplo Kernel Trick • Permite construir um hiperplano no espaço de característica sem ter que considerar o próprio espaço de características de forma explícita. • Toda vez que um produto interno entre vetores deve ser calculado, utiliza-se o kernel. • Uma função de kernel deve satisfazer o teorema de Mercer para ser válida. Exemplos de Kernel Tomada de Decisão • SVM são classificadores binários, ou seja, separam duas classes. • Entretanto, a grande maioria dos problemas reais possuem mais que duas classes. • Como utilizar os SVMs nesses casos? – Pairwise, um-contra-todos Pairwise • Consiste em treinar classificadores pairwise e arranjá-los em uma árvore A competição se dá nos níveis inferiores, e o ganhador chegará ao nó principal da árvore. Número de classificadores para q classes = q(q-1)/2. Um-Contra-Todos • Aqui, o número de classificadores é igual a q. • Treina-se um classificador ci para a primeira classe, usando-se como contra exemplos as outras classes, e assim por diante. • Para se obter a decisão final pode-se utilizar uma estratégia de votos. Exercício • Utilizar a ferramente LibSVM para realizar classificação usando SVM.