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
Histogram of Z1
Histogram of Z2