SW/R

R : KNN classification (개념 및 예제)

얇은생각 2019. 3. 15. 12:30
반응형

KNN 아이디어

- 새로운 포인트( * )에 가장 가까운 K를 찾는다.

- 새로운 포인트( * )는 주요 클래스(A)에 속하는 것으로 결정한다.

A 클래수 이웃한 수 > B 클래스 이웃한 수

classification



알고리즘(Algorithm)

- 주어진 지점과 각 지점 사이의 거리를 계산합니다.

- 거리별 가장 가까운 K 지점을 선택합니다.

- K 포인트로부터 주요 클래스를 선택합니다. (클래스는 새로운 점을 위한 것입니다)


classification




어떻게 두 요소 사이의 거리를 계산할까요? 유클리드 ditance 공식을 이용합니다.

classification



K 를 얼마로 하는 것이 좋을까요?

- 크게 할 때와 작게 할 때 각각 장단점이 있습니다.

- 보통은 데이터 수가 N 이라고 할 때 K < sqrt(N) 을 권장합니다.

- k의 값에 따라 분류는 매우 달라질 수 있습니다. 아래 그림을 참조하세요.


classification




KNN classification 장점
- 통계적 가정 불필요 (비모수적 방법)
- 단순하다 
- 성능이 좋다
- 모델을 훈련(학습)하는 시간이 필요 없다 


KNN classification 단점
- 데이터가 커질수록 많은 메모리 필요
- 처리시간(분류시간) 증가



R function: knn


knn(train, test, cl, k = 1, l = 0, prob = FALSE, use.all = TRUE)



knn 매개변수

- train : 훈련 데이터셋 (matrix or data frame)

- test : 테스트 데이터셋 (matrix or data frame)

- cl: 훈련 데이터셋의 그룹(class) 정보 (factor)

- k : 이웃(neighbour)의 수

- l : 명확한 결정을 위한 최소 유효 수, 그렇지 않은 경우 의심

- prob: 만약 이것이 트루라면, 프로브 속성에서 당첨된 비율을 반환한다.

- use.all: 만약 트루라면, K번째의 최대치에 해당하는 모든 거리가 포함된다. 거짓이면 k의 이웃 포인트를 정확히 사용하기 위해 K번째와 같은 거리를 무작위로 선택한다.



knn 실습


require("class")
# 필요한 패키지를 로딩중입니다: class

# prepare train/test data
tr.idx <- c(1:25,51:75, 101:125)

ds.tr <- iris[tr.idx, 1:4]

ds.ts <- iris[-tr.idx, 1:4]

cl.tr <- factor(iris[tr.idx, 5])

cl.ts <- factor(iris[-tr.idx, 5])

pred <- knn(ds.tr, ds.ts, cl.tr, k = 3, prob=TRUE)

pred
# [1] setosa setosa setosa setosa setosa setosa setosa
# [8] setosa setosa setosa setosa setosa setosa setosa
# [15] setosa setosa setosa setosa setosa setosa setosa


attr(,"prob")
# [1] 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000
# [9] 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000
# [17] 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000
# Levels: setosa versicolor virginica

acc <- mean(pred==cl.ts) # 예측 정확도
acc
# [1] 0.92



실제 데이터와 분류한 데이터를 비교해보겠습니다. 6개 데이터를 제외하고는 일치하는 것을 확인할 수 있습니다.

table(pred,cl.ts)
# cl.ts
# pred setosa versicolor virginica
# setosa 25 0 0
# versicolor 0 23 4
# virginica 0 2 21


반응형