์๋ฆฌ
์๋ก์ด ์
๋ ฅ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ์กด์ ์
๋ ฅ๋ฐ์ ์ ์ฅ๋์ด ์๋ ๋ฐ์ดํฐ์ ๋น๊ตํ์ฌ ๊ฐ์ฅ ์ ์ฌํ ๋ฐ์ดํฐ๋ฅผ
์ฐพ๋ ๋ฐฉ์์ด๋ค.
ย
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์์ ๋์ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๊ธฐ ๋๋ฌธ์, ํ๋ จ์๊ฐ๋ณด๋ค ์์ธก์๊ฐ์ด ์์ ๊ฒ์ด ํจ์ฌ ์ค์ํ๋ค.
- ๊ฐ์ฅ ๊ฐ๊น์ด ์ด๋ฏธ์ง๋ง์ ๋ถ๋ฅํ๊ธฐ ๋๋ฌธ์ ์ ์ด๋ฏธ์ง์ ๊ฐ์ด ์ค๋ถ๋ฅ ๋๋ ์ํฉ์ด ์ฝ๊ฒ ๋ฐ์ํ๋ค.
ย