소개
선형 판별 분석 (LDA) 과 2 차 판별 분석 (QDA) 은 머신 러닝에서 사용되는 두 가지 고전적인 분류기입니다. LDA 는 선형 결정 경계를 사용하는 반면, QDA 는 2 차 결정 경계를 사용합니다. 이러한 분류기는 닫힌 형태의 해를 가지고 실제로 잘 작동하며, 조정할 하이퍼파라미터가 없다는 점에서 인기가 많습니다.
이 실습에서는 파이썬의 인기 머신 러닝 라이브러리인 scikit-learn 을 사용하여 LDA 와 QDA 를 수행하는 방법을 살펴볼 것입니다.
가상 머신 팁
가상 머신 시작이 완료되면 왼쪽 상단 모서리를 클릭하여 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 의 차이를 보여주기 위해 합성 데이터를 생성합니다. scikit-learn 의 make_classification 함수를 사용하여 서로 다른 패턴을 가진 두 개의 클래스를 생성합니다.
from sklearn.datasets import make_classification
## 합성 데이터 생성
X, y = make_classification(n_samples=100, n_features=2, n_informative=2, n_redundant=0, n_classes=2, random_state=1)
분류기를 학습하고 시각화하기
이제 합성 데이터에 LDA 와 QDA 분류기를 학습하고 결정 경계를 시각화합니다.
## LDA 분류기를 학습합니다.
lda = LinearDiscriminantAnalysis()
lda.fit(X, y)
## QDA 분류기를 학습합니다.
qda = QuadraticDiscriminantAnalysis()
qda.fit(X, y)
## 결정 경계를 그립니다.
def plot_decision_boundary(classifier, title):
h = 0.02 ## 메쉬의 간격
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('특징 1')
plt.ylabel('특징 2')
plt.title(title)
plt.figure(figsize=(10, 4))
plt.subplot(1, 2, 1)
plot_decision_boundary(lda, '선형 판별 분석')
plt.subplot(1, 2, 2)
plot_decision_boundary(qda, '2 차 판별 분석')
plt.tight_layout()
plt.show()
LDA 를 이용한 차원 축소 수행
LDA 는 지도 학습 차원 축소에도 사용될 수 있습니다. 이를 보여주기 위해 아이리스 데이터셋의 차원을 축소해 보겠습니다.
from sklearn.datasets import load_iris
## 아이리스 데이터셋 로드
iris = load_iris()
X, y = iris.data, iris.target
## LDA 를 이용하여 차원 축소 수행
lda = LinearDiscriminantAnalysis(n_components=2)
X_lda = lda.fit_transform(X, y)
요약
선형 판별 분석 (LDA) 과 2 차 판별 분석 (QDA) 은 기계 학습에서 사용되는 두 가지 고전적인 분류기입니다. LDA 는 선형 결정 경계를 사용하는 반면, QDA 는 2 차 결정 경계를 사용합니다. 이러한 분류기는 닫힌 형태의 해를 가지며 실제로 좋은 성능을 보입니다. LDA 는 지도 학습 차원 축소에도 사용될 수 있습니다.