10-3. 판별분석(Discriminant Analysis) 1
-선형판별분석-
1) 판별분석
· 판별분석(Discriminant Analysis)
- 객체를 몇 개의 범주로 분류
- 범주들을 가장 잘 구분하는 변수 파악 및 범주간 차이를 가장 잘 표현하는 함수 도출
2) 예제 데이터
- Iris 데이터 train/test 분할
iris<-read.csv("iris.csv")
attach(iris)
데이터 불러들이기
set.seed(1000)
N=nrow(iris)
tr.idx=sample(1:N, size=N*2/3, replace=FALSE)
데이터분할 (학습데이터 2/3, 검증데이터 1/3)
iris.train<-iris[tr.idx,-5]
iris.test<-iris[-tr.idx,-5]
trainLabels<-iris[tr.idx,5]
testLabels<-iris[-tr.idx,5]
iris.train (독립변수4개를 포함한 100개의 데이터)
iris.test (독립변수4개를 포함한 50개의 데이터)
trainLabels (학습데이터의 타겟변수)
testLabels (검증데이터의 타겟변수)
train<-iris[tr.idx,]
test<-iris[-tr.idx,]
3) 선형판별분석(LDA)
- 패키지(MASS) 설치
- LDA 함수 : lda(종속변수 ~ 독립변수, data=학습 데이터 이름, prior=사전 확률)
iris.lda <- lda(Species ~ ., data=train, prior=c(1/3,1/3,1/3))
동일한 의미 : Species ~ Sepal.Length + Sepal.Width + Petal.Length + Petal.Width
전체 매개변수 모두 사용한다는 의미
iris.lda
사전 확률(prior probablity) : 원인 A가 발생할 확률인 P(A)와 같이 결과가 나타나기 전 결정되어있는 확률
- 학습 데이터 LDA 결과
Call:
lda(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.051613 3.461290 1.480645 0.2387097
versicolor 5.935484 2.745161 4.267742 1.3129032
virginica 6.634211 2.965789 5.597368 2.0289474
Coefficients of linear discriminants:
LD1 LD2
Sepal.Length 0.8907558 -0.1072740
Sepal.Width 1.7077575 -2.2338358
Petal.Length -2.1513701 0.7355423
Petal.Width -2.9073216 -2.3919728
Proportion of trace:
LD1 LD2
0.9905 0.0095
첫 번째 범주 판별 함수
LD1 = 0.89 Sepal.Length + 1.71 Sepal.Width - 2.15 Petal.Length - 2.91 Petal.Width
두 번째 범주 판별 함수
LD2 = - 0.11 Sepal.Length - 2.23 Sepal.Width + 0.74 Petal.Length - 2.39 Petal.Width
LD1이 between-group variance의 99%를 설명
LD2가 between-group variance의 1%를 설명
- 검증 데이터에 LDA 결과를 적용하여 범주 추정
testpred <- predict(iris.lda, test)
testpred
[출력 결과]
$class
[1] setosa setosa setosa setosa
[5] setosa setosa setosa setosa
[9] setosa setosa setosa setosa
[13] setosa setosa setosa setosa
[17] setosa setosa setosa versicolor
[21] versicolor versicolor versicolor versicolor
[25] virginica versicolor versicolor versicolor
[29] versicolor versicolor versicolor versicolor
[33] versicolor versicolor versicolor versicolor
[37] versicolor versicolor virginica virginica
[41] virginica virginica virginica virginica
[45] virginica virginica virginica virginica
[49] virginica virginica
Levels: setosa versicolor virginica
추정 범주
$posterior
setosa versicolor virginica
2 1.000000e+00 1.173765e-17 9.991990e-37 setosa
8 1.000000e+00 2.526721e-20 7.057281e-40
14 1.000000e+00 2.742945e-19 4.300404e-39
16 1.000000e+00 8.883431e-29 9.438773e-50
19 1.000000e+00 3.299737e-23 3.645303e-43
20 1.000000e+00 8.229374e-23 1.526981e-42
세 개 범주의 사후 확률(posterior probability)을 구한 후 max값의 범주로 할당
- 정확도 산정 : 오분류율 (검증데이터)
CrossTable(x=testLabels,y=testpred$class, prop.chisq=FALSE)
[출력 결과]
Cell Contents
|-------------------------|
| N |
| N / Row Total |
| N / Col Total |
| N / Table Total |
|-------------------------|
Total Observations in Table: 50
| testpred$class
testLabels | setosa | versicolor | virginica | Row Total |
-------------|------------|------------|------------|------------|
setosa | 19 | 0 | 0 | 19 |
| 1.000 | 0.000 | 0.000 | 0.380 |
| 1.000 | 0.000 | 0.000 | |
| 0.380 | 0.000 | 0.000 | |
-------------|------------|------------|------------|------------|
versicolor | 0 | 18 | 1 | 19 |
| 0.000 | 0.947 | 0.053 | 0.380 |
| 0.000 | 1.000 | 0.077 | |
| 0.000 | 0.360 | 0.020 | |
-------------|------------|------------|------------|------------|
virginica | 0 | 0 | 12 | 12 |
| 0.000 | 0.000 | 1.000 | 0.240 |
| 0.000 | 0.000 | 0.923 | |
| 0.000 | 0.000 | 0.240 | |
-------------|------------|------------|------------|------------|
Column Total | 19 | 18 | 13 | 50 |
| 0.380 | 0.360 | 0.260 | |
-------------|------------|------------|------------|------------|
- 정확도 : 49/50 -> 98%
- versicolor를 virginica로 잘못 예측
- 오분류율 : 1/50 -> 2%
'공부 > R & Python' 카테고리의 다른 글
11-1. 서포트벡터머신 1 (Sipport Vector MAchine) (0) | 2020.03.04 |
---|---|
10-4. 판별분석(Discriminant Analysis) 2 - 이차판별분석 - (0) | 2020.03.03 |
10-2. k-인접기법(k-Nearest Neighbor) 2(최적 k 탐색과 가중치 k-인접기법) (0) | 2020.02.26 |
10-1. k-인접기법과 판별분석-k-인접기법(k-Nearest Neighbor) (0) | 2020.02.26 |
9-4. 데이터마이닝과 분류 (학습데이터와 검증데이터) (0) | 2020.02.24 |