Введение
Линейный и квадратичный дискриминантный анализ (LDA и QDA) - это два классических классификатора, используемых в машинном обучении. LDA использует линейную поверхность принятия решений, в то время как QDA использует квадратичную поверхность принятия решений. Эти классификаторы популярны, потому что имеют аналитические решения, хорошо работают на практике и не требуют настройки гиперпараметров.
В этом лабораторном занятии мы рассмотрим, как выполнять LDA и QDA с использованием scikit-learn, популярной библиотеки машинного обучения на Python.
Советы по виртуальной машине
После запуска виртуальной машины нажмите в левом верхнем углу, чтобы переключиться на вкладку Notebook и получить доступ к Jupyter Notebook для практики.
Иногда вам может потребоваться подождать несколько секунд, пока Jupyter Notebook загрузится. Валидация операций не может быть автоматизирована из-за ограничений Jupyter Notebook.
Если у вас возникнут проблемы во время обучения, не стесняйтесь обращаться к Labby. Оставьте отзыв после занятия, и мы оперативно решим проблему для вас.
Импорт необходимых библиотек
Сначала нам нужно импортировать необходимые библиотеки, в том числе scikit-learn (sklearn) и matplotlib, которые будут использоваться для визуализации данных.
import numpy as np
import matplotlib.pyplot as plt
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis, QuadraticDiscriminantAnalysis
Генерация синтетических данных
Далее мы сгенерируем синтетические данные, чтобы продемонстрировать разницу между LDA и QDA. Мы будем использовать функцию make_classification из библиотеки scikit-learn для создания двух классов с различными паттернами.
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)
Обучение и визуализация классификаторов
Теперь мы обучим классификаторы LDA и QDA на синтетических данных и визуализируем границы принятия решений.
## 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()
Выполнение понижения размерности с использованием LDA
LDA также может быть использован для контролируемого (с учителем) понижения размерности. Мы продемонстрируем это, понизив размерность набора данных 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)
Резюме
Линейный и квадратичный дискриминантный анализ (LDA и QDA) — это два классических классификатора, используемых в машинном обучении. LDA использует линейную поверхность принятия решений, в то время как QDA использует квадратичную поверхность принятия решений. Эти классификаторы имеют аналитические решения и хорошо работают на практике. LDA также может быть использован для контролируемого (с учителем) понижения размерности.