O que é Inteligência Artificial e Machine Learning?


Se formos ao dicionário online dictionary.com teremos as seguintes definições sobre Inteligência Artificial (AI):

  1. a capacidade de um computador, robô ou outro dispositivo mecânico programado de realizar operações e tarefas análogas ao aprendizado e tomada de decisão em humanos, como reconhecimento de fala ou resposta a perguntas;
  2. um computador, robô ou outro dispositivo mecânico programado com esta capacidade humana;
  3. o ramo da ciência da computação envolvido com o projeto de computadores ou outros dispositivos mecânicos programados com a capacidade de imitar a inteligência e o pensamento humanos;

Utilizando estes conceitos como referência, podemos dizer que Inteligência Artificial (AI) é uma tentativa de tornar os computadores tão inteligentes, ou até mais inteligentes que os seres humanos. Trata-se de dar aos computadores comportamentos semelhantes aos humanos, processos de pensamento e habilidades de raciocínio.

Qual é a relação entre Inteligência Artificial e Machine Learning?


Citando reitor interino da School of Computer Science da CMU, Professor e Ex-Presidente do Departamento de Machine Learning da Carnegie Mellon University, Tom M. Mitchell:

“Um campo científico é mais bem definido pela questão central que estuda. A área de Machine Learning (ML) busca responder à pergunta: Como podemos construir sistemas de computadores que melhoram automaticamente com a experiência, e o que são as leis fundamentais que regem todos os processos de aprendizagem?”

Podemos afirmar que AI é uma tecnologia com a qual podemos criar sistemas inteligentes que podem simular a inteligência humana. Já Machine Learning ou ML é um subcampo da AI, que tem seu foco no aprendizado de máquinas de tal forma que as máquinas aprendam com dados ou experiências anteriores sem serem explicitamente programadas.

A análise discriminante linear é uma técnica de aprendizado de máquina bem estabelecida e um método de classificação para prever categorias. Suas principais vantagens, em comparação com outros algoritmos de classificação, como redes neurais e florestas aleatórias, são que o modelo é interpretável e que a previsão é fácil. A análise discriminante é frequentemente usada como uma técnica de redução de dimensionalidade para reconhecimento ou classificação de padrões e aprendizado de máquina.


A intuição por trás da análise discriminante


A análise discriminante usa um conjunto de dados de casos, também conhecido como observações, como entrada. Para cada caso, você precisa ter uma variável categórica para definir a classe e várias variáveis preditoras, que são numéricas. Muitas vezes visualizamos esses dados de entrada como uma matriz, como mostrado abaixo, com cada caso sendo uma linha e cada variável uma coluna. Neste exemplo, a variável categórica é chamada de classe e as variáveis preditivas, que são numéricas, são as outras colunas.

Este exemplo, discutido abaixo, refere-se a classes de veículos motorizados com base em imagens desses veículos. Pense em cada caso como um ponto no espaço \(p\)-dimensional, onde \(p\) é o número de variáveis preditoras. Cada ponto é rotulado por sua categoria.

O algoritmo discriminante usa esses dados para dividir o espaço de variáveis preditoras em regiões. As regiões são rotuladas por categorias e possuem limites lineares. O modelo prevê a categoria de um novo caso não visto de acordo com a região em que se encontra. O modelo prevê que todos os casos dentro de uma região pertencem à mesma categoria.

Os limites lineares são consequência da suposição de que as variáveis preditoras para cada categoria possuem a mesma distribuição gaussiana multivariada. Embora, na prática, essa suposição possa não ser 100% verdadeira, se for aproximadamente válida, a análise discriminante linear ainda pode ter um bom desempenho.

Matematicamente, o análise discriminante linear (LDA) usa os dados de entrada para derivar os coeficientes de uma função de pontuação para cada categoria. Cada função recebe como argumentos as variáveis preditoras numéricas de um caso. Em seguida, ele dimensiona cada variável de acordo com seus coeficientes específicos de categoria e gera uma pontuação. O modelo LDA analisa a pontuação de cada função e usa a pontuação mais alta para alocar um caso a uma categoria (previsão). Chamamos essas funções de pontuação de funções discriminantes.

Como mencionamos, a análise discriminante é usada para prever a probabilidade de pertencer a uma determinada classe (ou categoria) com base em uma ou várias variáveis preditoras. Trabalha com variáveis preditoras contínuas e/ou categóricas. Em comparação com a regressão logística, a análise discriminante é mais adequada para prever a categoria de uma observação na situação em que a variável de resultado contém mais de duas classes. Além disso, é mais estável que a regressão logística para problemas de classificação multiclasse.

Observe que tanto a regressão logística quanto a análise discriminante podem ser usadas para tarefas de classificação binária. Neste artigo você aprenderá as técnicas e extensões de análise discriminante mais usadas. Além disso, forneceremos o código R para realizar os diferentes tipos de análise.

Os seguintes métodos de análise discriminante serão utilizados:

  1. Análise discriminante linear (LDA): usa combinações lineares de preditores para prever a classe de uma determinada observação. Assume que as \(p\) variáveis preditoras são normalmente distribuídas e as classes têm variâncias idênticas ou matrizes de covariância idênticas.

  2. Análise discriminante quadrática (QDA): mais flexível que LDA. Aqui, não há suposição de que a matriz de covariância das classes seja a mesma.

  3. Análise discriminante de mistura (MDA): cada classe é considerada uma mistura gaussiana de subclasses.

  4. Análise Discriminante flexível (FDA): combinações não lineares de preditores são usadas, como splines.

  5. Análise discriminante regularizada (RDA): a regularização ou encolhimento melhora a estimativa das matrizes de covariância em situações em que o número de preditores é maior que o número de amostras nos dados de treinamento. Isso leva a uma melhoria da análise discriminante.

Exemplo de análise discriminante: previsão do tipo de veículo


Mesmo que nossa visão esteja longe de ser perfeita, normalmente podemos dizer a diferença entre um carro, uma van e um ônibus. Podemos não distinguir um Saab 9000 de um Opel Manta. Foram carros feitos há cerca de 30 anos. Demonstraremos a análise discriminante prevendo o tipo de veículo em uma imagem.

As 4 categorias de veículos são ônibus de dois andares, van Chevrolet, Saab 9000 e Opel Manta 400. Os recursos de entrada não são os pixels da imagem bruta, mas são 18 recursos numéricos calculados a partir das silhuetas dos veículos.

Este conjunto de dados vem do Instituto Turing, Glasgow, Escócia. (https://www.turing.ac.uk). O propósito é classificar uma determinada silhueta como um dos quatro tipos de veículos, usando um conjunto de características extraídas da silhueta. o veículo pode ser visto de um dos muitos ângulos diferentes.

FONTE
Drs.Pete Mowforth and Barry Shepherd
Instituto Turing
George House
36 North Hanover St.
Glasgow
G1 2AD

Turing Institute Research Memorandum TIRM-87-018 “Vehicle Recognition Using Rule Based Methods” by Siebert,JP (March 1987)


História


Esses dados foram originalmente coletados entre 1986-87. Foi parcialmente financiado pela Barr and Stroud Ltd. O objetivo original era encontrar um método de distinguir objetos 3D dentro de uma imagem 2D pela aplicação de um conjunto de extratores de recursos de forma para as silhuetas 2D dos objetos. Medidas de características de forma extraídos de silhuetas de objetos a serem discriminados foram usados para gerar uma classe de árvore de regras de identificação por meio de indução computacional.

Esta estratégia de reconhecimento de objetos foi usada com sucesso para discriminar entre silhuetas de carros modelo, vans e ônibus visto de elevação restrita, mas todos os ângulos de rotação. O desempenho da classificação da árvore de regras comparou favoravelmente para MDC (classificador de distância mínima) e \(k\)-NN (\(k\)-vizinho mais próximo), classificadores estatísticos em termos de taxa de erro e eficiência computacional. Uma investigação dessas árvores de regras geradas pelo exemplo indicou que a estrutura em árvore foi fortemente influenciado pela orientação dos objetos.


Descrição


Os recursos foram extraídos das silhuetas pela extensão HIPS (Hierarchical Image Processing System) BINATTS, que extrai uma combinação de recursos independentes de escala utilizando medidas baseadas em momentos clássicos, como variância escalada, assimetria e curtose sobre os eixos maiores/menores e medidas heurísticas como cavidades, circularidade, retangularidade e compacidade.

Quatro veículos modelo “Corgie” foram usados para o experimento: um ônibus de dois andares, uma van Cheverolet, um Saab 9000 e um Opel Manta 400. Essa combinação específica de veículos foi escolhida com a expectativa de que o ônibus, a van e qualquer um dos carros ser facilmente distinguível, mas seria mais difícil distinguir entre os carros.

As imagens foram adquiridas por uma câmera olhando para baixo no modelo do veículo a partir de um ângulo fixo de elevação de 34.2 graus com a horizontal. Os veículos foram colocados em uma superfície retroiluminada difusa (lightbox). Os veículos foram pintados de preto fosco para minimizar os destaques. As imagens foram capturadas usando um framestore CRS4000 conectado a um vax 750. Todas as imagens foram capturadas com uma resolução espacial de 128x128 pixels quantizada para 64 níveis de cinza.

Essas imagens foram limitadas para produzir silhuetas de veículos binários, negadas, isto para cumprir os requisitos de processamento do BINATTS e, posteriormente, submetidas a módulos HIPS de encolher-expandir-encolher para remover o ruído da imagem “sal e pimenta” (salt and pepper).

Os veículos foram girados e seu ângulo de orientação foi medido usando uma retícula radial abaixo do veículo. 0 e 180 graus corresponderam a vistas “de frente” e “traseira”, respectivamente, enquanto 90 e 270 corresponderam a perfis em direções opostas. Dois conjuntos de 60 imagens, cada conjunto cobrindo uma rotação completa de 360 graus, foram capturados para cada veículo. O veículo foi girado por um ângulo fixo entre as imagens. Esses conjuntos de dados são conhecidos como e2 e e3, respectivamente.

Outros dois conjuntos de imagens, e4 e e5, foram capturados com a câmera em elevações de 37.5 graus e 30.8 graus, respectivamente. Esses conjuntos também contêm 60 imagens por veículo, além do e4.van que contém apenas 46 devido à dificuldade de conter a van na imagem em algumas orientações.


Atributos:


  1. COMPACTNESS: COMPACIDADE (período médio)**2/área
  2. CIRCULARITY: CIRCULARIDADE (raio médio)**2/área
  3. DISTANCE CIRCULARITY: DISTANCE CIRCULARITY area/(av.distance from border)**2
  4. RADIUS RATIO: RADIUS RATIO (max.rad-min.rad)/av.radius
  5. PR.AXIS ASPECT RATIO: PR.AXIS ASPECT RATIO (eixo menor)/(eixo principal)
  6. MAX.LENGTH ASPECT RATIO: MAX.LENGTH ASPECT RATIO (comprimento perp. comprimento máx.)/(comprimento máx.)
  7. SCATTER RATIO: SCATTER RATIO (inércia em torno do eixo menor)/(inércia em torno do eixo principal)
  8. ELONGATEDNESS: ÁREA DE ALONGAMENTO/(largura do encolhimento)**2
  9. PR.AXIS RECTANGULARITY: PR.AXIS RECTANGULARITY area/(pr.axis comprimento*pr.axis largura)
  10. MAX.LENGTH RECTANGULARITY: MAX.LENGTH RECTANGULARITY area/(max.comprimento*comprimento perp. para isso)
  11. SCALED VARIANCE ALONG MAJOR AXIS: VARIÂNCIA EM ESCALA AO LONGO DO EIXO PRINCIPAL (momento de 2ª ordem sobre o eixo menor)/área
  12. SCALED VARIANCE ALONG MINOR AXIS: VARIÂNCIA EM ESCALA AO LONGO DO EIXO MENOR (momento de 2ª ordem sobre o eixo principal)/área ao longo do eixo menor
  13. SCALED RADIUS OF GYRATION: RAIO DE GIRAÇÃO ESCALA (mavar+mivar)/área
  14. SKEWNESS ABOUT MAJOR AXIS: SKEWNESS (INCLINAÇÃO) SOBRE O EIXO MAIOR (momento de 3ª ordem sobre o eixo principal)/sigma_min**3
  15. SKEWNESS ABOUT MINOR AXIS: SKEWNESS (INCLINAÇÃO) SOBRE O EIXO MENOR (momento de 3ª ordem sobre o eixo menor)/sigma_maj**3
  16. KURTOSIS ABOUT MINOR AXIS: KURTOSE SOBRE O EIXO MENOR (momento de 4ª ordem sobre o eixo maior)/sigma_min**4
  17. KURTOSIS ABOUT MAJOR AXIS: KURTOSIS SOBRE O EIXO MAIOR (momento de 4ª ordem sobre o eixo menor)/sigma_maj**4
  18. HOLLOWS RATIO: HOLLOWS RATIO (área das cavidades)/(área do polígono delimitador)
  19. CLASS: CLASSE, classificação da imagem em bus, opel, saab e van


Onde \(\mbox{sigma_maj**2}\) é a variação ao longo do eixo maior e \(\mbox{sigma_min**2}\) é a variação ao longo do eixo menor e area of hollows = area da poli-área delimitadora do objeto.

A área do polígono delimitador é encontrada como resultado lateral da computação para encontrar o comprimento máximo. Cada cálculo de comprimento individual produz um par de calibradores para o objeto orientado a cada 5 graus. O objeto é propagado em uma imagem contendo a união desses cursores para obter uma imagem do polígono delimitador.


Exemplos de imagens de carros para identificar:

Van chevrolet Opel Manta 400 Saab 9000 Bus Double-decker


Para começar, carregamos as 846 instâncias em um data.frame chamado dados. As colunas são rotuladas pelas variáveis, com a coluna de resultado de destino chamada V19.

Estes dados foram extraídos do repositório: https://archive.ics.uci.edu/ml/datasets/statlog%2B(vehicle%2Bsilhouettes)

dados01 = read.csv(file = "http://leg.ufpr.br/~lucambio/MSM/xaa.dat", sep = "", header = FALSE)
dados02 = read.csv(file = "http://leg.ufpr.br/~lucambio/MSM/xab.dat", sep = "", header = FALSE)
dados03 = read.csv(file = "http://leg.ufpr.br/~lucambio/MSM/xac.dat", sep = "", header = FALSE)
dados04 = read.csv(file = "http://leg.ufpr.br/~lucambio/MSM/xad.dat", sep = "", header = FALSE)
dados05 = read.csv(file = "http://leg.ufpr.br/~lucambio/MSM/xae.dat", sep = "", header = FALSE)
dados06 = read.csv(file = "http://leg.ufpr.br/~lucambio/MSM/xaf.dat", sep = "", header = FALSE)
dados07 = read.csv(file = "http://leg.ufpr.br/~lucambio/MSM/xag.dat", sep = "", header = FALSE)
dados08 = read.csv(file = "http://leg.ufpr.br/~lucambio/MSM/xah.dat", sep = "", header = FALSE)
dados09 = read.csv(file = "http://leg.ufpr.br/~lucambio/MSM/xai.dat", sep = "", header = FALSE)
dados = data.frame(rbind(dados01,dados02,dados03,dados04,dados05,dados06,dados07,dados08,dados09))  
head(dados)
##    V1 V2  V3  V4  V5 V6  V7 V8 V9 V10 V11 V12 V13 V14 V15 V16 V17 V18  V19
## 1  95 48  83 178  72 10 162 42 20 159 176 379 184  70   6  16 187 197  van
## 2  91 41  84 141  57  9 149 45 19 143 170 330 158  72   9  14 189 199  van
## 3 104 50 106 209  66 10 207 32 23 158 223 635 220  73  14   9 188 196 saab
## 4  93 41  82 159  63  9 144 46 19 143 160 309 127  63   6  10 199 207  van
## 5  85 44  70 205 103 52 149 45 19 144 241 325 188 127   9  11 180 183  bus
## 6 107 57 106 172  50  6 255 26 28 169 280 957 264  85   5   9 181 183  bus

Número de classes 4: Opel, Saab, ônibus, van. NÚMERO DE EXEMPLOS 946, sendo Opel 240, Saab 240, Ônibus 240 e Van 226. NÚMERO DE ATRIBUTOS 18. 100 exemplos estão sendo mantidos pela Strathclyde para validação. Assim, os parceiros StatLog receberão 846 exemplos.

table(dados$V19)
## 
##  bus opel saab  van 
##  218  212  217  199


library(GGally)
par(mar=c(4,4,3,1), pch = 19)
ggpairs(dados[,c(1:4,19)], columns = 1:5, aes(color = dados$V19, alpha = 0.5), 
        upper = list(continuous = wrap("cor", size = 2.5)))


ggpairs(dados[,c(6:10,19)], columns = 1:5, aes(color = dados$V19, alpha = 0.5), 
        upper = list(continuous = wrap("cor", size = 2.5)))


ggpairs(dados[,c(11:14,19)], columns = 1:4, aes(color = dados$V19, alpha = 0.5), 
        upper = list(continuous = wrap("cor", size = 2.5)))


ggpairs(dados[,c(15:18,19)], columns = 1:4, aes(color = dados$V19, alpha = 0.5), 
        upper = list(continuous = wrap("cor", size = 2.5)))


library(MASS)
modelo.LDA = lda(V19 ~ . , data = dados)
modelo.LDA
## Call:
## lda(V19 ~ ., data = dados)
## 
## Prior probabilities of groups:
##       bus      opel      saab       van 
## 0.2576832 0.2505910 0.2565012 0.2352246 
## 
## Group means:
##            V1       V2       V3       V4       V5       V6       V7       V8
## bus  91.59174 45.06881 76.72018 166.0046 63.43119 7.013761 170.0229 40.11468
## opel 95.06132 46.58019 89.08962 180.3019 60.87736 8.858491 182.1651 37.87736
## saab 97.28111 45.53456 88.67281 180.8018 61.14286 8.792627 179.6682 38.31797
## van  90.56281 42.07035 73.33166 147.1206 61.26131 9.713568 141.5377 47.93970
##            V9      V10      V11      V12      V13      V14      V15       V16
## bus  20.57339 146.7018 192.8899 448.8945 180.9495 77.12385 4.844037 10.211009
## opel 21.58962 151.2736 198.6179 508.5377 179.7736 70.14151 6.603774 15.014151
## saab 21.44700 148.6912 197.1521 493.7972 179.4562 69.75576 7.658986 15.299539
## van  18.57789 145.1759 164.0101 298.2010 157.2764 72.77889 6.417085  9.698492
##           V17      V18
## bus  187.8119 191.3257
## opel 189.2783 197.1132
## saab 189.7143 198.0415
## van  188.9397 196.1457
## 
## Coefficients of linear discriminants:
##               LD1          LD2          LD3
## V1  -0.0106353255  0.102335858 -0.209299215
## V2  -0.0112394608 -0.477795497  0.382868029
## V3   0.0080071272  0.119417228  0.029870081
## V4   0.1375713483 -0.038040326  0.032087671
## V5  -0.3865837011  0.089219388 -0.111757353
## V6   0.1393778108 -0.041762887  0.092613376
## V7   0.1038508578 -0.198776084 -0.087967851
## V8   0.3730202481  0.157783106  0.043845570
## V9   0.3813210708 -0.137962574 -0.692156073
## V10 -0.0466914641  0.231600123  0.026404021
## V11  0.0007379501  0.012256441 -0.016386692
## V12 -0.0232243051  0.028082784  0.029630855
## V13 -0.0002369531  0.008244785 -0.064562872
## V14 -0.0448890353  0.051530513 -0.005000712
## V15  0.0648588813 -0.033681576  0.002030132
## V16 -0.0227021950 -0.023885489  0.006388086
## V17 -0.3631540903 -0.018265170  0.147719168
## V18  0.2236763386  0.067511808 -0.137384517
## 
## Proportion of trace:
##    LD1    LD2    LD3 
## 0.5271 0.4406 0.0323
library(tidyverse) # para fácil manipulação e visualização de dados
library(caret) # para facilitar o fluxo de trabalho de aprendizado de máquina
preditos.LDA = modelo.LDA %>% predict(dados)
names(preditos.LDA)
## [1] "class"     "posterior" "x"

A função predict() retorna os seguintes elementos:

  1. class: classes previstas de observações.
  2. posterior: é uma matriz cujas colunas são os grupos, as linhas são os indivíduos e os valores são a probabilidade a posteriori de que a observação correspondente pertença aos grupos.
  3. x: contém os discriminantes lineares, descritos acima.

Inspecione os resultados:

# Classes previstas
head(preditos.LDA$class, 6)
## [1] van  van  saab van  bus  bus 
## Levels: bus opel saab van
# Probabilidades previstas de pertencimento à classe.
head(preditos.LDA$posterior, 6)
##            bus         opel         saab          van
## 1 8.512500e-02 5.237495e-03 1.140482e-02 8.982327e-01
## 2 2.334737e-05 1.319130e-03 4.621132e-03 9.940364e-01
## 3 1.196748e-04 1.255393e-01 8.737069e-01 6.340907e-04
## 4 1.833487e-04 7.056117e-04 2.282041e-04 9.988828e-01
## 5 9.928223e-01 1.175472e-07 3.154479e-08 7.177598e-03
## 6 9.995034e-01 3.766693e-04 1.171969e-04 2.737161e-06
# Discriminantes lineares
head(preditos.LDA$x, 3)
##          LD1        LD2        LD3
## 1 -1.2089806  1.5592207 -1.0723250
## 2  0.6351953  2.6989473 -0.6149956
## 3  1.6119614 -0.5829424 -1.6052023

Observe que você pode criar o gráfico LDA usando ggplot2 da seguinte forma:

library(ggplot2)
dados.LDA <- cbind(dados, predict(modelo.LDA)$x)
ggplot(dados.LDA, aes(LD1, LD2)) + geom_point(aes(color = V19))

ggplot(dados.LDA, aes(LD1, LD3)) + geom_point(aes(color = V19))


Precisão do modelo:


Você pode calcular a precisão do modelo da seguinte forma:

mean(preditos.LDA$class==dados$V19)
## [1] 0.7978723

Observe que, por padrão, o corte de probabilidade usado para decidir a participação no grupo é 0.5 (suposição aleatória). Por exemplo, o número de observações no grupo setosa pode ser recalculado usando:

sum(preditos.LDA$posterior[ ,1] >=.5)
## [1] 225

Em algumas situações, você pode querer aumentar a precisão do modelo. Nesse caso, você pode ajustar o modelo ajustando o corte de probabilidade a posteriori. Por exemplo, você pode aumentar ou diminuir o corte.


Seleção de variávis


Observe que, se as variáveis preditoras forem padronizadas antes do cálculo do LDA, os pesos do discriminador podem ser usados como medidas de importância variável para a seleção de características.


Análise discriminante quadrática - QDA


QDA é um pouco mais flexível que LDA, no sentido de que não assume a igualdade de variância/covariância. Em outras palavras, para QDA a matriz de covariância pode ser diferente para cada classe. O LDA tende a ser melhor do que o QDA quando você tem um conjunto de treinamento pequeno.

Em contraste, QDA é recomendado se o conjunto de treinamento for muito grande, de modo que a variância do classificador não seja um problema importante, ou se a suposição de uma matriz de covariância comum para as classes K for claramente insustentável (James et al. 2014). QDA pode ser calculado usando a função R qda() [pacote MASS].

library(MASS)
# Ajuste do modelo 
modelo.QDA = qda(V19 ~ . , data = dados)
modelo.QDA
## Call:
## qda(V19 ~ ., data = dados)
## 
## Prior probabilities of groups:
##       bus      opel      saab       van 
## 0.2576832 0.2505910 0.2565012 0.2352246 
## 
## Group means:
##            V1       V2       V3       V4       V5       V6       V7       V8
## bus  91.59174 45.06881 76.72018 166.0046 63.43119 7.013761 170.0229 40.11468
## opel 95.06132 46.58019 89.08962 180.3019 60.87736 8.858491 182.1651 37.87736
## saab 97.28111 45.53456 88.67281 180.8018 61.14286 8.792627 179.6682 38.31797
## van  90.56281 42.07035 73.33166 147.1206 61.26131 9.713568 141.5377 47.93970
##            V9      V10      V11      V12      V13      V14      V15       V16
## bus  20.57339 146.7018 192.8899 448.8945 180.9495 77.12385 4.844037 10.211009
## opel 21.58962 151.2736 198.6179 508.5377 179.7736 70.14151 6.603774 15.014151
## saab 21.44700 148.6912 197.1521 493.7972 179.4562 69.75576 7.658986 15.299539
## van  18.57789 145.1759 164.0101 298.2010 157.2764 72.77889 6.417085  9.698492
##           V17      V18
## bus  187.8119 191.3257
## opel 189.2783 197.1132
## saab 189.7143 198.0415
## van  188.9397 196.1457
# Predições
preditos.QDA = modelo.QDA %>% predict(dados)
# Precisão do modelo
mean(preditos.QDA$class == dados$V19)
## [1] 0.9160757

Análise discriminante de mistura - MDA


O classificador LDA assume que cada classe vem de uma única distribuição normal ou gaussiana. Isso é muito restritivo. Uma alternativa é considerar MDA. Para MDA, existem classes e cada classe é considerada uma mistura gaussiana de subclasses, onde cada ponto de dados tem uma probabilidade de pertencer a cada classe. A igualdade da matriz de covariâncias, entre classes, ainda é assumida.

Para MDA, existem classes, e cada classe é considerada uma mistura gaussiana de subclasses, onde cada ponto de dados tem uma probabilidade de pertencer a cada classe. A igualdade da matriz de covariâncias, entre classes, ainda é assumida.

library(mda)
# Ajuste do modelo
modelo.MDA = mda(V19 ~ . , data = dados)
modelo.MDA
## Call:
## mda(formula = V19 ~ ., data = dados)
## 
## Dimension: 11 
## 
## Percent Between-Group Variance Explained:
##     v1     v2     v3     v4     v5     v6     v7     v8     v9    v10    v11 
##  54.89  76.47  86.08  94.44  96.46  98.01  99.01  99.60  99.87  99.97 100.00 
## 
## Degrees of Freedom (per dimension): 19 
## 
## Training Misclassification Error: 0.14894 ( N = 846 )
## 
## Deviance: 612.017
# Predições
preditos.MDA = modelo.MDA %>% predict(dados)
# Precisão do modelo
mean(preditos.MDA == dados$V19)
## [1] 0.8510638

O MDA pode superar o LDA e o QDA em algumas situações, mas não neste exemplo.


Análise discriminante flexível - FDA


O FDA é uma extensão flexível do LDA que usa combinações não lineares de preditores, como splines. O FDA é útil para modelar relações multivariadas de não normalidade ou não lineares entre variáveis dentro de cada grupo, permitindo uma classificação mais precisa.

# Ajuste do modelo
modelo.FDA = fda(V19 ~ . , data = dados)
# Preditos
preditos.FDA = modelo.FDA %>% predict(dados)
# Model accuracy
mean(preditos.FDA == dados$V19)
## [1] 0.7978723

Análise discriminante regularizada - RDA


RDA constrói uma regra de classificação regularizando as matrizes de covariância de grupo (Friedman 1989) permitindo um modelo mais robusto contra multicolinearidade nos dados. Isso pode ser muito útil para um grande conjunto de dados multivariados contendo preditores altamente correlacionados.

A análise discriminante regularizada é uma espécie de trade-off entre LDA e QDA. Lembre-se que, em LDA, assumimos igualdade de matriz de covariância para todas as classes. QDA assume matrizes de covariância diferentes para todas as classes. A análise discriminante regularizada é um intermediário entre LDA e QDA.

RDA reduz as covariâncias separadas de QDA em direção a uma covariância comum como em LDA. Isso melhora a estimativa das matrizes de covariância em situações em que o número de preditores é maior que o número de amostras nos dados de treinamento, potencialmente levando a uma melhoria da precisão do modelo.

library(klaR)
# Ajuste do modelo
modelo.RDA = rda(V19 ~ . , data = dados)
modelo.RDA
## Call: 
## rda(formula = V19 ~ ., data = dados)
## 
## Regularization parameters: 
##     gamma    lambda 
## 0.9997014 0.5369408 
## 
## Prior probabilities of groups: 
##       bus      opel      saab       van 
## 0.2576832 0.2505910 0.2565012 0.2352246 
## 
## Misclassification rate: 
##        apparent: 59.456 %
## cross-validated: 58.727 %
# Predições
preditos.RDA = modelo.RDA %>% predict(dados)
# Precisão do modelo
mean(preditos.RDA$class == dados$V19)
## [1] 0.4054374

Discussão


Descrevemos a análise discriminante linear (LDA) e extensões para prever a classe de uma observação com base em múltiplas variáveis preditoras. A análise discriminante é mais adequada para problemas de classificação multiclasse em comparação com a regressão logística.

LDA assume que as diferentes classes têm a mesma variância ou matriz de covariância. Descrevemos muitas extensões do LDA neste artigo. A extensão mais popular da LDA é a análise discriminante quadrática (QDA), que é mais flexível que a LDA no sentido de que não assume a igualdade das matrizes de covariância do grupo.

LDA tende a ser melhor que QDA para pequenos conjuntos de dados. QDA é recomendado para grandes conjuntos de dados de treinamento. O melhor resultado de classificação foi encontrado utilizando a função discriminante quadrática.


Referências


  1. Friedman, Jerome H. 1989. “Regularized Discriminant Analysis.” Journal of the American Statistical Association 84 (405). Taylor & Francis: 165–75. doi:10.1080/01621459.1989.10478752.

  2. James, Gareth, Daniela Witten, Trevor Hastie, and Robert Tibshirani. 2014. An Introduction to Statistical Learning: With Applications in R. Springer Publishing Company, Incorporated.