Nearest Neighbor

Nearest Neighbor

์›๋ฆฌ


์ƒˆ๋กœ์šด ์ž…๋ ฅ ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ์กด์— ์ž…๋ ฅ๋ฐ›์•„ ์ €์žฅ๋˜์–ด ์žˆ๋Š” ๋ฐ์ดํ„ฐ์™€ ๋น„๊ตํ•˜์—ฌ ๊ฐ€์žฅ ์œ ์‚ฌํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ๋Š” ๋ฐฉ์‹์ด๋‹ค.
ย 

train

๋ฉ”๋ชจ๋ฆฌ์ƒ์—์„œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ์™€ ๋ผ๋ฒจ์„ ๋ฉ”๋ชจ๋ฆฌ์ƒ์—์„œ ์™ธ์šด๋‹ค.
ย 

predict

ํ…Œ์ŠคํŠธ ์ด๋ฏธ์ง€๋ฅผ ๋ชจ๋“  ํ›ˆ๋ จ์šฉ ์ด๋ฏธ์ง€์…‹ ํ•˜๋‚˜ํ•˜๋‚˜์™€ ๋‹ค ๋น„๊ตํ•ด ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด(=์œ ์‚ฌํ•œ)์ด๋ฏธ์ง€๋ฅผ ๊ฐ€์ง€๊ณ  ๋ผ๋ฒจ ์˜ˆ์ธกํ•œ๋‹ค.
ย 
import numpy as np class NearestNeighbor(object): def __init__(self): pass def train(self, X, y): """ X is N x D where each row is an example. Y is 1-dimension of size N """ # 1. ๋ฉ”๋ชจ๋ฆฌ์ƒ์—์„œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ์™€ ๋ผ๋ฒจ์„ ๋ฉ”๋ชจ๋ฆฌ์ƒ์—์„œ ์™ธ์šด๋‹ค. self.Xtr = X self.ytr = y def predict(self, X): """ X is N x D where each row is an example we wish to predict label for """ num_test = X.shape[0] # ํ›ˆ๋ จ์šฉ ์ด๋ฏธ์ง€์™€ ํ…Œ์ŠคํŠธ์šฉ ์ด๋ฏธ์ง€์˜ ํƒ€์ž…์ด ๋งž์•„์•ผํ•œ๋‹ค Ypred = np.zeros(num_test, dtype = self.ytr.dtype) # ๋ชจ๋“  test row๋ฅผ ๋ฐ˜๋ณตํ•œ๋‹ค for i in range(num_test): # 2. L1 ๊ฑฐ๋ฆฌ๋ฅผ ํ™œ์šฉํ•ด i๋ฒˆ์งธ test ์ด๋ฏธ์ง€์™€ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์ด๋ฏธ์ง€๋ฅผ ์ฐพ๋Š”๋‹ค distances = np.sum(np.abs(self.Xtr - X[i,:]), axis = 1) min_index = np.argmin(distances) # ๊ฐ€์žฅ ๊ฑฐ๋ฆฌ๊ฐ€ ์ž‘์€ ์ด๋ฏธ์ง€์˜ ์ธ๋ฑ์Šค๊ฐ’์„ ์ €์žฅํ•œ๋‹ค Ypred[i] = self.ytr[min_index] # ๊ฐ€์žฅ ์œ ์‚ฌํ•œ ์ด๋ฏธ์ง€๋ฅผ ๊ฐ€์ง€๊ณ  ๋ผ๋ฒจ์„ ์˜ˆ์ธกํ•œ๋‹ค return Ypred
ํŒŒ์ด์ฌ ์˜ˆ์ œ ์ฝ”๋“œ
ย 
๐Ÿฅ‘
Q. ๊ฐ€๊น๋‹ค๋Š” ๊ฒƒ์€ ์–ด๋–ป๊ฒŒ ํŒŒ์•…ํ• ๊นŒ? A. L1 Distance(๋งจํ•ดํŠผ ๊ฑฐ๋ฆฌ)์— ๋”ฐ๋ผ ์ด๋ฏธ์ง€ ๋‚ด ๊ฐ๊ฐ์˜ ๋Œ€์‘๋˜๋Š” ํ”ฝ์…€๊ฐ’์˜ ์ฐจ๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค. ์ž์„ธํ•œ ๊ฑด L1 Distance ๋ฌธ์„œ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
ย 

๋ฌธ์ œ์ 


  • ํ›ˆ๋ จ์šฉ ๋ฐ์ดํ„ฐ์…‹์˜ ํฌ๊ธฐ๊ฐ€ ์ปค์ง€๋ฉด, ์˜ˆ์ธก ์‹œ๊ฐ„(test time)์ด ๋น„๋ก€ํ•ด์„œ ์ฆ๊ฐ€ํ•œ๋‹ค. โ‡’ ํ›ˆ๋ จ์‹œ๊ฐ„์€ ๋‹จ์ง€ ์ด๋ฏธ์ง€๋ฅผ ์™ธ์šฐ๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ํ›ˆ๋ จ์šฉ ๋ฐ์ดํ„ฐ์…‹ ํฌ๊ธฐ์— ํฌ๊ฒŒ ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š์ง€๋งŒ, ์˜ˆ์ธก์‹œ๊ฐ„์€ ์ƒˆ๋กœ์šด ์ด๋ฏธ์ง€๋ฅผ ํ›ˆ๋ จ์šฉ ๋ฐ์ดํ„ฐ์…‹์˜ ์ด๋ฏธ์ง€ ๋ชจ๋‘์™€ ๋น„๊ตํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํฌ๊ฒŒ ์˜ํ–ฅ์„ ๋ฐ›๋Š”๋‹ค.
    • โ‡’ ๋ณดํ†ต, ํ›ˆ๋ จ์— ์Ÿ์„ ์ˆ˜ ์žˆ๋Š” ์ž์›์€ ๋งŽ์€ ๋ฐ˜๋ฉด, ์˜ˆ์ธก ๊ณผ์ • (test)์€ Low Power Device์—์„œ ๋™์ž‘ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๊ธฐ ๋•Œ๋ฌธ์—, ํ›ˆ๋ จ์‹œ๊ฐ„๋ณด๋‹ค ์˜ˆ์ธก์‹œ๊ฐ„์ด ์ž‘์€ ๊ฒƒ์ด ํ›จ์”ฌ ์ค‘์š”ํ•˜๋‹ค.
      ์ด๋ฏธ์ง€ ์ถœ์ฒ˜: CS231n Lecture 2 Slides
      ์ด๋ฏธ์ง€ ์ถœ์ฒ˜: CS231n Lecture 2 Slides
  • ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์ด๋ฏธ์ง€๋งŒ์„ ๋ถ„๋ฅ˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์œ„ ์ด๋ฏธ์ง€์™€ ๊ฐ™์ด ์˜ค๋ถ„๋ฅ˜ ๋˜๋Š” ์ƒํ™ฉ์ด ์‰ฝ๊ฒŒ ๋ฐœ์ƒํ•œ๋‹ค.
ย