QDA(Quadratic Discriminant Analysis)는 데이터가 서로 다른 클래스에 속하는 것인지 판별하는 분류 알고리즘입니다. QDA는 각 클래스의 데이터가 정규 분포를 따른다고 가정하며, 각 클래스마다 서로 다른 공분산 행렬을 사용합니다. QDA는 선형이 아닌 이차 방정식(Quadratic)을 사용하여 결정 경계를 만들기 때문에, 클래스들 간의 분포가 선형으로 나눠지지 않을 때 유용합니다.
QDA의 수식
QDA의 기본 아이디어는 클래스마다 정규 분포를 따르는 확률 밀도 함수를 사용하는 것입니다. 클래스 Ck에 대해, 주어진 입력 벡터 x의 확률 밀도 함수는 다음과 같습니다:
이와 같이, 지수 함수는 매우 빠르게 커지거나 작아지기 때문에 수치적으로 매우 큰 수나 작은 수를 다루게 될 수 있습니다. 컴퓨터에서 이러한 큰 수나 작은 수를 처리할 때, 오버플로우(overflow)나 언더플로우(underflow) 문제가 발생할 수 있습니다. 예를 들어, 확률 밀도가 너무 작으면 컴퓨터는 이를 처리할 수 없게 될 수 있습니다.
로그를 취하면 이러한 문제를 피할 수 있습니다. 왜냐하면, 지수 함수의 값을 로그로 바꾸면 큰 값들이 다루기 쉬운 수치로 변환되기 때문입니다. 예를 들어, 매우 작은 확률 값이 0에 가까워지지 않고, 그 대신 더 큰 수로 변환됩니다. 이는 계산을 보다 안정적으로 만들어 줍니다.
2. 곱셈을 덧셈으로 바꿀 수 있음
QDA에서 사후 확률을 계산할 때, 우리는 여러 개의 확률 값을 곱하는 형태로 계산하게 됩니다. 예를 들어, 사후 확률은 다음과 같이 계산됩니다:
P(Ck∣x)∝P(x∣Ck)P(Ck)
여기서 P(x∣Ck)와 P(Ck)는 각각 확률 밀도 함수와 사전 확률입니다. 확률 밀도 함수는 보통 매우 작은 값이기 때문에 곱셈을 하다 보면 결과값이 매우 작아집니다.
로그 변환을 사용하면 곱셈을 덧셈으로 바꿀 수 있습니다. 로그를 취한 후, 곱셈은 덧셈으로 변환되기 때문에 계산이 훨씬 간단하고 효율적입니다. 예를 들어, 다음과 같은 곱셈 관계가 있을 때:
P(Ck∣x)∝P(x∣Ck)P(Ck)
로그를 취하면:
logP(Ck∣x)∝logP(x∣Ck)+logP(Ck)
이렇게 하면 곱셈 대신 덧셈으로 계산을 할 수 있기 때문에 계산이 더 간단하고 효율적입니다. 특히 많은 데이터 포인트와 클래스가 있을 때, 이는 매우 중요한 최적화 이점이 됩니다.
3. 수학적 표현의 단순화
사후 확률의 로그 변환을 사용하면 수학적으로 더 단순하게 표현할 수 있습니다. QDA에서 사후 확률을 비교할 때, 우리가 사용하는 수식은 다음과 같습니다:
P(Ck∣x)∝P(x∣Ck)P(Ck)
로그를 취하면:
logP(Ck∣x)∝logP(x∣Ck)+logP(Ck)
이렇게 되면, 복잡한 확률 밀도 함수나 사전 확률을 곱하는 대신, 각 항목의 로그 값을 계산한 후 더하는 형태로 단순화됩니다. 이는 후속 계산을 더 빠르고 효율적으로 만들 수 있습니다.
4. 결정 경계를 쉽게 찾을 수 있음
QDA에서 결정 규칙은 각 클래스의 사후 확률을 비교하여 가장 큰 값을 선택하는 것입니다. 사후 확률은 다음과 같은 식으로 계산됩니다:
y^=argmaxkP(Ck∣x)
로그를 취한 후에는 로그 사후 확률을 비교하게 됩니다. 사후 확률을 비교하는 과정에서 로그 변환을 사용하면 계산이 더 간단해지고, 결정 경계를 쉽게 구할 수 있습니다.
예를 들어, 두 클래스 C1과 C2의 사후 확률이 같아지는 점에서 결정 경계가 형성됩니다:
P(C1∣x)=P(C2∣x)
로그 사후 확률을 사용하면:
logP(C1∣x)=logP(C2∣x)
이 식을 풀면 결정 경계는 이차 함수(quadratic function)로 표현되므로, 결정 경계를 찾는 것이 간단해집니다.