판별 분석
IT 위키
더 많은 작업
- Discriminant Analysis; 판별분석
- 집단(범주)이 알려진 자료로 판별 함수를 만들고, 새 관측값이 어느 집단에 속하는지 분류하는 다변량 분석 기법
종속변수가 범주형이고 독립변수가 연속형일 때 쓰는 지도 학습 분류 방법이다. 각 집단의 자료가 다변량 정규 분포를 따른다고 보고, 베이즈 정리로 사후확률이 가장 큰 집단에 배정한다. 모든 집단의 공분산 행렬이 같다고 두면 선형 판별 분석(LDA), 집단마다 다르게 두면 이차 판별 분석(QDA)이 된다. Fisher(1936)가 붓꽃(iris) 자료로 처음 제시한 방법이 LDA의 출발점이다.
Fisher의 방법은 집단 간 변동(SB)과 집단 내 변동(SW)의 비가 가장 커지는 투영 방향 w를 찾는다.
확률 모형으로 본 LDA는 집단 k의 사전확률 πk, 평균 μk, 공통 공분산 Σ로 판별 점수를 계산해 가장 큰 집단에 배정한다. x에 대해 1차식이므로 경계가 직선(초평면)이다.
QDA는 집단마다 공분산 Σk를 따로 추정하므로 x의 2차식이 되고 경계가 곡선이다.
| 항목 | LDA | QDA | 로지스틱 회귀 |
|---|---|---|---|
| 공분산 가정 | 모든 집단 동일 | 집단마다 다름 | 분포 가정 없음 |
| 결정 경계 | 선형 | 이차 곡선 | 선형(로짓에 대해) |
| 추정할 모수 | 적다 | 많다(집단 수 × 공분산) | 적다 |
| 소표본·변수가 많을 때 | 비교적 안정적 | 과적합 위험 | 비교적 안정적 |
| 정규성 가정이 맞을 때 | 효율적 | 효율적 | 덜 효율적 |
| 정규성이 깨질 때(범주형 변수 포함 등) | 성능 저하 | 성능 저하 | 강건 |
| 다범주 | 자연스럽게 확장 | 자연스럽게 확장 | 다항 로지스틱으로 확장 |
| 차원 축소 | 가능(최대 집단 수 − 1개 축) | 불가 | 불가 |
library(MASS)
fit <- lda(Species ~ ., data = iris)
fit # 사전확률, 집단 평균, 판별계수, 판별축 비율
pred <- predict(fit)
table(iris$Species, pred$class) # 혼동 행렬
head(pred$x) # 판별 점수(LD1, LD2)
cv <- lda(Species ~ ., data = iris, CV = TRUE) # LOOCV 예측
mean(cv$class == iris$Species)
qfit <- qda(Species ~ ., data = iris) # 이차 판별 분석
import numpy as np
from sklearn.datasets import load_iris
from sklearn.discriminant_analysis import (LinearDiscriminantAnalysis,
QuadraticDiscriminantAnalysis)
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import cross_val_score
X, y = load_iris(return_X_y=True)
lda = LinearDiscriminantAnalysis()
Z = lda.fit(X, y).transform(X) # 판별 함수 축으로 투영 (차원 축소)
print("투영 후 shape:", Z.shape)
print("판별축 설명 비율:", np.round(lda.explained_variance_ratio_, 4))
print("사전확률:", np.round(lda.priors_, 3))
print("첫 표본 사후확률:", np.round(lda.predict_proba(X[:1]), 4))
models = {"LDA": lda,
"QDA": QuadraticDiscriminantAnalysis(),
"Logistic": LogisticRegression(max_iter=1000)}
for name, m in models.items():
acc = cross_val_score(m, X, y, cv=5)
print(f"{name}: 5-fold 정확도 평균={acc.mean():.4f}")
실행 결과:
투영 후 shape: (150, 2)
판별축 설명 비율: [0.9912 0.0088]
사전확률: [0.333 0.333 0.333]
첫 표본 사후확률: [[1. 0. 0.]]
LDA: 5-fold 정확도 평균=0.9800
QDA: 5-fold 정확도 평균=0.9800
Logistic: 5-fold 정확도 평균=0.9733
- 붓꽃 자료는 변수 4개, 집단 3개이므로 판별 축은 최대 2개이고, 투영 후 자료가 150 × 2가 된다.
- 첫 번째 판별 축(LD1)이 집단 간 분산의 약 99.1%를 설명한다. 사실상 LD1 하나로 세 품종이 갈린다.
- 사전확률은 학습 자료의 집단 비율(각 1/3)로 정해진다. 첫 표본은 setosa일 사후확률이 1에 가까워 setosa로 분류된다.
- 5겹 교차 검증 정확도는 LDA와 QDA가 0.98, 로지스틱 회귀가 0.9733으로 비슷하다. 이처럼 성능이 비슷하면 모수가 적고 해석이 쉬운 LDA를 고를 수 있다.
- LDA는 집단별 공분산이 같다고 가정해 선형 경계를, QDA는 다르다고 두어 이차 경계를 만든다.
- 판별 분석은 다변량 정규성을 가정하지만 로지스틱 회귀는 분포 가정이 없다는 차이를 서술할 수 있어야 한다.
- LDA의 판별 축 수는 최대 min(집단 수 − 1, 변수 수)이며, 지도 학습 차원 축소로 쓸 수 있다. 주성분 분석과의 차이(집단 정보 사용 여부)를 묻는다.
- 실기에서는 판별 결과를 혼동 행렬과 정확도로 평가하고 다른 분류 모형과 비교하는 흐름으로 쓴다.
- Fisher, R. A. (1936). The use of multiple measurements in taxonomic problems. Annals of Eugenics 7(2), 179-188
- scikit-learn User Guide - Linear and Quadratic Discriminant Analysis
- scikit-learn - LinearDiscriminantAnalysis
- scikit-learn - QuadraticDiscriminantAnalysis
- CRAN - MASS reference manual (lda, qda)