6장 통계 기반 머신러닝 1 - 확률분포와 모델링 - 베이즈 판별 분석

R에 내장된 iris 데이터를 읽은 후 지도 학습 데이터와 테스트 데이터로 나눕니다.

library(MASS)
# 데이터 읽기와 학습용으로 사용할 테스트용 데이터 할당
data(iris)
train.data<- iris[c(1:75)*2-1,]
test.data<- iris[c(1:75)*2,]

# 학습에 사용할 데이터 라벨 교체
iris.labels<- factor(c(rep("s",25), rep("c",25), rep("v",25)))
train.data[,5]<-iris.labels
test.data[,5]<-iris.labels

판별 분석(사전분포 데이터는 없음)

사전분포를 지정하지 않은(각 붓꽃 종이 같을 확률) 상태로 판별 분석합니다. 여기서 Z1은 판별 도구입니다.

Z1<- lda(Species ~ ., data=train.data)
Z1
## Call:
## lda(Species ~ ., data = train.data)
## 
## Prior probabilities of groups:
##         c         s         v 
## 0.3333333 0.3333333 0.3333333 
## 
## Group means:
##   Sepal.Length Sepal.Width Petal.Length Petal.Width
## c        5.992       2.776        4.308       1.352
## s        5.024       3.480        1.456       0.228
## v        6.504       2.936        5.564       2.076
## 
## Coefficients of linear discriminants:
##                     LD1        LD2
## Sepal.Length -0.5917846 -0.1971830
## Sepal.Width  -1.8415262  2.2903417
## Petal.Length  1.6530521 -0.7406709
## Petal.Width   3.5634683  2.6365924
## 
## Proportion of trace:
##    LD1    LD2 
## 0.9913 0.0087

Z1의 학습 결과를 출력합니다.

# Z의 학습 결과
table(train.data[,5], predict(Z)$class)
##    
##      c  s  v
##   c 24  0  1
##   s  0 25  0
##   v  1  0 24

테스트 데이터를 Z1으로 판별합니다.

# 테스트용 데이터를 Z1으로 판별합니다
table(test.data[,5], predict(Z1, test.data)$class)
##    
##      c  s  v
##   c 24  0  1
##   s  0 25  0
##   v  2  0 23

베이즈 선형 판별 분석

사전분포를 설정한 후 판별 분석을 합니다. 사전분포는 붓꽃의 세 가지 종류에 1/6, 1/2, 1/3 확률을 지정합니다. Z2 역시 판별 도구입니다.

# 베이즈 선형 판별 분석(사전분포 확률 1/6, 1/2, 1/3)
Z2<- lda(Species ~ ., data=train.data, prior=c(1,3,2)/6)
Z2
## Call:
## lda(Species ~ ., data = train.data, prior = c(1, 3, 2)/6)
## 
## Prior probabilities of groups:
##         c         s         v 
## 0.1666667 0.5000000 0.3333333 
## 
## Group means:
##   Sepal.Length Sepal.Width Petal.Length Petal.Width
## c        5.992       2.776        4.308       1.352
## s        5.024       3.480        1.456       0.228
## v        6.504       2.936        5.564       2.076
## 
## Coefficients of linear discriminants:
##                     LD1        LD2
## Sepal.Length -0.5927403 -0.1942911
## Sepal.Width  -1.8303213  2.2993059
## Petal.Length  1.6494160 -0.7487334
## Petal.Width   3.5762994  2.6191618
## 
## Proportion of trace:
##    LD1    LD2 
## 0.9955 0.0045

판별 도구 Z2의 학습 결과를 출력합니다.

# Z2 학습 결과
table(train.data[,5], predict(Z2)$class)
##    
##      c  s  v
##   c 24  0  1
##   s  0 25  0
##   v  0  0 25

Z2에서 테스트 데이터를 판별합니다

# 테스트용 데이터를 Z2로 판별합니다
table(test.data[,5], predict(Z2, test.data)$class)
##    
##      c  s  v
##   c 24  0  1
##   s  0 25  0
##   v  1  0 24

Z1과 Z2 판별 함수 히스토그램

Histogram of Z1

Histogram of Z2