์ด a b c
(3 ์์ฑ) ์ด์๋ ๋ฐ์ดํฐ ์ธํธ๊ฐ ์์ต๋๋ค . a
๋ฐ๋ฉด ์ซ์์ ์ฐ์ b
๊ณผ c
๋ ๊ฐ์ง ์์ค์ ๊ฐ ๋ฒ์ฃผ์
๋๋ค. K-Nearest Neighbors ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์ฌ ๋ถ๋ฅ a
ํ๊ณ b
์์ต๋๋ค c
. ๋ฐ๋ผ์ ๊ฑฐ๋ฆฌ๋ฅผ ์ธก์ ํ ์ ์์ผ๋ ค๋ฉด ๋ฐ๋ฅผ b
์ถ๊ฐ b.level1
ํ๊ณ ์ถ๊ฐํ์ฌ ๋ฐ์ดํฐ ์ธํธ๋ฅผ ๋ณํํ์ญ์์ค b.level2
. ๊ด์ธก์น i
์ b
๋ฒ์ฃผ ์ ์ฒซ ๋ฒ์งธ ์์ค์ด์๋ ๊ฒฝ์ฐ b.level1[i]=1
๋ฐ b.level2[i]=0
.
์ด์ ์ ๋ฐ์ดํฐ ์ธํธ์์ ๊ฑฐ๋ฆฌ๋ฅผ ์ธก์ ํ ์ ์์ต๋๋ค. a b.level1 b.level2
์ด๋ก ์ / ์ํ์ ๊ด์ ์์ : ์ด์ง ๋ฐ์ดํฐ์ ์ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ ์ฌ์ฉํ์ฌ K- ์ต๊ทผ ์ ์ด์ (KNN)์ ์ํ ํ ์ ์์ต๋๊น?
FNN
R์์ ํจํค์ง๋ฅผ ์ฌ์ฉ ํ๊ณ ์์ต๋๋ค.knn()
๋ต๋ณ
๋ฒ์ฃผ ํ ๋ณ์์ ์ฐ์ ๋ณ์ (๊ธฐ๋ฅ)๋ฅผ ๊ฒฐํฉํด๋๋ฉ๋๋ค.
k-NN๊ณผ ๊ฐ์ ๋ฐฉ๋ฒ์ ๋ํ ์ด๋ก ์ ๊ทผ๊ฑฐ๋ ๊ทธ๋ฆฌ ๋ง์ง ์์ต๋๋ค. ํด๋ฆฌ์คํฑ์ ๋ ์ง์ ์ด ์๋ก์ ๊ฐ๊น๋ค๋ฉด (์ผ๋ถ ๊ฑฐ๋ฆฌ์ ๋ฐ๋ผ) ์ถ๋ ฅ ์ธก๋ฉด์์ ๊ณตํต์ ์ด ์๋ค๋ ๊ฒ์ ๋๋ค. ์๋ง ๊ทธ๋ ์ต๋๋ค, ์๋ง ๊ทธ๋ ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ๊ฒ์ ๋น์ ์ด ์ฌ์ฉํ๋ ๊ฑฐ๋ฆฌ์ ๋ฌ๋ ค ์์ต๋๋ค.
๊ทํ์ ์์์๋ ๋ ์ ์ฌ์ด์ ๊ฑฐ๋ฆฌ๋ฅผ ์ ์ํฉ๋๋ค
(a,b,c)๊ณผ
(aโฒ,bโฒ,cโฒ)๊ฐ์ :
- ์ฌ์ด์ ์ ๊ณฑ ๊ฑฐ๋ฆฌ๋ฅผ
a ๊ณผ aโฒ : (aโaโฒ)2 - ๊ฒฝ์ฐ +2 ์ถ๊ฐ
b ๊ณผ bโฒ ๊ฐ์ผ๋ฉด +0์ด ๋ค๋ฆ ๋๋ค (๊ฐ ์นดํ ๊ณ ๋ฆฌ๋ง๋ค 1์ ์ฐจ์ด๋ฅผ ๊ณ์ฐํ๊ธฐ ๋๋ฌธ์) - ๊ฒฝ์ฐ +2 ์ถ๊ฐ
c ๊ณผ cโฒ ๋ค๋ฅด๋ฉฐ +0์ ๊ฐ์ต๋๋ค (๋์ผ ํจ)
์ด๋ ๊ฐ ๊ธฐ๋ฅ์ ์์ ์ ์ผ๋ก ๊ฐ์ค์น๋ฅผ ๋ถ์ฌํ๋ ๊ฒ์ ํด๋นํฉ๋๋ค.
๋ง์ฝ์
aํฐ ๋ถ์ฐ์ผ๋ก ํฐ ๊ฐ (1000, 2000 ๋ฑ)์ ์ทจํ๋ฉด ์ด์ง ํผ์ฒ์ ๊ฐ์ค์น๋ ๊ฐ์ค์น์ ๋น๊ตํ ๋ ๋ฌด์ํ ์ ์์ต๋๋ค
a. ์ฌ์ด์ ๊ฑฐ๋ฆฌ ๋ง
a๊ณผ
aโฒ์ ๋ง ์ค์ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ค๋ฅธ ๋ฐฉ๋ฒ : if
a0.001๊ณผ ๊ฐ์ ์์ ๊ฐ์ ์ทจํฉ๋๋ค. ์ด์ง ๊ธฐ๋ฅ ๋ง ๊ณ์ฐ๋ฉ๋๋ค.
๊ฐ ๊ธฐ๋ฅ์ ํ์ค ํธ์ฐจ๋ก ๋๋๋ฉด ๋ฌด๊ฒ๋ฅผ ๋ค์ ์ธก์ ํ์ฌ ๋์์ ์ ๊ทํ ํ ์ ์์ต๋๋ค. ์ด๋ ์ฐ์ ๋ณ์์ ์ด์ง ๋ณ์์ ๋ชจ๋ ์ ์ฉ๋ฉ๋๋ค. ์์ ์ด ์ ํธํ๋ ๊ฐ์ค์น๋ฅผ ์ ๊ณต ํ ์๋ ์์ต๋๋ค.
R ํจ์ kNN ()์ ๋น์ ์ ์ํด ๊ทธ๊ฒ์ํฉ๋๋ค : https://www.rdocumentation.org/packages/DMwR/versions/0.4.1/topics/kNN
์ฒซ ๋ฒ์งธ ์๋๋ก ๊ธฐ๋ณธ์ ์ผ๋ก norm = true (์ ๊ทํ)๋ฅผ ์ฌ์ฉํ์ญ์์ค. ์ด๋ ๊ฒํ๋ฉด ์ฐ์ ๋ฐ ๋ฒ์ฃผ ๊ธฐ๋ฅ์ ๊ฒฐํฉ ํ ๋ ๋ํ๋ ์์๋ ๋๋ถ๋ถ์ ๋ง์ด๋์ง ์์ต๋๋ค.
๋ต๋ณ
๊ทธ๋ ์ต๋๋ค. ๋ฐ์ด๋๋ฆฌ ๋ฐ ์ฐ์ ๋ฐ์ดํฐ์ ํจ๊ป KNN์ ์ฌ์ฉํ ์ ์์ง๋ง ๊ทธ๋ ๊ฒ ํ ๋ ๊ณ ๋ คํด์ผ ํ ์ค์ํ ์ฌํญ์ด ์์ต๋๋ค.
์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ์ค์ ๊ฒฐ๊ณผ (0-1 ์ค์ผ์ผ, ๋น๊ฐ ์ค ๋ฒกํฐ์ ๋ํ) ์ฌ์ด์ ๋ถ์ฐ์ ๋ํ ์ด์ง ๋ถํ ์ ์ํด ๊ฒฐ๊ณผ์ ๋ง์ ์ ๋ณด๊ฐ ์ ๊ณต๋ฉ๋๋ค.
์ด ์์์ ๊ฑฐ๋ฆฌ ๋ณ ๊ฐ๋ณ ๊ด์ธก์น์ ๊ฐ์ฅ ๊ฐ๊น์ด ์ด์์ ์ฒ๋ ํ ๋ ์ค์ ๊ฐ ๋ณ์๋ณด๋ค ์ด์ง ๋ณ์์ ์ํด ํจ์ฌ ๋ ๋ง์ ์ ๋ณด๋ฅผ ์ป์ ์ ์์์ ์ ์ ์์ต๋๋ค.
๋ํ ์ด๊ฒ์ ์ฌ๋ฌ ์ด์ง ๋ณ์๋ก ํ์ฅ๋ฉ๋๋ค. ์ค์ ๊ฐ ๋ณ์ ์ค ํ๋๋ฅผ ์ด์ง์ผ๋ก ๋ณ๊ฒฝํ๋ฉด ์ค์ ๊ฐ์ ๊ฐ๊น์ด ๊ฒ๋ณด๋ค ๊ด๋ จ๋ ๋ชจ๋ ์ด์ง ๋ณ์๋ฅผ ์ผ์น์์ผ ๊ฑฐ๋ฆฌ๊ฐ ํจ์ฌ ๋ ๋ง์ ์ ๋ณด๋ฅผ ์ป์ ์ ์์์ ์ ์ ์์ต๋๋ค.
์ค์ํ ์ด์ง ๋ณ์ ๋ง ํฌํจํ๊ณ ์ถ์ ๊ฒ์ ๋๋ค. ์ค์ ๋ก โ๊ฐ์ฅ ๊ฐ๊น์ด ์ค์ ๊ฐ์ ๊ฐ๋ ์ด์ง ๋ณ์์ ๊ตฌ์ฑ (์๋ ๊ฒฝ์ฐ)๊ณผ ์ผ์นํ๋ ๋ชจ๋ ๊ด์ธก์น์ ๋ํด ๋ฌป๊ณ ์์ต๋๊น?โ ์ด๊ฒ์ KNN์ผ๋ก ํด๊ฒฐํ ์์๋ ๋ง์ ๋ฌธ์ ๋ฅผ ํฉ๋ฆฌ์ ์ผ๋ก ๊ตฌ์ฑํ ๊ฒ์ด๋ฉฐ ๋ค๋ฅธ ๋ฌธ์ ๋ ๋งค์ฐ ์ด์ ํ ๊ตฌ์ฑ์ ๋๋ค.
#code to reproduce plots:
library(scatterplot3d)
scalevector <- function(x){(x-min(x))/(max(x)-min(x))}
x <- scalevector(rnorm(100))
y <- scalevector(rnorm(100))
z <- ifelse(sign(rnorm(100))==-1, 0, 1)
df <- data.frame(cbind(x,y,z))
scatterplot3d(df$x, df$z, df$y, pch=16, highlight.3d=FALSE,
type="h", angle =235, xlab='', ylab='', zlab='')
x <- scalevector(rnorm(100))
y <- ifelse(sign(rnorm(100))==-1, 0, 1)
z <- ifelse(sign(rnorm(100))==-1, 0, 1)
df <- data.frame(cbind(x,y,z))
scatterplot3d(df$x, df$z, df$y, pch=16, highlight.3d=FALSE,
type="h", angle =235, xlab='', ylab='', zlab='')