데이터 과학과 머신러닝에서 차원 축소는 분석 및 모델링의 성능을 높이기 위해 매우 중요한 과정이다. 그 중 선형 판별 분석(LDA, Linear Discriminant Analysis)은 데이터의 분류 성능을 최대화하는 차원 축소 기법이다. 이번 포스트에서는 선형 판별 분석(LDA)이 무엇인지, 어떻게 작동하는지, 그리고 Python으로 구현하는 방법을 알아보도록 하자.
선형 판별 분석(LDA)란?
선형 판별 분석(LDA)은 데이터의 차원을 줄이면서도 분류 성능을 최적화하기 위해 사용되는 지도 학습 기반 차원 축소 알고리즘이다. 주성분 분석(PCA)와 달리, 클래스 레이블 정보를 고려하여 클래스 간의 분산을 최대화하고, 클래스 내의 분산을 최소화하는 방식으로 작동한다.
선형 판별 분석(LDA)의 주요 목적
- 차원 축소: 데이터를 더 작은 차원으로 변환하여 분석과 모델링의 효율성을 높인다.
- 분류 성능 향상: 데이터의 클래스 간 분리를 최대화하여 분류 문제에서 성능을 향상시킨다.
선형 판별 분석(LDA)의 작동 원리
선형 판별 분석(LDA)은 다음과 같은 단계를 거쳐 데이터를 축소한다.
- 클래스 별 평균 벡터 계산: 각 클래스의 평균 벡터를 계산한다.
- 클래스 내 분산 행렬 계산: 각 클래스 내 데이터의 분산을 계산하여 클래스 내 분산 행렬을 구한다.
- 클래스 간 분산 행렬 계산: 각 클래스의 평균 벡터와 전체 평균 벡터의 차이를 계산하여 클래스 간 분산 행렬을 구한다.
- 고유값 분해: 클래스 내 분산 행렬의 역행렬과 클래스 간 분산 행렬의 곱을 고유값 분해하여 고유값과 고유벡터를 구한다.
- 가장 큰 고유값에 해당하는 고유벡터 선택: 가장 큰 고유값에 해당하는 고유벡터를 선택하여 데이터를 투영한다.
Python 코드 구현
from sklearn.datasets import load_iris
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis as LDA
import matplotlib.pyplot as plt
# 데이터 로드
iris = load_iris()
X = iris.data # 특징 데이터 (4차원)
y = iris.target
# LDA 모델 적용
lda = LDA(n_components=2) # 2차원으로 축소
X_lda = lda.fit_transform(X, y)
# 결과 시각화
fig = plt.figure(figsize=(12, 6))
ax = fig.add_subplot(121, projection='3d')
sc = ax.scatter(X[:, 0], X[:, 1], X[:, 2], c=y, cmap='viridis', edgecolor='k')
ax.set_title('Original Data (3D Visualization)')
ax.set_xlabel('Feature 1')
ax.set_ylabel('Feature 2')
ax.set_zlabel('Feature 3')
ax2 = fig.add_subplot(122)
scatter = ax2.scatter(X_lda[:, 0], X_lda[:, 1], c=y, cmap='viridis', edgecolor='k')
ax2.set_title('LDA Result (2D Projection)')
ax2.set_xlabel('Linear Discriminant 1')
ax2.set_ylabel('Linear Discriminant 2')
plt.tight_layout()
plt.show()
코드 해설
LDA(n_components=2)
: 데이터를 2차원으로 축소한다. LDA는 클래스 레이블을 고려해 차원을 축소하므로, 분류 문제에 특히 효과적이다.fit_transform
: LDA 모델을 학습하고 데이터를 변환한다.plt.scatter
: 2차원으로 축소된 데이터를 시각화하여 클래스 간 분리가 잘 되었는지 확인한다.
선형 판별 분석(LDA)을 통한 차원 축소 후 데이터 검증 방법
선형 판별 분석(LDA)을 통해 차원 축소를 수행한 후, 데이터의 품질과 분류 성능을 검증하기 위해 다양한 방법을 사용할 수 있다. 선형 판별 분석(LDA)은 주로 데이터의 분류 성능을 높이기 위해 사용되므로, 검증 과정에서는 축소된 데이터가 원래 데이터의 분류 성능을 잘 유지하는지를 평가하는 것이 중요하다.
교차 검증(Cross-Validation)
선형 판별 분석(LDA)을 통해 차원을 축소한 후, 교차 검증 기법을 사용해 모델의 성능을 평가할 수 있다. 교차 검증은 데이터를 여러 개의 폴드(fold)로 나누어 학습과 검증을 반복하여 모델의 성능을 평가하는 방법이다. 이는 과적합을 방지하고 모델의 일반화 성능을 측정하는 데 유용하다.
확인방법
from sklearn.model_selection import cross_val_score from sklearn.linear_model import LogisticRegression # LDA를 통해 차원 축소 lda = LDA(n_components=2) X_lda = lda.fit_transform(X, y) # 로지스틱 회귀 모델을 사용해 교차 검증 model = LogisticRegression() scores = cross_val_score(model, X_lda, y, cv=5) # 5-폴드 교차 검증 print("Cross-Validation Scores:", scores) print("Mean Accuracy:", scores.mean())
결과
Cross-Validation Scores: [1. 1. 0.96666667 0.93333333 1. ] Mean Accuracy: 0.9800000000000001
교차 검증 점수(Cross-Validation Scores): [1.0, 1.0, 0.96666667, 0.93333333, 1.0]
- 교차 검증 점수는 데이터를 5개의 폴드로 나누어 각각의 폴드에서 모델을 학습하고 평가한 정확도를 나타낸다.
- 각 폴드에서의 정확도가 매우 높은 값(1.0 또는 0.966, 0.933)으로 확인되었다. 이는 모델이 폴드마다 높은 성능을 유지하고 있다는 것을 의미한다.
평균 정확도(Mean Accuracy): 0.9800000000000001
- 평균 정확도는 각 폴드에서의 정확도를 평균낸 값이다.
0.980
이라는 결과는 모델이 전반적으로 약98%
의 정확도를 보였다는 것을 의미한다. - 이는 모델이 차원 축소된 데이터에서도 높은 성능을 유지하고 있다는 것을 보여준다.
클러스터링 지표(Clustering Metrics)
차원 축소 후 데이터가 잘 군집되었는지 확인하기 위해 실루엣 점수(Silhouette Score)나 칼린스키-하라바즈(Calinski-Harabasz) 지수 같은 클러스터링 지표를 사용할 수 있다. 이는 차원 축소 후 데이터가 얼마나 잘 구분되고 있는지를 객관적으로 평가하는 방법이다.
확인방법
from sklearn.metrics import silhouette_score sil_score = silhouette_score(X_lda, y) print("Silhouette Score:", sil_score)
결과
Silhouette Score: 0.6455434254448363
실루엣 점수(Silhouette Score)는 클러스터링의 품질을 평가하는 지표로, 각 데이터 포인트가 자신이 속한 클러스터 내에서 얼마나 잘 맞는지와 다른 클러스터와 얼마나 명확히 분리되는지를 측정한다. 점수는 -1에서 1 사이의 값을 가지며, 다음과 같이 해석할 수 있다
- 1에 가까운 값: 데이터 포인트가 잘 군집되어 있으며, 다른 클러스터와 명확히 분리되어 있음을 의미한다.
- 0에 가까운 값: 클러스터가 겹치거나, 데이터 포인트가 클러스터의 경계에 위치해 있어 분리의 명확성이 부족함을 나타낸다.
- -1에 가까운 값: 데이터 포인트가 잘못된 클러스터에 할당되었음을 의미한다.
Silhouette Score: 0.6455434254448363
은 비교적 높은 점수이며, 아래와 같이 분석할 수 있다.
- 데이터 포인트가 속한 클러스터 내에서 잘 밀집되어 있으며, 다른 클러스터와도 어느 정도 명확히 분리되어 있다.
- 군집화가 전반적으로 성공적이며, 데이터의 분류 및 클러스터링 품질이 양호하다고 평가할 수 있다.
시각적 검증(Visual Verification)
선형 판별 분석(LDA)을 통해 차원을 축소한 후, 데이터가 시각적으로 잘 분리되는지를 확인하는 것도 중요하다. 이를 위해 2D나 3D 플롯을 사용하여 데이터 포인트가 서로 다른 클래스 사이에서 잘 분리되는지 시각적으로 확인할 수 있다.
확인방법
LDA의 장단점
장점
- 분류 성능 향상: 데이터의 클래스 간 분리를 최대화하여 모델의 성능을 높인다.
- 해석 용이성: 투영된 축이 클래스 간 분리를 잘 설명한다.
단점
- 선형성 가정: 데이터가 선형적으로 분리 가능할 때만 효과적이다.
- 클래스 수 제한: 차원 축소 후 차원의 수는 클래스의 개수보다 하나 적다.
결론
선형 판별 분석(LDA)은 분류 문제에서 데이터의 차원을 줄이면서도 중요한 정보를 보존하는 강력한 도구이다. 이를 통해 분석과 모델링의 효율성을 높이고, 분류 성능을 향상시킬 수 있다.