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:
- classe: a classe prevista
- posterior: A probabilidade posterior de que uma observação pertença a cada classe
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 .