Análise discriminante quadrática em r (passo a passo)


A análise discriminante quadrática é um método que você pode usar quando possui um conjunto de variáveis preditoras e deseja classificar uma variável de resposta em duas ou mais classes. É considerado o equivalente não linear da análise discriminante linear .

Este tutorial fornece um exemplo passo a passo de como realizar análise discriminante quadrática em R.

Etapa 1: carregue as bibliotecas necessárias

Primeiro, carregaremos as bibliotecas necessárias para este exemplo:

 library (MASS)
library (ggplot2)

Etapa 2: carregar dados

Para este exemplo, usaremos o conjunto de dados iris integrado em R. O código a seguir mostra como carregar e exibir este conjunto de dados:

 #attach iris dataset to make it easy to work with
attach(iris)

#view structure of dataset
str(iris)

'data.frame': 150 obs. of 5 variables:
 $ Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
 $ Sepal.Width: num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
 $Petal.Length: num 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
 $Petal.Width: num 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
 $ Species: Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 ...

Podemos ver que o conjunto de dados contém 5 variáveis e 150 observações no total.

Para este exemplo, construiremos um modelo de análise discriminante quadrática para classificar as espécies às quais pertence uma determinada flor.

Usaremos as seguintes variáveis preditoras no modelo:

  • Sépala.comprimento
  • Sépala.Largura
  • Pétala.Comprimento
  • Pétala.Largura

E vamos usá-los para prever a variável de resposta Species , que suporta as três classes potenciais a seguir:

  • setosa
  • versicolor
  • Virgínia

Etapa 3: criar amostras de treinamento e teste

A seguir, dividiremos o conjunto de dados em um conjunto de treinamento para treinar o modelo e um conjunto de teste para testar o modelo:

 #make this example reproducible
set.seed(1)

#Use 70% of dataset as training set and remaining 30% as testing set
sample <- sample(c( TRUE , FALSE ), nrow (iris), replace = TRUE , prob =c(0.7,0.3))
train <- iris[sample, ]
test <- iris[!sample, ] 

Etapa 4: ajuste o modelo QDA

A seguir, usaremos a função qda() do pacote MASS para adaptar o modelo QDA aos nossos dados:

 #fit QDA model
model <- qda(Species~., data=train)

#view model output
model

Call:
qda(Species ~ ., data = train)

Prior probabilities of groups:
    setosa versicolor virginica 
 0.3207547 0.3207547 0.3584906 

Group means:
           Sepal.Length Sepal.Width Petal.Length Petal.Width
setosa 4.982353 3.411765 1.482353 0.2411765
versicolor 5.994118 2.794118 4.358824 1.3676471
virginica 6.636842 2.973684 5.592105 2.0552632 

Veja como interpretar os resultados do modelo:

Probabilidades anteriores do grupo: representam as proporções de cada espécie no conjunto de treinamento. Por exemplo, 35,8% de todas as observações no conjunto de treinamento foram para a espécie virginica .

Médias de grupo: exibem os valores médios de cada variável preditora para cada espécie.

Etapa 5: use o modelo para fazer previsões

Depois de ajustar o modelo usando nossos dados de treinamento, podemos usá-lo para fazer previsões sobre nossos dados de teste:

 #use QDA model to make predictions on test data
predicted <- predict (model, test)

names(predicted)

[1] "class" "posterior" "x"   

Isso retorna uma lista com duas variáveis:

Podemos visualizar rapidamente cada um desses resultados para as primeiras seis observações em nosso conjunto de dados de teste:

 #view predicted class for first six observations in test set
head(predicted$class)

[1] setosa setosa setosa setosa setosa setosa
Levels: setosa versicolor virginica

#view posterior probabilities for first six observations in test set
head(predicted$posterior)

   setosa versicolor virginica
4 1 7.224770e-20 1.642236e-29
6 1 6.209196e-26 8.550911e-38
7 1 1.248337e-21 8.132700e-32
15 1 2.319705e-35 5.094803e-50
17 1 1.396840e-29 9.586504e-43
18 1 7.581165e-25 8.611321e-37

Etapa 6: avaliar o modelo

Podemos usar o código a seguir para ver qual porcentagem de observações o modelo QDA previu corretamente a espécie:

 #find accuracy of model
mean(predicted$class==test$Species)

[1] 1

Acontece que o modelo previu corretamente as espécies para 100% das observações em nosso conjunto de dados de teste.

No mundo real, um modelo QDA raramente prevê corretamente os resultados de cada classe, mas esse conjunto de dados da íris é simplesmente construído de uma forma que os algoritmos de aprendizado de máquina tendem a ter um desempenho muito bom.

Você pode encontrar o código R completo usado neste tutorial aqui .

Add a Comment

O seu endereço de email não será publicado. Campos obrigatórios marcados com *