Introducción
El Análisis Discriminante Lineal y Cuadrático (Linear and Quadratic Discriminant Analysis, LDA y QDA) son dos clasificadores clásicos utilizados en el aprendizaje automático. El LDA utiliza una superficie de decisión lineal, mientras que el QDA utiliza una superficie de decisión cuadrática. Estos clasificadores son populares porque tienen soluciones en forma cerrada, funcionan bien en la práctica y no tienen hiperparámetros que ajustar.
En este laboratorio, exploraremos cómo realizar LDA y QDA utilizando scikit-learn, una popular biblioteca de aprendizaje automático en Python.
Consejos para la MV
Después de que la máquina virtual (VM) haya terminado de iniciar, haz clic en la esquina superior izquierda para cambiar a la pestaña Notebook y acceder a Jupyter Notebook para practicar.
A veces, es posible que debas esperar unos segundos para que Jupyter Notebook termine de cargar. La validación de las operaciones no se puede automatizar debido a las limitaciones de Jupyter Notebook.
Si encuentras problemas durante el aprendizaje, no dudes en preguntar a Labby. Proporciona comentarios después de la sesión y resolveremos rápidamente el problema para ti.
Importar las bibliotecas necesarias
Primero, necesitamos importar las bibliotecas necesarias, incluyendo scikit-learn (sklearn) y matplotlib, que se utilizarán para la visualización de datos.
import numpy as np
import matplotlib.pyplot as plt
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis, QuadraticDiscriminantAnalysis
Generar datos sintéticos
A continuación, generaremos datos sintéticos para demostrar la diferencia entre LDA y QDA. Utilizaremos la función make_classification de scikit-learn para crear dos clases con patrones distintos.
from sklearn.datasets import make_classification
## Generate synthetic data
X, y = make_classification(n_samples=100, n_features=2, n_informative=2, n_redundant=0, n_classes=2, random_state=1)
Entrenar y visualizar los clasificadores
Ahora, entrenaremos los clasificadores LDA y QDA con los datos sintéticos y visualizaremos los límites de decisión.
## Train the LDA classifier
lda = LinearDiscriminantAnalysis()
lda.fit(X, y)
## Train the QDA classifier
qda = QuadraticDiscriminantAnalysis()
qda.fit(X, y)
## Plot the decision boundaries
def plot_decision_boundary(classifier, title):
h = 0.02 ## step size in the mesh
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('Feature 1')
plt.ylabel('Feature 2')
plt.title(title)
plt.figure(figsize=(10, 4))
plt.subplot(1, 2, 1)
plot_decision_boundary(lda, 'Linear Discriminant Analysis')
plt.subplot(1, 2, 2)
plot_decision_boundary(qda, 'Quadratic Discriminant Analysis')
plt.tight_layout()
plt.show()
Realizar reducción de dimensionalidad utilizando LDA
El Análisis Discriminante Lineal (LDA) también se puede utilizar para la reducción de dimensionalidad supervisada. Demostraremos esto reduciendo la dimensión del conjunto de datos Iris.
from sklearn.datasets import load_iris
## Load the Iris dataset
iris = load_iris()
X, y = iris.data, iris.target
## Perform dimensionality reduction using LDA
lda = LinearDiscriminantAnalysis(n_components=2)
X_lda = lda.fit_transform(X, y)
Resumen
El Análisis Discriminante Lineal y Cuadrático (LDA y QDA) son dos clasificadores clásicos utilizados en el aprendizaje automático (machine learning). El LDA utiliza una superficie de decisión lineal, mientras que el QDA utiliza una superficie de decisión cuadrática. Estos clasificadores tienen soluciones en forma cerrada y funcionan bien en la práctica. El LDA también se puede utilizar para la reducción de dimensionalidad supervisada.