이차 판별 분석(QDA)이란? AI에서 클래스마다 다른 퍼짐으로 분류하는 방법
TL;DR
이차 판별 분석(QDA)은 클래스마다 평균과 공분산을 따로 추정해 새 입력을 분류하는 지도학습 방법입니다. 클래스별로 다른 퍼짐과 특징 사이의 관계를 반영해 이차 결정 경계를 만듭니다. 공분산을 공유하는 LDA보다 유연하지만 자료가 적거나 특징이 많으면 추정이 불안정해집니다. 정규분포 가정, 클래스별 표본 수, 규제 설정과 예측 확률의 신뢰도를 함께 확인합니다.
핵심 3줄 요약
- 핵심 1
클래스별 퍼짐을 따로 배웁니다. 같은 특징이라도 클래스에 따라 분산과 함께 변하는 방향이 다를 수 있다고 봅니다. - 핵심 2
이차 경계로 범주를 고릅니다. 각 클래스의 분포와 사전확률을 결합하며, 이름의 이차는 예측값이 제곱이라는 뜻이 아닙니다. - 핵심 3
유연성만큼 자료와 검증이 필요합니다. 공분산 추정·규제·클래스 순서를 기록하고 보지 못한 데이터에서 오류와 확률을 확인합니다.
이 글에서 다룰 내용
- 이차 판별 분석의 한 문장 정의
- 상태별 센서 퍼짐으로 이해하는 쉬운 예시
- 클래스별 정규분포와 이차 경계의 작동 방식
- 공분산·사전확률·규제와 계산 설정의 뜻
- LDA·가우시안 나이브 베이즈와의 차이
- 실전 사용처와 데이터 분리 체크리스트
- 표본 부족·경고·확률 해석의 주의점
이차 판별 분석을 한 문장으로 정의하면 무엇인가요?
이차 판별 분석(Quadratic Discriminant Analysis, QDA)은 클래스별 다변량 정규분포와 사전확률을 이용해 새 입력의 소속 클래스를 예측하는 분류 방법입니다.
평균은 클래스의 중심이고 공분산은 특징의 퍼짐과 함께 변하는 관계입니다. QDA는 정상과 이상처럼 정답으로 나눈 그룹마다 이 정보를 따로 추정합니다. 모든 그룹이 같은 모양으로 흩어진다는 제한을 두지 않습니다.
정규분포 가정은 클래스 안의 입력 특징에 적용됩니다. 전체 자료를 합친 분포가 정규분포여야 한다는 뜻은 아닙니다. 라벨이 없는 점을 저절로 묶는 군집화와도 다릅니다. 학습할 때는 사례별 입력과 정답 클래스가 모두 필요합니다.
한 줄 정리: QDA는 클래스마다 서로 다른 점 구름의 중심과 모양을 배우고, 새 점이 어느 분포에서 나올 법한지 비교합니다.
쉬운 예시로 이해해 볼까요?
감자나라ai님이 장비의 온도와 진동으로 정상·이상 상태를 구분한다고 가정해 보겠습니다. 정상 상태에서는 온도가 바뀌어도 진동이 좁은 범위에 머물고, 이상 상태에서는 온도와 진동이 함께 크게 변할 수 있습니다. 이 예시는 원리를 설명하려고 만든 상황이며 실제 장비의 측정 결과는 아닙니다.
두 특징을 가로·세로축으로 표시하면 정상 표본과 이상 표본이 서로 다른 방향으로 길어진 점 구름을 만들 수 있습니다. QDA는 두 구름에 같은 타원을 씌우지 않습니다. 클래스마다 중심과 퍼짐, 기울어진 방향을 따로 배웁니다.
새 입력이 들어오면 어느 중심에 가까운지만 보지 않습니다. 해당 방향으로 얼마나 흔하게 변하는지, 분포가 얼마나 넓은지, 그 클래스가 얼마나 자주 나타나는지를 함께 반영합니다. 넓은 구름에 들어갔다는 이유만으로 그 클래스의 확률이 항상 높아지는 것도 아닙니다.
scikit-learn의 공식 비교 예제는 공분산을 공유하는 데이터와 클래스별 공분산이 다른 데이터를 나란히 보여 줍니다. 퍼짐이 다를 때 QDA의 비선형 경계와 LDA의 선형 경계가 달라지는 원리를 확인하는 예제입니다. 그림의 차이를 실제 업무에서의 성능 우위로 바로 옮기지는 않습니다.
쉬운 예시: 점 구름의 색깔마다 별도의 타원을 맞춘다고 생각하면 됩니다. 타원은 분포를 설명하는 그림이지 모든 점이 그 안에 들어온다는 보증은 아닙니다.
왜 AI에서 이차 판별 분석이 중요한가요?
클래스마다 다른 특징 관계를 반영합니다
어떤 클래스에서는 두 측정값이 함께 커지고 다른 클래스에서는 거의 관계가 없을 수 있습니다. QDA의 클래스별 공분산은 이런 차이를 모델에 담습니다. 평균만 다르다는 가정으로 충분한지, 퍼짐과 방향도 달리 보아야 하는지 비교할 기준이 됩니다.
유연한 경계의 이익과 부담을 나누어 봅니다
공분산을 따로 추정하면 경계가 더 다양한 모양을 띱니다. 그만큼 추정할 공분산 정보도 늘어납니다. 특히 드문 클래스의 자료가 적으면 그 클래스의 퍼짐을 믿기 어렵습니다. 복잡한 경계가 학습 자료를 잘 나누는지와 새 자료의 분류가 좋아지는지는 따로 확인합니다.
이차 판별 분석은 어떤 순서로 작동하나요?
1. 라벨별 평균과 공분산을 추정합니다
입력 표의 한 행은 사례, 한 열은 숫자 특징으로 맞춥니다. 라벨에 따라 자료를 나누고 클래스별 중심과 공분산을 추정합니다. 클래스 사전확률을 별도로 지정하지 않으면 scikit-learn은 학습 자료에서의 클래스 비율을 사용합니다.
2. 분포와 사전확률로 클래스 점수를 만듭니다
모델은 새 입력이 각 클래스의 정규분포에서 얼마나 그럴듯한지 계산하고 사전확률을 결합합니다. 베이즈 정리로 입력이 주어졌을 때의 클래스 확률을 구합니다. 점수에는 중심에서의 차이뿐 아니라 공분산에 따른 방향별 거리와 분포의 퍼짐이 들어갑니다.
LDA는 공분산을 공유하므로 클래스 점수를 비교할 때 공통 이차항이 사라집니다. QDA는 클래스마다 공분산이 달라 일반적으로 이차항이 남습니다. 특징이 두 개라면 경계가 곡선이 될 수 있습니다. 공분산이 같아지는 특수한 경우에는 경계가 선형으로 줄어들 수 있습니다.
3. 예측 라벨과 확률을 구분해 반환합니다
predict
는 클래스 라벨을,
predict_proba
는 각 클래스의 추정 확률을 반환합니다. 확률 열은
classes_
순서로 읽습니다. 첫 열이 언제나 정상이고 마지막 열이 이상이라고 임의로 정하지 않습니다.
decision_function
은 확률을 백분율로 바꾼 값이 아닙니다. 이진 분류에서는 두 클래스의 로그 사후확률 차이에 해당하는 판별 점수입니다. 라벨·확률·판별 점수 중 실제 판단에 쓰는 출력을 정한 뒤 평가합니다.
핵심 인사이트: QDA의 이차는 결정 경계의 형태를 가리킵니다. 모든 곡선 모양을 자유롭게 배우거나 입력 숫자의 제곱을 정답으로 내놓는다는 뜻은 아닙니다.
주요 설정과 결과는 어떻게 읽나요?
priors는 클래스의 사전확률입니다
priors
는 새 입력을 보기 전에 반영할 클래스 비율입니다. 학습 비율을 그대로 쓰는 경우와 업무상의 비율을 따로 지정하는 경우를 구분합니다. 이상 사례를 일부러 많이 모은 데이터라면 수집 비율이 운영 비율을 뜻하지 않을 수 있으므로 지정 근거를 기록합니다.
reg_param과 shrinkage는 구분합니다
reg_param
은 클래스별 공분산 추정을 규제하는 설정입니다. scikit-learn API는 분산 성분을 단위 크기 쪽으로 조정하는 식을 안내합니다. 값의 뜻과 적용 좌표를 확인하고 기본값과 검증 결과를 비교합니다. 강도를 키운다고 분류 성능이 계속 좋아지는 것은 아닙니다.
이번에 확인한 scikit-learn 1.9.1 문서는 QDA의
solver="svd"
와
solver="eigen"
을 안내합니다.
shrinkage
와 별도
covariance_estimator
는 QDA에서 eigen 방식에만 적용하며 두 옵션을 동시에 지정하지 않습니다. LDA의 lsqr 지원 조건을 QDA에 그대로 가져오지 않습니다.
설치 버전이 다르면 지원하는 인자가 다를 수 있습니다. 오래된 예제에서 QDA는 shrinkage를 지원하지 않는다고 설명하더라도 현재 API와 설치 버전을 먼저 맞춰 봅니다. 개념 설명과 특정 버전의 실행 옵션을 구분하면 설정 오류를 줄일 수 있습니다.
tol은 예측을 고치는 규제 강도가 아닙니다
QDA API의
tol
은 공분산이 충분한 랭크를 갖추었는지에 관한 경고 기준입니다. 문서는 이 값이 예측에 영향을 주지 않는다고 명시합니다. 값을 바꿔 경고가 사라졌다고 데이터 부족이나 선형 종속 문제가 해결된 것은 아닙니다.
store_covariance=True
는 클래스별 공분산을 확인하도록 저장하는 옵션입니다. 저장된
covariance_
와
means_
는 학습 결과이며 미래 데이터의 품질 보증이 아닙니다. 진단용 저장 여부와 추정 방식·규제를 별개로 기록합니다.
실전 팁: 설정 이름만 복사하지 말고 모델명과 라이브러리 버전, 계산 방식, 공분산 추정 옵션을 한 묶음으로 남기세요.
이차 판별 분석과 헷갈리는 용어는 무엇이 다른가요?
선형 판별 분석과 QDA의 차이
선형 판별 분석(LDA)은 클래스마다 중심은 다르게 두지만 공분산은 공유합니다. QDA는 공분산도 별도로 추정합니다. scikit-learn의 LDA는
transform
으로 지도 차원 축소를 지원하지만 QDA는 같은 변환 기능을 제공하는 모델이 아닙니다.
가우시안 나이브 베이즈와 QDA의 차이
가우시안 나이브 베이즈는 클래스가 주어졌을 때 특징들이 조건부 독립이라고 가정합니다. QDA는 공분산의 비대각 성분으로 특징 사이의 관계를 반영합니다. 이론상 QDA의 공분산을 대각 형태로 제한하면 가우시안 나이브 베이즈와 연결되지만 기본 QDA가 독립을 가정하는 것은 아닙니다.
이차 회귀와 QDA의 차이
이차 회귀는 제곱항 등을 이용해 연속적인 숫자를 예측하는 회귀 모델을 말할 때 쓰입니다. QDA의 목적은 범주 분류입니다. 입력이 숫자이고 계산에 이차항이 등장해도 출력 대상과 평가 지표가 같지는 않습니다. 정답이 정상·이상인지, 처리 시간 같은 수치인지부터 구분합니다.
비교 정리: LDA는 공분산 공유, QDA는 클래스별 공분산, 가우시안 나이브 베이즈는 클래스 안의 조건부 독립이 핵심입니다. QDA를 차원 축소나 수치 회귀의 다른 이름으로 쓰지 않습니다.
실전에서는 어디에 쓰이나요?
라벨이 있는 수치 특징의 분류 후보
센서 측정값으로 상태를 구분하거나 수치화한 관측 특징으로 범주를 예측할 때 후보로 비교합니다. 모든 데이터에 잘 맞는다는 추천은 아닙니다. 클래스별 표본이 충분한지와 정규분포 가정이 현실적인지를 살펴 같은 평가 분할의 LDA 등과 대조합니다.
클래스별 퍼짐 차이를 조사하는 비교 실험
공식 공분산 타원 예제처럼 평균이 다른 정도와 퍼짐이 다른 정도를 나누어 살펴볼 때 유용합니다. 오류가 모이는 위치를 원본 사례와 연결하면 라벨 오류나 분포 차이를 조사할 단서가 됩니다. 보기 좋은 경계선만 저장하지 말고 오분류 사례도 함께 남깁니다.
이차 판별 분석을 적용할 때 어떤 순서로 확인하나요?
1. 입력 특징과 클래스별 자료를 점검합니다
특징의 뜻·단위·열 순서와 라벨 기준을 적습니다. 각 클래스의 표본 수를 세고 결측값·상수 열·중복 열·이상값을 조사합니다. 전체 행 수가 많아도 특정 클래스의 자료가 적으면 그 클래스의 공분산은 불안정할 수 있습니다.
2. 전처리를 학습 분할 안에서 맞춥니다
테스트 자료를 먼저 분리하고 결측값 대체나 특징 선택은 학습 자료로 정합니다. 교차 검증에서는 전처리와 QDA를 묶은 파이프라인 전체를 각 학습 구간에서 다시 맞춥니다. 전체 자료로 전처리를 끝낸 뒤 QDA만 교차 검증하는 방식은 누수를 막는 검증이 아닙니다.
3. 계산 옵션과 경고 원인을 대조합니다
설치 버전에서 지원하는 계산 방식과 규제 조합을 확인합니다. 공분산 경고가 나면 관련 클래스의 자료와 특징 관계부터 봅니다. 경고를 숨기는 설정 변경, 추정을 안정시키는 규제, 불필요한 특징 제거를 서로 다른 조치로 남깁니다.
4. 오류와 예측 확률을 따로 평가합니다
클래스별 혼동 행렬과 필요한 재현율을 보고 드문 상태를 놓치는 사례를 확인합니다. 확률을 업무 판단에 사용한다면 별도 평가 자료에서 예측 구간별 실제 비율도 점검합니다. 보정을 학습할 때도 원래 분류기 학습 자료와 독립된 예측을 사용합니다.
한 줄 정리: 같은 평가 자료로 LDA와 QDA를 비교하고, 공분산을 더 자유롭게 둔 선택이 실제 오류와 확률에 어떤 차이를 만드는지 남깁니다.
사용할 때 무엇을 주의해야 하나요?
첫째, 클래스별 자료 부족을 전체 표본 수로 가리지 않습니다. 특징이 많거나 서로 강하게 연결되면 공분산 추정이 불안정해질 수 있습니다. 기본 SVD 계산을 쓴다는 이유만으로 표본 부족 문제가 자동 해결되지는 않습니다.
둘째, 규제와 특징의 단위를 함께 확인합니다. 단위 크기 쪽으로 조정하는 규제는 입력의 척도와 함께 읽어야 합니다. 전처리를 바꾼 실험은 같은 규제 숫자라도 동일 조건이라고 단정하지 말고 분할을 고정해 결과를 대조합니다.
셋째, 높은 확률을 정답 보증으로 읽지 않습니다. 가정이 어긋나거나 운영 자료가 달라지면 모델의 추정 확률과 실제 비율이 어긋날 수 있습니다. 확률 평가 지표와 신뢰도 그림을 함께 보며 한 지표만 좋아졌다고 보정이 끝났다고 판단하지 않습니다.
넷째, 클래스의 의미와 순서를 유지합니다. 예측 확률을 저장할 때 클래스 이름과 입력 열, 전처리, 설정을 함께 보관합니다. 라벨의 이름이나 열 순서가 달라지면 같은 숫자도 다른 판정을 뜻할 수 있습니다.
주의: 더 휘어진 경계, 경고 없는 실행, 높은 학습 정확도는 서로 다른 관찰입니다. 어느 하나도 새 자료에서의 신뢰도를 대신하지 않습니다.
자주 묻는 질문
Q1. QDA는 비지도학습인가요?
아닙니다. 학습할 때 클래스 라벨을 사용합니다. 새 입력의 정답은 몰라도 되지만 각 클래스의 분포를 배울 학습 자료에는 정답이 있어야 합니다.
Q2. QDA를 쓰려면 모든 특징을 제곱해야 하나요?
그럴 필요가 없습니다. 클래스별 공분산을 사용해 계산하는 판별식에 이차항이 생기는 원리입니다. 입력 열을 무조건 제곱하면 모델이 받는 특징 자체가 달라집니다.
Q3. QDA는 항상 곡선 경계를 만드나요?
일반적으로 이차 경계를 표현하지만 클래스의 공분산이 같아지는 특수한 경우에는 선형 경계로 줄어들 수 있습니다. 이름만 보고 실제 경계의 모양이나 성능을 확정하지 않습니다.
Q4. QDA도 transform으로 차원을 줄이나요?
scikit-learn의 QDA는 LDA의 지도 차원 축소와 같은 transform 기능을 제공하지 않습니다. 확률 열의 수가 클래스 수와 같다는 사실도 입력 차원을 줄인 좌표를 반환한다는 뜻이 아닙니다.
Q5. tol을 바꾸면 공분산 경고의 원인이 해결되나요?
QDA 문서에서 tol은 경고 기준이며 예측에 영향을 주지 않습니다. 경고가 표시되지 않는 상태와 안정적인 추정은 구분합니다. 자료 수와 중복 특징, 지원하는 규제 설정을 따로 점검합니다.
Q6. LDA보다 유연하니 언제나 더 정확한가요?
아닙니다. 클래스별 퍼짐이 다를 때 유리할 여지가 있지만 따로 추정할 정보도 늘어납니다. 자료가 적으면 불안정한 공분산이 예측을 흔들 수 있으므로 같은 분할에서 실제 성능을 비교합니다.
출처
- scikit-learn API, QuadraticDiscriminantAnalysis
- scikit-learn User Guide, Linear and Quadratic Discriminant Analysis
- scikit-learn Example, Linear and Quadratic Discriminant Analysis with covariance ellipsoid
- scikit-learn API, LinearDiscriminantAnalysis
- scikit-learn User Guide, Probability calibration
- scikit-learn User Guide, Common pitfalls and recommended practices
마무리
이차 판별 분석은 클래스별 평균과 서로 다른 공분산, 사전확률로 범주를 예측하는 방법입니다. 공분산을 공유하는 LDA보다 다양한 경계를 만들지만 자료가 적거나 특징이 많을 때 추정 부담도 커집니다.
초보자라면 클래스마다 다른 퍼짐을 학습한다는 점, 라벨·확률·판별 점수의 차이, 공분산 규제와 경고 기준의 차이를 먼저 기억하세요. 그다음 설치 버전의 옵션과 데이터 분리, 보지 못한 자료에서의 오류·확률을 확인하면 QDA가 현재 문제에 맞는지 판단하기 쉬워집니다.
