본문 바로가기
공부/R & Python

10-4. 판별분석(Discriminant Analysis) 2 - 이차판별분석 -

by 드인 2020. 3. 3.

10-4. 판별분석(Discriminant Analysis) 2

- 이차판별분석 -


4) 선형판별분석 vs 이차판별분석

 

5) 이차판별분석(QDA)

- 모집단 등분산 검정

분산-공분산 행렬이 범주별로 다른 경우, 이차판별분석(QDA)을 실시

=> Box's M-test

     귀무가설 : 모집단의 분산-공분산 행렬이 동일

     대립가설 : 모집단의 분산-공분산 행렬이 동일 X

 

등분산검정을 위한 패키지 : biotools

install.packages("biotools")
library(biotools)
boxM(iris[1:4], iris$Species)

 

[출력 결과]

Box's M-test for Homogeneity of Covariance Matrices

data:  iris[1:4]
Chi-Sq (approx.) = 140.94, df = 20, p-value < 2.2e-16

                                                 p-value~0

=> 귀무가설(등분산 가정)이 기각 -> QDA 실시!

 

- QDA 함수 : qda(종속변수~독립변수, data=학습 데이터 이름, prior=사전 확률)

iris.qda <- qda(Species ~ ., data=train, prior=c(1/3,1/3,1/3))
iris.qda

 

[출력 결과]

Call:
  qda(Species ~ ., data = train, prior = c(1/3, 1/3, 1/3))

                                         경우에 따라 다르게 줄 수 있음

Prior probabilities of groups:
     setosa   versicolor    virginica 
0.3333333  0.3333333  0.3333333 

Group means:
                Sepal.Length Sepal.Width Petal.Length Petal.Width 
setosa         5.047059    3.450000        1.482353  0.2617647
versicolor     5.900000    2.748571        4.240000  1.3085714
virginica       6.500000    2.900000        5.412903  2.0096774

독립변수에 대한 그룹별 평균값

 

- 검증 데이터에 QDA 결과를 적용하여 범주 추정

testpredq <- predict(iris.qda, test)
testpredq

 

[출력결과]

추정 범주

세 개 범주의 사후 확률(posterior probability)을 구한 후 max값의 범주로 할당

 

- 정확도 산정 : 오분류율 (검증데이터)

CrossTable(x=testLabels,y=testpredq$class, prop.chisq=FALSE)

 

[출력 결과]

- 정확도 : 49/50 -> 98%

- verisicolor를 virginica로 잘못 예측

- 오분류율 : 1/50 -> 2%

 

6) LDA vs QDA (Partition Plot)

- Partition Plot : partimat()

install.packages("klaR")
library(klaR)
partimat(as.factor(iris$Species) ~ ., data=iris, method="lda")
partimat(as.factor(iris$Species) ~ ., data=iris, method="qda")

 

전체 데이터 사용시 QDA가 오분류률 적음(petal length와 petal width)