Introduction
L'Analyse Discriminante Linéaire et Quadratique (Linear and Quadratic Discriminant Analysis, LDA et QDA) sont deux classifieurs classiques utilisés en apprentissage automatique. LDA utilise une surface de décision linéaire, tandis que QDA utilise une surface de décision quadratique. Ces classifieurs sont populaires car ils ont des solutions en forme fermée, fonctionnent bien en pratique et n'ont pas d'hyperparamètres à ajuster.
Dans ce laboratoire (lab), nous explorerons comment effectuer LDA et QDA à l'aide de scikit-learn, une bibliothèque d'apprentissage automatique populaire en Python.
Conseils pour la Machine Virtuelle (VM)
Une fois le démarrage de la machine virtuelle terminé, cliquez dans le coin supérieur gauche pour basculer vers l'onglet Notebook afin d'accéder à Jupyter Notebook pour pratiquer.
Parfois, vous devrez peut-être attendre quelques secondes que Jupyter Notebook ait terminé de charger. La validation des opérations ne peut pas être automatisée en raison des limitations de Jupyter Notebook.
Si vous rencontrez des problèmes lors de votre apprentissage, n'hésitez pas à poser vos questions à Labby. Fournissez des commentaires après la session, et nous résoudrons rapidement le problème pour vous.
Importation des bibliothèques nécessaires
Tout d'abord, nous devons importer les bibliothèques nécessaires, y compris scikit-learn (sklearn) et matplotlib, qui seront utilisées pour la visualisation des données.
import numpy as np
import matplotlib.pyplot as plt
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis, QuadraticDiscriminantAnalysis
Génération de données synthétiques
Ensuite, nous allons générer des données synthétiques pour démontrer la différence entre LDA et QDA. Nous utiliserons la fonction make_classification de scikit-learn pour créer deux classes avec des modèles distincts.
from sklearn.datasets import make_classification
## Génération de données synthétiques
X, y = make_classification(n_samples=100, n_features=2, n_informative=2, n_redundant=0, n_classes=2, random_state=1)
Entraînement et visualisation des classifieurs
Maintenant, nous allons entraîner les classifieurs LDA et QDA sur les données synthétiques et visualiser les frontières de décision.
## Entraînement du classifieur LDA
lda = LinearDiscriminantAnalysis()
lda.fit(X, y)
## Entraînement du classifieur QDA
qda = QuadraticDiscriminantAnalysis()
qda.fit(X, y)
## Traçage des frontières de décision
def plot_decision_boundary(classifier, title):
h = 0.02 ## Pas dans le maillage
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('Caractéristique 1')
plt.ylabel('Caractéristique 2')
plt.title(title)
plt.figure(figsize=(10, 4))
plt.subplot(1, 2, 1)
plot_decision_boundary(lda, 'Analyse Discriminante Linéaire')
plt.subplot(1, 2, 2)
plot_decision_boundary(qda, 'Analyse Discriminante Quadratique')
plt.tight_layout()
plt.show()
Réduction de dimension à l'aide de l'Analyse Discriminante Linéaire (LDA)
LDA peut également être utilisé pour la réduction de dimension supervisée. Nous allons démontrer cela en réduisant la dimension de l'ensemble de données Iris.
from sklearn.datasets import load_iris
## Chargement de l'ensemble de données Iris
iris = load_iris()
X, y = iris.data, iris.target
## Réduction de dimension à l'aide de LDA
lda = LinearDiscriminantAnalysis(n_components=2)
X_lda = lda.fit_transform(X, y)
Résumé
L'Analyse Discriminante Linéaire et Quadratique (LDA et QDA) sont deux classifieurs classiques utilisés en apprentissage automatique. LDA utilise une surface de décision linéaire, tandis que QDA utilise une surface de décision quadratique. Ces classifieurs ont des solutions analytiques et donnent de bons résultats en pratique. LDA peut également être utilisé pour la réduction de dimension supervisée.