본문 바로가기

Programming/R

R을 이용한 Classifiers : LDA, QDA, NaiveBayes

반응변수가 범주형 변수 일 때, 예측변수와 반응변수간의 관계를 설명하는 분류기(classifiers) 모델링이 쓰이게 된다.

다양한 모델들이 있지만, 그 중 Logistic Regression, LDA, QDA, NaiveBayes 모델 이 가장 널리 알려진 것들인데,

이것들은 모두 R에서 이미 구현이 되어있다.  

 

LDA, QDA, NaiveBayes 에 관해 간단히 설명을 하자면, (베이즈 정리를 통한 설명)

이들은 모두 베이즈 정리를 응용하여, 즉 적절한 가정과 이미 주어진 사전확률을 통하여 사후확률(posterior)을 예측하는 모델들이다. 이 때, 사전확률(prior) P(X= k | Y )에 대하여, 각 Y의 수준에서 X의 분포가 정규분포를 따른다고 가정을 한다. 이를 이용하면, 베이즈 정리를 통하여 사후확률 P(Y= y | X = k) 를 구할 수 있고, x의 각 수준에 대하여 y의 확률이 가장 크게 나오는 y값으로 반응변수를 예측하는 것이다.

이 때,(예측변수가 다수일 때) LDA의 경우 Y의 각 값 에 대해서 X의 조건부 분산이 동일함을 가정한다. 반면, QDA의 경우 X의 조건부 분산이 Y의 각 값에 따라 다름을 전제로 한다. 

naiveBayes는, 예측변수의 개수가 다수일 때 예측변수간의 상호작용을 모두 생각하는 것은 사실상 힘들기 때문에, 각 예측변수가 서로 독립임을 전제로 한다.

 

이상 주저리가 길었고,, 이를 R함수를 이용하여 구현해보자.

이들 함수들의 문법 자체는 lm()과 거의 동일하다.

 

1. LDA

library(MASS) #LDA ,QDA 포함하는 라이브러리
lda.fit <- lda(y ~ x1 + x2, data = Data, subset = index)


plot(lda.fit) #도출한 사후확률을 막대그래프로 그려줌

#Predictions

lda.pred <- predict(lda.fit, Testset)
#Testset에 대하여 lda.fit으로 결과값 예측

lda.pred$class : 결과값 리스트 (범주형)
lda.pred$posterior : 사후확률 반환
lda.pred$x : 사후확률 차이를 알려줌

2. QDA: 문법이 완전히 동일하다.

함수만 qda() 사용

 

3. naiveBayes

- e1071이라는 라이브러리에 위치한 함수

library(e1071)
nb.fit <- naiveBayes (y ~ x1 + x2 , data = Data ,
                        subset = index)
                        
predict(nb.fit, testset) # 예측함수 : 예측값을 반환
predict(nb.fit, testset, type = 'raw') : 실제 도출 사후확률값을 반환

 

'Programming > R' 카테고리의 다른 글

Shrinkage Methods using R  (0) 2022.05.12
Subset selection using R : regsubsets()  (0) 2022.05.08
Resampling using R : Cross-validation / Bootstrap  (0) 2022.05.08
R : lm() / glm()  (0) 2022.05.07