10. k-인접기법과 판별분석
10-1. k-인접기법(k-Nearest Neighbor)
1) 분류 (Classification)
- 분류(Classification) - 지도학습(Supervised Learning). 타켓범주를 알고 있는 데이터로 분류규칙을 생성하고 새로운 데이터를 특정범주에 분류하는 기법
- 군집화(Clustering) - 비지도학습(Unsupervised Learning). 독립변수들의 속성을 기반으로 객체들을 그룹화하는 방법
2) k-인접기법 (k-nearest neighbor method)
k-인접방법 (kNN) : k개의 가장 가까운 이웃들을 사용해서 분류하는 방법
최적 k는?
- k가 너무 크면 데이터 구조를 파악하기 어렵고, 너무 작으면 과적합(overfitting) 위험이 있음
- 교차검증(cross-validation)으로 정확도가 높은 k를 선정
장점
- 단순하며 효율적
- 데이터 분산을 추정할 필요 없음
- 빠른 훈련 단계
단점
- 모델을 생성하지 않음
- 느린 분류 단계
- 많은 메모리 필요
- 결측치는 추가 작업 필요
kNN을 수행하기 위한 추가 패키지 설치
install.packages("class")
install.packages("gmodels")
install.packages("scales")
- kNN 수행을 위한 패키지 : "class"
- 분류분석 후 검증에 사용되는 cross table을 위한 패키지 : "gmodels"
- 최적 k 등 그래프를 위한 패키지 : "scales"
3) train/test 데이터 분할 (cross-validation)
- Iris 데이터 (데이터 불러들이기, 학습데이터와 검증데이터의 분할)
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]
iris.train (독립변수4개를 포함한 100개의 데이터)
iris.est (독립변수4개를 포함한 50개의 데이터)
trainLabels<-iris[tr.idx,5]
testLabels<-iris[-tr.idx,5]
trainLabels (학습데이터의 타겟변수)
testLabels (검증데이터의 타겟변수)
4) kNN의 수행과 결과
kNN함수 : knn(train=학습데이터, test=검증데이터, cl=타겟변수, k= )
md1<-knn(train=iris.train,test=iris.test,cl=trainLabels,k=5)
md1
k=5를 한 kNN의 결과 : md1에는 test 데이터(50개)들을 예측한 결과가 저장되어있음
- knn의 매뉴얼 : help(knn)
5) kNN(k=5)의 결과 - 정확도
CrossTable(x=testLabels, y=md1, prop.chisq=FALSE)
타겟변수의 실제값 예측값
[출력 결과]
Cell Contents
|--------------------------|
| N |
| N / Row Total |
| N / Col Total |
| N / Table Total |
|--------------------------|
Total Observations in Table: 50
| md1
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 | 17 | 2 | 19 |
| 0.000 | 0.895 | 0.105 | 0.380 |
| 0.000 | 0.944 | 0.154 | |
| 0.000 | 0.340 | 0.040 | |
-------------|------------|------------|------------|------------|
virginica | 0 | 1 | 11 | 12 |
| 0.000 | 0.083 | 0.917 | 0.240 |
| 0.000 | 0.056 | 0.846 | |
| 0.000 | 0.020 | 0.220 | |
-------------|------------|------------|-------------|------------|
Column Total | 19 | 18 | 13 | 50 |
| 0.380 | 0.360 | 0.260 | |
-------------|------------|------------|------------|------------|
- 정확도 : 47/50 -> 94%
- versicolor를 virginica로 오분류(2개)
- virginica를 versicolor로 오분류(1개)
- 오분류율 : 3/50 -> 6%
'공부 > R & Python' 카테고리의 다른 글
10-3. 판별분석(Discriminant Analysis) 1 -선형판별분석- (0) | 2020.03.03 |
---|---|
10-2. k-인접기법(k-Nearest Neighbor) 2(최적 k 탐색과 가중치 k-인접기법) (0) | 2020.02.26 |
9-4. 데이터마이닝과 분류 (학습데이터와 검증데이터) (0) | 2020.02.24 |
9-3. 데이터마이닝과 분류 (분류규칙과 과적합) (0) | 2020.02.24 |
9-2. 데이터마이닝과 예측 (다중회귀분석2) (0) | 2020.02.18 |