안녕하세요. 저번 포스팅에서는 선형판별분석(LDA)에 대해 알아보았는데요. 이번 포스팅에서는 분류기법에 사용되는 또다른 기법인 이차선형판별분석(QDA)에 대해 간단하게 정리하려고 합니다.
1. LDA와 QDA
이전에 배웠던 LDA의 예측 모델은 베이즈 정리에 의해서 유도되었으며 이 과정에서 몇 가지 가정을 하였습니다. 우선 범주형 반응변수 $Y$의 각 클래스에 따른 관측치 $X$값은 평균(벡터)이 다른 다변량 정규분포를 따른다는 점이였고, 다변량 정규분포를 따르지만 공통인 분산(공분산행렬)을 가진다는 점이였죠.
하지만 앞으로 접할 데이터를 살펴보면 공통 분산을 가지고 있지 않은 경우가 많습니다. 이런 경우 적용할 수 있는 기법인 이차선형판별분석(QDA)입니다. 다만 이차선형판별분석 역시 반응변수 Y의 각 클래스에 따른 관측치 X가 다변량 정규분포를 따른다는 것은 같습니다. 따라서 LDA와 QDA의 가정을 수식으로 나타내면 아래와 같습니다.
LDA : $X \sim N(u_k, \sum)$, QDA : $X \sim N(u_k, \sum_k)$
2. QDA Modeling
LDA 모델을 유도한 것 처럼 베이즈 정리에 의해 유도된 아래 식에 확률밀도함수(pdf)를 대입하면 $\delta_k(x)$을 얻을 수 있습니다.
$$ Pr(Y=k | X=x) = \frac{\pi_kf_k(x)}{\sum_{i=1}^{K}\pi_if_i(x)}$$
$$\delta_k(x) = -\frac{1}{2}(x-u_k)^T{\sum}_k^{-1}(x-u_k) - \frac{1}{2}log|{\sum}_k| + log\pi_k$$
이때, QDA는 $\delta_k(x)$가 최대가 되는 k를 주어진 x값의 반응변수 Y의 클래스로 할당합니다.
참고로 공분산행렬은 설명변수의 수가 p개 일때 $p*p$ shape을 가지고 대칭행렬이므로 추정해야하는 파라미터의 수는 $\frac{p(p+1)}{2}$개 입니다. (대각성분과 상삼각성분만 구하면 되기 때문입니다.) 따라서 공통의 분산을 가진다는 LDA는 추정해야하는 수가 $\frac{p(p+1)}{2}$개이고 QDA는 공통의 분산을 갖지 않으므로 총 범주의 수 K개의 공분산행렬에 해당하는 $\frac{Kp(p+1)}{2}$개의 파라미터를 추정해야합니다. 따라서 편향-분산 절충(Bias-Variance TradeOff)에 의해서 LDA는 QDA보다 편향(Bias)가 크지만 낮은 분산(Variance)을 갖는 경향이 있으며, 반대로 QDA는 LDA보다 편향(Bias) 낮지만 높은 분산(Variance)을 가지는 경향이 있습니다.
3. SUMMARY
4. 예제(Example)
로지스틱 회귀분석 및 LDA와 비교하기 위해서 이전 포스팅에서 사용한 대학원 진학과 관련된 데이터를 이용해 선형판별분석을 진행하였습니다.
data <- read.csv("https://stats.idre.ucla.edu/stat/data/binary.csv")
data$rank <- factor(data$rank)
LDA모델에 적합하기에 앞서, 범주별 설명변수의 정규성을 검정해야 하는데요. 범주별로 설명변수의 분포가 정규분포를 따르지 않는다면 Box-Cox변환과 같은 변환을 고려해야 합니다. 이번 예시에서는Henze-Zirkler Test와 AD Test를 통해서 다변량 정규성을 검정하였습니다. 아래와 같이 입학 여부에 따른 수치형 변수들의 분포가 다변량 정규분포를 따르는 것을 알 수 있습니다.
- 다변량 정규성 검정 (귀무가설 $H_0$ : 데이터는 다변량 정규분포를 따른다)
- [HZ Test] mvnTest::HZ.test
- [AD Test] mvnTest::AD.test
- 참고 MVN: An R Package for Assessing Multivariate Normality
mvnTest::HZ.test(data %>% filter(admit == 0) %>% dplyr::select(-rank, -admit))
mvnTest::HZ.test(data %>% filter(admit == 1) %>% dplyr::select(-rank, -admit))
mvnTest::AD.test(data %>% filter(admit == 0) %>% dplyr::select(-rank, -admit))
mvnTest::AD.test(data %>% filter(admit == 1) %>% dplyr::select(-rank, -admit))
위 검정에서 각 그룹별 수치형 변수들은 다변량 정규성을 가진다고 말할 수 있습니다.
또한, 다변량 정규분포를 따르는 것을 확인하였으므로 공분산 행렬을 가지는지 확인해 봅시다. P-value가 0.05보다 크므로 공분산행렬이 유의미하게 다르다고 할 수 없습니다. 따라서 수준별로 서로 다른 공분산행렬을 가진다는 QDA의 가정과 다르므로 QDA보다 LDA의 성능이 좋을 것으로 기대됩니다.
- Test of Homogeneity of Covariance Matrices (공분산행렬의 동등성 검정)
- multiUS::BoxMTest 또는 rstatix::box_m 함수를 사용해서 검정
rstatix::box_m(data = dplyr::select(data, -admit, -rank), group = factor(data$admit))
multiUS::BoxMTest(dplyr::select(data, -admit, -rank), cl = factor(data$admit))
R에서는 MASS::qda( ) 또는 Tidymodeling에서 parsnip::discrim_quad( ) 함수를 사용해서 적합할 수 있습니다.
# Model
qda.fit <- qda(formula = admit ~ ., data = data)
# Predict
predict_grid <- data %>% modelr::data_grid(gre = seq_range(gre, 500, expand = 0.1), rank, gpa = median(gpa))
prob <- predict(qda.fit, newdata = predict_grid)$posterior[,2]
predict_grid %>% mutate(prob) %>%
ggplot(mapping=aes(x=gre, y=prob)) + geom_line(mapping=aes(color = rank))
LDA와 다르게 비선형적 형태를 가지고 있음을 확인할 수 있습니다.
'AI > Machine Learning' 카테고리의 다른 글
[ISLR] 4. 분류(Classifiction) With R Using Tidymodels (0) | 2023.03.31 |
---|---|
[ISLR] 4. 분류모델의 성과지표(Performance Metric) (0) | 2023.03.31 |
[ISLR] 4.분류(Classification) - 선형판별분석(LDA) (0) | 2023.03.30 |
[ISLR] 4. 분류(Classification) - 로지스틱 회귀분석(Logistic Regression) (0) | 2023.03.28 |
[ISR] 3. 선형회귀(Linear Regression) Part 5 (0) | 2023.03.11 |