오픈북(책 대신 인쇄물도 허용)인 ADP 실기를 한 차례 겪어보니 준비한 프린트물보다는 example 코드가 더 유용할 것 같다는 생각입니다.
오늘은 caret 패키지 knn3 함수를 공부했습니다.
knn 은 k 개의 가까이에 있는 이웃(nn) 들을 보고 대세에 따라가는 분류 기법이죠.
예제 코드
library(caret)
irisFit1 <- knn3(Species ~ ., iris)
irisFit2 <- knn3(as.matrix(iris[, -5]), iris[,5])
data(iris3)
train <- rbind(iris3[1:25,,1], iris3[1:25,,2], iris3[1:25,,3])
test <- rbind(iris3[26:50,,1], iris3[26:50,,2], iris3[26:50,,3])
cl <- factor(c(rep("s",25), rep("c",25), rep("v",25)))
knn3Train(train, test, cl, k = 5, prob = TRUE)
코드해석
irisFit1 irisFit2 찍어보면 둘 결과가 동일함. 인수 사용 방법 2가지가 있는데 똑같은 결과라는 것을 보여주려는 의도인 듯 합니다.
data(iris3)
맨날 iris 만 보았는데 iris3 라는 데이터도 있었네요.
Species 별로 숫자형만 매트릭스에 담아 그것들을 list 에 담은 구조인가 봅니다.
str 결과를 보고 해석은 아직도 익숙하지 않습니다.
str(iris3)
num [1:50, 1:4, 1:3] 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
- attr(*, "dimnames")=List of 3
..$ : NULL
..$ : chr [1:4] "Sepal L." "Sepal W." "Petal L." "Petal W."
..$ : chr [1:3] "Setosa" "Versicolor" "Virginica"
갑자기 iris3 를 호출한 이유는 뭘가요?
훈련셋 테스트셋을 오대오로 구분하는데, Species 별로 비중을 맞춰 구분하고자 하는 의도였나 봅니다.
그런데 createDataPartition 으로 하면 될 텐데 굳이 저렇게 한 또 다른 깊은 뜻이 있을까요?
knn3Train
Details 에 가보면 ipredknn knn3Train 는 모두 knn3와 동일하다고 합니다.
그렇다면 knn3Train(train, test, cl, k = 5, prob = TRUE) 는
knn3(train, test, cl, k = 5, prob = TRUE) 이렇게 하는 것과 동일한 것일까요?
테스트를 해보니 에러가 납니다.
Error in knn3.matrix(train, test, cl, k = 5, prob = TRUE) :
y must be a factor
완벽하게 동일한 것은 아닌가 봅니다.
knn 이 아니고 knn3 인 이유는 뭘까요?
혹시 k 의 디폴트 값이 3일까요?
확인해보니 디폴트는 1입니다. 그 이유는 아닙니다. 뭘까요?
knn3Train(train, test, cl, k = 5, prob = TRUE)
결과를 보면
c s v 중 하나의 값을 찍어주고, prob 에는 c s v 각각의 probability 를 보여주나 봅니다.
제가 궁금했던 것은 인접한 k개가 무엇인지 그러니깐 예시에서는 인접한 5개가 무엇인지가 궁금한데...
knn3Train(train, test, cl, k = 5, prob = TRUE)
[1] "s" "s" "s" "s" "s" "s" "s" "s" "s" "s" "s" "s" "s" "s" "s" "s" "s"
[18] "s" "s" "s" "s" "s" "s" "s" "s" "c" "c" "v" "c" "c" "c" "c" "c" "v"
[35] "c" "c" "c" "c" "c" "c" "c" "c" "c" "c" "c" "c" "c" "c" "c" "c" "v"
[52] "c" "c" "v" "v" "v" "v" "v" "c" "v" "v" "v" "v" "c" "v" "v" "v" "v"
[69] "v" "v" "v" "v" "v" "v" "v"
attr(,"prob")
c s v
[1,] 0.0000000 1 0.0000000
[2,] 0.0000000 1 0.0000000
table(iris$Species)
setosa versicolor virginica
50 50 50
궁금한 점
iris 처음 데이터는 다음과 같은데...
1 5.1 3.5 1.4 0.2 setosa
5.1 3.5 1.4 0.2 와 가까운 3개의 항목들은 무엇일까?
knn3Train(train, test, cl, k = 5, prob = TRUE)
knn3 와 knn3Train 차이점은 무엇인가?
$k$-nearest neighbour classification that can return class votes for all classes.
'ADP (R)' 카테고리의 다른 글
IQR 기준 이상치 제거 방법 (0) | 2022.10.07 |
---|---|
ADP 실기 26회 복기 (0) | 2022.10.04 |
[Adp 실기 기출 풀이] 26회 - 베이지안 회귀분석 (0) | 2022.09.27 |
[Adp 실기 기출 풀이] 26회 - Silver 9개월 가격 시각화 (0) | 2022.09.27 |
[Adp 실기 기출 풀이] 26회 - 3개의 선거구별 지지율 검정 (0) | 2022.09.27 |