LDA·QDA 판별 분석과 Jackknife 오류율 평가
LDA와 QDA의 공분산 가정, 판별 경계 차이, Jackknife(LOOCV) 오류율 평가를 실무 모델 선택 관점에서 정리한다.
2026-08-14 · 최초 발행 2024-04-29
공분산 가정이 LDA와 QDA의 경계를 가른다
고전적 판별 분석은 통계적 가정이 분명하고 결과를 해석하기 쉬운 분류 방식이다. LDA(Linear Discriminant Analysis), QDA(Quadratic Discriminant Analysis), 그리고 Jackknife(LOOCV) 오류율 평가는 데이터 구조와 표본 규모에 맞춰 분류기를 선택할 때 함께 검토할 요소다.
LDA는 클래스별 평균과 공분산을 정규분포 가정 아래 추정한 뒤, 클래스 간 공분산을 하나로 공유한다. 이 가정에서 만들어지는 판별 경계는 선형이다. 고차원에 비해 표본이 적은 상황에서는 분산을 줄여 일반화 성능을 확보하는 데 도움이 된다.
QDA는 클래스마다 서로 다른 공분산을 허용한다. 그만큼 이차 곡면 형태의 경계를 만들 수 있어 비선형 경계가 필요한 데이터에 유연하게 대응한다. 반면 클래스별 공분산을 각각 추정해야 하므로 더 많은 표본이 필요하며, 분산 증가와 과적합 위험도 함께 고려해야 한다.
분류 오류율은 예측 클래스가 실제 클래스와 일치하지 않는 비율이다. Jackknife, 즉 Leave-One-Out Cross-Validation(LOOCV)는 매번 표본 하나를 제외한 데이터로 학습하고 제외한 표본을 예측하는 과정을 반복해 오류율을 구한다. 작은 데이터셋에서 과적합 편향을 줄인 일반화 오류 추정에 쓸 수 있다.
추정 안정성과 평가 방식을 함께 설계한다
판별 분석은 다변량 정규성을 가정한다. LDA에서는 클래스별 공분산의 동질성, QDA에서는 이질성을 전제로 한다. 공분산 행렬은 양정성이며 역행렬을 구할 수 있어야 한다. p > n 환경에서는 정규화가 필요하다.
학습 과정에서는 평균, 공유 공분산 또는 클래스별 공분산, 사전확률(클래스 비율)을 추정한다. 이후 로그 사후확률을 최대화하는 판별 함수를 구성하는데, LDA에서는 선형 함수가, QDA에서는 이차 함수가 만들어진다.
공분산 추정이 불안정할 때는 Shrinkage LDA(예: Ledoit–Wolf)나 QDA 정규화(reg_param)를 적용할 수 있다. 특성 스케일링, 이상치 완화를 위한 robust covariance, PCA 차원 축소도 함께 검토 대상이다.
소표본 환경의 일반화 오류는 Jackknife(LOOCV)로 추정할 수 있고, 계산량을 줄여야 한다면 K-Fold를 대안으로 사용할 수 있다. 최종 선택은 성능뿐 아니라 해석성, 운영비용까지 포함해 LDA와 QDA의 균형을 판단하는 문제다.
| 항목 | LDA | QDA | Jackknife 오류율(LOOCV) |
|---|---|---|---|
| 성능 | 선형 경계 적합 데이터에서 높은 안정성, 낮은 분산 | 비선형 경계 데이터에서 우수, 단 표본 부족 시 과적합 위험 | 편향 낮은 오류 추정, 분산 상대적 증가 |
| 확장성 | 피처 수 증가에 비교적 견고, shrinkage로 p≈n 대응 | 클래스별 공분산 추정으로 매개변수 급증, p≪n 권장 | 학습 반복 n회로 비용 큼, 병렬화로 완화 |
| 일관성 | 공분산 동질 가정 충족 시 일관성 우수 | 이질 공분산 충족 시 일관성 우수 | 데이터 분할 변동성 낮음(고정 LOO) |
| 안정성 | 이상치 민감, robust/shrinkage로 개선 | 이상치 및 공분산 특이성에 더 민감 | 데이터 누수 방지에 유리, 편향 보정 효과 |
| 운영 편의 | 해석 용이, 모니터링·배포 단순 | 설정·모니터링 복잡, 정규화 파라미터 관리 필요 | 구현 단순하나 계산량 부담, 캐시/병렬화 필요 |
데이터 분포에 맞춰 판별기를 선택하는 장면
제조 불량 판정에서는 공정 센서 피처가 다변량 정규성에 근사할 때 LDA로 라인 스코어링 시스템을 구성할 수 있다. 불균형 클래스에는 priors를 적용하고 Jackknife 오류율로 임곗값을 보정한다.
신용 리스크 조기 경보에서는 초기 신용 層별 경계가 완만하면 LDA 기반으로 운영하고, 비선형 징후가 나타나면 QDA 전환을 검토한다. shrinkage와 특성군별 표준화는 추정 안정화에 사용한다.
생체표지자 분포 차이가 큰 의료 진단 보조에서는 QDA로 민감도 개선을 시도할 수 있다. 소표본 환경에서는 LOOCV로 일반화를 검증하고, 공분산 특이성에는 reg_param 스윕과 PCA 차원 축소를 병행한다.
전처리부터 오류율 집계까지의 흐름
공분산 행렬이 비양정이거나 특이면 LDA에는 shrinkage를, QDA에는 reg_param을 적용하고 피처 축소를 고려한다. 클래스 불균형에는 prior 조정과 비용민감 임곗값 설정이 필요하다. 전처리와 스케일러는 반드시 교차검증 fold 안에서 적합해 데이터 누수를 막아야 한다.
Python에서 LOOCV 오류율 계산하기
환경은 Python 3.10+, scikit-learn 1.4+, numpy 1.26+이며, 범주형 피처 인코딩과 결측치 처리가 끝난 상태를 전제로 한다.
import numpy as np
from sklearn.datasets import load_wine
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis, QuadraticDiscriminantAnalysis
from sklearn.model_selection import LeaveOneOut, cross_val_score
X, y = load_wine(return_X_y=True)
# LDA with shrinkage
lda_pipe = Pipeline([
("scaler", StandardScaler()),
("lda", LinearDiscriminantAnalysis(solver="lsqr", shrinkage="auto"))
])
loo = LeaveOneOut()
lda_scores = cross_val_score(lda_pipe, X, y, cv=loo) # accuracy per left-out sample
lda_loo_error = 1 - lda_scores.mean()
# QDA with regularization
qda_pipe = Pipeline([
("scaler", StandardScaler()),
("qda", QuadraticDiscriminantAnalysis(reg_param=0.05))
])
qda_scores = cross_val_score(qda_pipe, X, y, cv=loo)
qda_loo_error = 1 - qda_scores.mean()
print(f"LDA Jackknife 오류율: {lda_loo_error:.4f}")
print(f"QDA Jackknife 오류율: {qda_loo_error:.4f}")
LDA에서 shrinkage="auto"와 solver="lsqr" 조합은 p≈n 또는 다중공선성 대응에 쓸 수 있다. QDA의 reg_param∈[0,1]에서 0은 무정규화이며, 값이 커질수록 분산은 감소하고 편향은 증가한다.
R MASS로 분류 결과를 교차 검증하기
환경은 R 4.3+, MASS 7.3+이며, 범주형 인코딩과 결측치 처리가 완료된 데이터를 사용한다.
library(MASS)
data(iris)
# LDA LOOCV
lda_cv <- lda(Species ~ ., data = iris, CV = TRUE)
lda_error <- mean(lda_cv$class != iris$Species)
# QDA LOOCV
qda_cv <- qda(Species ~ ., data = iris, CV = TRUE)
qda_error <- mean(qda_cv$class != iris$Species)
cat(sprintf("LDA Jackknife 오류율: %.4f\n", lda_error))
cat(sprintf("QDA Jackknife 오류율: %.4f\n", qda_error))
공분산이 특이하면 qda는 실패할 수 있다. reg_param 대안으로 caret, klaR 또는 사전적 차원 축소를 적용할 수 있으며, 패키지 버전별 동작 차이는 최신 정보 확인이 필요하다.
오류율 개선과 운영상 얻는 점
소표본 환경에서는 LOOCV의 편향 감소를 통해 일반화 추정 정확도 개선을 기대할 수 있으며, 기준 모델 대비 오류율 515%p 개선 가능성은 데이터 특성에 의존한다. LOOCV를 병렬화하면 계산 자원 최적화를 통해 시간 단축 38배 달성이 가능하다.
판별 분석은 모델 해석성을 높이고 규제 대응을 수월하게 만든다. 스코어 모니터링과 드리프트 진단도 비교적 명확해 운영 안정성 강화에 도움이 된다.
데이터 구조가 선형에 가깝고 표본이 제한적이라면 LDA를 우선 적용할 수 있다. 경계의 곡률과 이질적 분산이 뚜렷할 때는 QDA를 선택하되, 정규화로 공분산 추정을 안정화해야 한다. Jackknife(LOOCV) 평가도 전처리를 포함한 교차검증 파이프라인 안에서 수행해야 한다.