ํƒœ๊ทธ ๋ณด๊ด€๋ฌผ: k-nearest-neighbour

k-nearest-neighbour

์—ฐ์† ๋ฐ ์ด์ง„ ๋ณ€์ˆ˜๊ฐ€์žˆ๋Š” K- ์ตœ๊ทผ ์ ‘ ์ด์›ƒ ์„ธํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค . a๋ฐ˜๋ฉด

์—ด 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)์„ ์ˆ˜ํ–‰ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

FNNR์—์„œ ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.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

a

0.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='')

๋‹ต๋ณ€