Introdução
Análise Discriminante Linear e Quadrática (LDA e QDA) são dois classificadores clássicos utilizados em aprendizado de máquina. A LDA utiliza uma superfície de decisão linear, enquanto a QDA utiliza uma superfície de decisão quadrática. Estes classificadores são populares porque possuem soluções em forma fechada, funcionam bem na prática e não têm hiperparâmetros a ajustar.
Neste laboratório, exploraremos como realizar LDA e QDA usando o scikit-learn, uma popular biblioteca de aprendizado de máquina em Python.
Dicas da Máquina Virtual
Após o início da máquina virtual, clique no canto superior esquerdo para mudar para a aba Notebook para acessar o Jupyter Notebook para praticar.
Às vezes, pode ser necessário aguardar alguns segundos para que o Jupyter Notebook termine de carregar. A validação das operações não pode ser automatizada devido a limitações no Jupyter Notebook.
Se você encontrar problemas durante o aprendizado, sinta-se à vontade para perguntar ao Labby. Forneça feedback após a sessão e resolveremos o problema rapidamente para você.
Importar as bibliotecas necessárias
Primeiro, precisamos importar as bibliotecas necessárias, incluindo o scikit-learn (sklearn) e o matplotlib, que será usado para a visualização de dados.
import numpy as np
import matplotlib.pyplot as plt
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis, QuadraticDiscriminantAnalysis
Gerar dados sintéticos
Em seguida, geraremos dados sintéticos para demonstrar a diferença entre LDA e QDA. Usaremos a função make_classification do scikit-learn para criar duas classes com padrões distintos.
from sklearn.datasets import make_classification
## Gerar dados sintéticos
X, y = make_classification(n_samples=100, n_features=2, n_informative=2, n_redundant=0, n_classes=2, random_state=1)
Treinar e visualizar os classificadores
Agora, treinaremos os classificadores LDA e QDA nos dados sintéticos e visualizaremos as fronteiras de decisão.
## Treinar o classificador LDA
lda = LinearDiscriminantAnalysis()
lda.fit(X, y)
## Treinar o classificador QDA
qda = QuadraticDiscriminantAnalysis()
qda.fit(X, y)
## Plotar as fronteiras de decisão
def plot_decision_boundary(classifier, title):
h = 0.02 ## tamanho do passo na malha
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h))
Z = classifier.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
plt.contourf(xx, yy, Z, alpha=0.8)
plt.scatter(X[:, 0], X[:, 1], c=y, edgecolors='k', cmap=plt.cm.Paired)
plt.xlabel('Característica 1')
plt.ylabel('Característica 2')
plt.title(title)
plt.figure(figsize=(10, 4))
plt.subplot(1, 2, 1)
plot_decision_boundary(lda, 'Análise Discriminante Linear')
plt.subplot(1, 2, 2)
plot_decision_boundary(qda, 'Análise Discriminante Quadrática')
plt.tight_layout()
plt.show()
Reduzir a dimensionalidade usando LDA
O LDA também pode ser usado para redução de dimensionalidade supervisionada. Vamos demonstrar isso reduzindo a dimensão do conjunto de dados Iris.
from sklearn.datasets import load_iris
## Carregar o conjunto de dados Iris
iris = load_iris()
X, y = iris.data, iris.target
## Reduzir a dimensionalidade usando LDA
lda = LinearDiscriminantAnalysis(n_components=2)
X_lda = lda.fit_transform(X, y)
Resumo
Análise Discriminante Linear e Quadrática (LDA e QDA) são dois classificadores clássicos usados no aprendizado de máquina. O LDA utiliza uma superfície de decisão linear, enquanto o QDA utiliza uma superfície de decisão quadrática. Esses classificadores possuem soluções de forma fechada e apresentam bom desempenho na prática. O LDA também pode ser usado para redução de dimensionalidade supervisionada.