Programming Language/R
[R] Discriminant Analysis
jiachoi
2023. 7. 3. 12:08
1. Discriminant Analysis (판별분석)
- 객체를 몇 개의 범주로 분류
- 범주들을 가장 잘 구분하는 변수 파악 및 범주 간 차이를 가장 잘 표현하는 함수 도출.
- 선형 판별분석 : 공분산 행렬이 범주에 관계 없이 동일한 경우
- 이차 판별분석 : 공분산 행렬이 각각 다른 경우
2. Discriminant Analysis with R
1) Iris 데이터 train/test 분할
# set working directory
setwd("/Users/choijia/postech_ai/ML/AdR_week10-3_new")
# read csv file
iris<-read.csv("iris.csv")
attach(iris)
# training/ test data : n=150
set.seed(1000,sample.kind="Rounding")
N=nrow(iris)
tr.idx=sample(1:N, size=N*2/3, replace=FALSE)
# attributes in training and test
iris.train<-iris[tr.idx,-5]
iris.test<-iris[-tr.idx,-5]
# target value in training and test
trainLabels<-iris[tr.idx,5]
testLabels<-iris[-tr.idx,5]
train<-iris[tr.idx,]
test<-iris[-tr.idx,]
2) 선형 판별분석을 하기 위한 패키지 설치 ; MASS
# install the MASS package for LDA
install.packages("MASS")
library(MASS)
# install.packages("gmodels") #crosstable
library(gmodels)
3) 선형 판별분석(LDA ; Linear Discriminant Analysis)를 하기 위한 함수 = LDA 함수
- lda(종속변수 ~ 독립변수, data=, prior=사전 확률)
# Linear Discriminant Analysis (LDA) with training data n=100
iris.lda <- lda(Species ~ ., data=train, prior=c(1/3,1/3,1/3))
iris.lda
- 학습 데이터 LDA 결과
4) 검증 데이터에 LDA 결과를 적용해 범주 추정
# predict test data set n=50
testpred <- predict(iris.lda, test)
testpred
: 세 개 범주의 사후확률을 구한 후 max값의 범주로 할당
5) 정확도 산정 : 오분류율(검증데이터)
# accuracy of LDA
CrossTable(x=testLabels,y=testpred$class, prop.chisq=FALSE)
2. 선형판별분석(LDA) vs 이차판별분석(QDA)
▶ LDA : 분산, 공분산 행렬이 범주 관계없이 동일한 경우
- 장점 : 적은 파라미터 사용, 낮은 분산
- 단점 : 낮은 유연성
▶ QDA : 분산, 공분산 행렬이 범주별로 다른 경우
- 단점 : 많은 파라미터 사용, 높은 분산
- 장점 : 높은 유연성