저번 포스팅까지 무려 5회차의 회귀분석에 대해 알아보았는데요..!
이번에는 로지스틱회귀, 선형판별분석, KNN을 이용한 분류에 대해 알아보려고 합니다.
분류는 회귀와 다르게 반응변수 Y를 양적변수(quantitative)가 아닌 질적변수(qualitative)로 두고 분석합니다.
질적변수는 범주형(Categorical)변수로도 불리며 R에서는 factor형을 통해 질적변수를 나타냅니다.
참고로 분류(Classification)에는 포스팅에 나와있는 로지스틱회귀, LDA, QDA 말고도 랜덤포레스트, 부스팅, SVM 등 다양한 기법이 존재합니다.
1. 로지스틱 회귀분석 (Logistic Regression)
- 반응변수 Y를 직접 모델링 하는 것이 아닌 특정 범주에 속할 확률 $Pr(Y=1|X)$을 모델링
- 범위가 [0, 1]에 존재하도록 Logistic function을 이용
- 확률을 바로 모델링한 $P(X) = \beta_0 + \beta_1X$는 확률이 가질 수 있는 값 [0, 1]을 벗어날 수 있음
- $ P(X) = \frac{e^{\beta_0 + \beta_1X_1 + \beta_2X_2 + \cdots + \beta_pX_p}}{1+e^{\beta_0 + \beta_1X_1 + \beta_2X_2 + \cdots + \beta_pX_p}}$
- 오즈(odds) $ \frac{P(X)}{1-P(X)} = e^{\beta_0 + \beta_1X_1 + \beta_2X_2 + \cdots + \beta_pX_p}$ : 공산이라고도 불리며 성공확률/실패확률을 의미
- 로짓(logit) $logit(X) = log(\frac{P(X)}{1-P(X)})= \beta_0 + \beta_1X_1 + \beta_2X_2 + \cdots + \beta_pX_p$ : 로그공산이라고도 불림
- 회귀계수($\beta_k$)의 적합을 위해 최대가능도(MLE) 또는 비선형 최소제곱법을 사용
- 모델을 이용해 예측한 확률 $\hat{p(x_i)}$와 성공을 1, 실패를 0으로 코딩한 $y_i$의 값이 비슷해지도록 적합
- 가능도 함수 $l(\beta) = \prod_{k=1}^{n}p(x_i)^{y_i}(1-p(x_i))^{y_i}$를 최대로하는 $\beta$를 추정치(Estimator)로 사용
- 하나의 설명변수를 사용한 모델과 다수의 설명변수를 사용한 모델에서 특정 설명변수의 회귀계수가 크게 다를 수 있음
- 적합된 모델을 가지고 확률을 예측할 수 있음
$$ \hat{P(X)} = \frac{e^{\hat{\beta_0} + \hat{\beta_1X_1} + \cdots + \hat{\beta_pX_p}}}{1+e^{\hat{\beta_0} + \hat{\beta_1X_1} + \cdots + \hat{\beta_pX_p}}} $$
참고로 클래스(범주)의 수가 3개 이상인 경우에는 다중클래스 로지스틱회귀를 적용할 수 있으나 일반적으로 판별분석과 같은 다른 기법을 적용하는 것을 권장합니다.
2. 예제(Example)
대학원 진학과 관련된 데이터를 이용해 로지스틱 회귀를 진행하겠습니다. 사용한 데이터 셋의 반응변수(Y)는 admit로 대학원진학 여부를 나타내는 이진 변수로 1이면 대학원에 진학했음을 나타냅니다. 또한 모델에 사용한 설명변수(X)의 이름과 뜻은 다음과 같습니다. (GRE : 시험점수, GPA : 학점, rank : 학부의 명성(1~4, 작을수록 명성이 좋음))
R에서 로지스틱 회귀를 진행하기 위해 glm(formula, family="binomial) 함수를 사용합니다.
data <- read.csv("https://stats.idre.ucla.edu/stat/data/binary.csv")
data$rank <- factor(data$rank)
logistic.fit <- glm(admit ~ gre + gpa + rank, data=data, family = "binomial")
summary(logistic.fit)
- 회귀계수와 관련한 P-value를 살펴보면 gre, gpa는 유의수준 0.05보다 크므로 대학원 진학에 유의한 영향을 주지못한다고 판단할 수 있습니다.
- 적합된 모델 : $P(Y=1|X) = \frac{1}{1+e^{-(-3.99+0.002gre+0.8gpa-0.675I(rank=2)-1.3I(rank=3)-1.5I(rank=4))}}$
또한, 아래와 같이 gre점수 및 rank에 따른 예측 합격률을 시각화할 수 있습니다. (gpa는 median으로 예측)
library(tidyverse)
library(modelr)
data %>% modelr::data_grid(gre = seq_range(gre, 500, expand = 0.1), rank, gpa = median(gpa)) %>%
modelr::add_predictions(logistic.fit, type = "response") %>%
ggplot(mapping=aes(x=gre, y=pred, color = rank)) + geom_line() +
geom_point(data = data, mapping=aes(x=gre, y=admit),
position = position_jitter(height=0.05)) +
ylim(0, 1) + xlim(200, 800)
Tidymodels 패키지를 이용한 코드는 https://moogie.tistory.com/51 를 참고해주세요! (Machine Learning의 분류 편을 다 보시고 참고하시는 것을 권장합니다!)
'AI > Machine Learning' 카테고리의 다른 글
[ISLR] 4. 분류(Classification) - 이차선형판별분석(QDA) (0) | 2023.03.31 |
---|---|
[ISLR] 4.분류(Classification) - 선형판별분석(LDA) (0) | 2023.03.30 |
[ISR] 3. 선형회귀(Linear Regression) Part 5 (0) | 2023.03.11 |
[ISR] 3. 선형회귀(Linear Regression) Part 4 (0) | 2023.03.09 |
[ISR] 3. 선형회귀(Linear Regression) Part 3 (0) | 2023.03.08 |