๐KNN ์ด๋?
- ์ฃผ๋ณ K๊ฐ์ ์๋ฃ ํด๋์ค ์ค ๊ฐ์ฅ ๋ง์ ํด๋์ค๋ก ํน์ ์๋ฃ๋ฅผ ๋ถ๋ฅํ๋ ๋ฐฉ์
- ์๋ก์ด ์๋ฃ ๐บ๋ฅผ ๊ฐ๊น์ด ์๋ฃ 5๊ฐ์ ์๋ฃ ( K = 5 ) ๋ฅผ ์ด์ฉํ์ฌ ๊ฐ์ฅ ๋ง์ ํด๋์ค๊ฐ ์๋ ๊ฒ์ผ๋ก ํ ๋น
์๋์ ๊ทธ๋ฆผ์ผ๋ก ์น๋ฉด ์๋ก์ด ์๋ฃ ๐ข ์ด ์ํ๋ ํด๋์ค๋ฅผ ์ฐพ์ผ๋ ค๊ณ K๋ฅผ 5๋กํ๋ฉด ์ ์ ์ ์ํด ๐ฆ ํด๋์ค๊ฐ ๋๊ณ , K๋ฅผ 3์ผ๋ก ํ๋ฉด ์ค์ ์ ์ํด ๐บํด๋์ค์ ์ํ๊ฒ ๋๋ค.
โ๏ธ KNN ๋ถ๋ฅ์์๋ ์ต๊ทผ์ ์ด์์ฌ์ด์์ ๊ณผ๋ฐ์ ์๊ฒฐ์ ์ํด ๋ถ๋ฅ
โ๏ธ KNN ํ๊ท์์๋ K๊ฐ์ ์ต๊ทผ์ ์ด์์ด ๊ฐ์ง ๊ฐ์ ํ๊ท ์ด๋ค.
- ๋ฐ์ดํฐ ๋ถํฌ๋ฅผ ํํํ๊ธฐ ์ํ ํ๋ผ๋ฏธํฐ๋ฅผ ์ถ์ ํ์ง ์์
โก๏ธ ์ ํํ๊ท/๋ถ๋ฅ ์์ Wx + b์์ [W,b]๋ฅผ ๊ตฌํ์ง๋ง KNN์ ์ด๋ฌํ ํ๋ผ๋ฏธํฐ๋ฅผ ๊ตฌํ์ง ์์
- ๊ฒ์ผ๋ฅธ ํ์ต ( Lazy learner ) or ์ฌ๋ก์ค์ฌํ์ต (instance-based learning)์ด๋ผ๊ณ ๋ ๋ถ๋ฆ
โผ๏ธ ๋ค๋ฅธ ๋ชจ๋ธ๋ค์ ํ๋ จ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก 1๏ธโฃ ๋ชจ๋ธ์ ๋ง๋ค๊ณ 2๏ธโฃ ํ ์คํธ ๋ฐ์ดํฐ๋ก ํ ์คํธํ์ง๋ง KNN์ ํ๋ จ์ด ์๊ณ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๊ฒ์ด ํ๋ จ์ ์ ๋ถ๋ผ์ ๋ชจ๋ธ์ ๊ตฌ์ถํ์ง ์๋๋ค๋ ๋ป์ผ๋ก ๊ฒ์ผ๋ฅธ ํ์ต์ด๋ผ๊ณ ํ๋ค
๐ซ KNN์ ๋ฐ์ดํฐ์ ์ฐจ์์ด ์ฆ๊ฐํ๋ฉด ํ ์๋ก ์ฑ๋ฅ์ ํ๊ฐ ์ฌํจ
- ๋ฐ์ดํฐ์ ์ฐจ์์ด ์ฆ๊ฐํ ์๋ก ํด๋น ๊ณต๊ฐ์ ํฌ๊ธฐ๊ฐ ๊ธฐํ๊ธ์์ ์ผ๋ก ์ฆ๊ฐํ์ฌ ๋์ผํ ๊ฐ์์ ๋ฐ์ดํฐ์ ๋ฐ๋๊ฐ ์ฐจ์์ด ์ฆ๊ฐํ ์๋ก ํฌ๋ฐํด์ง
์ฝ๋์์ ์ฌ์ฉํ๋ i๋ฒ์งธ ๊ด์ธก์น์ j๋ฒ์งธ ๊ด์ธก์น์ ๊ฑฐ๋ฆฌ๋ Minkowski ๊ฑฐ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ค.
Minkowski ๊ฑฐ๋ฆฌ - ๊ณ์ฐ๊ฐ์ด 0์ ๊ฐ๊น์ธ์๋ก ์ ์ฌํ ๊ฒ
โผ๏ธK๊ฐ ์์ผ๋ฉด ํ ์คํธ ๋ฐ์ดํฐ์๋ง ์๋ง๊ฒ ๋๋ ์ค๋ฒํผํ (overfitting)์ด ๋ฐ์ํ๊ณ
K๊ฐ ํฌ๋ฉด ์ ํ์ฑ์ด ๋จ์ด์ง๊ฒ ๋๋ ์ธ๋ํผํ (underfitting)์ด ๋ฐ์ํ๋ค
์ ๋นํ K๋ฅผ ์ฐพ์์ผํจ
๐ KNN์ ์ฅ์
1๏ธโฃ ํ์ต๋ฐ์ดํฐ ๋ด์ ๋ ธ์ด์ฆ ์ํฅ์ ํฌ๊ฒ ๋ฐ์ง ์์
2๏ธโฃ ํ์ต๋ฐ์ดํฐ ์๊ฐ ๋ง๋ค๋ฉด ๊ฝค ํจ๊ณผ์ ์ธ ์๊ณ ๋ฆฌ์ฆ
3๏ธโฃ ๋งํ ๋ผ๋ ธ๋น์ค ๊ฑฐ๋ฆฌ (mahalanobis distance : ํ๊ท ๊ณผ์ ๊ฑฐ๋ฆฌ๊ฐ ํ์คํธ์ฐจ์ ๋ช ๋ฐฐ์ธ์ง ๋ํ๋ด๋ ๊ฐ / ๊ณ์ฐ ๊ฐ์ด 0์ ๊ฐ๊น์ธ์๋ก ์ ์ฌํ ๊ฒ) ์ ๊ฐ์ด ๋ฐ์ดํฐ์ ๋ถ์ฐ์ ๊ณ ๋ คํ ๊ฒฝ์ฐ ๋งค์ฐ ๊ฐ๊ฑดํ ๋ฐฉ๋ฒ
๐ KNN์ ๋จ์
1๏ธโฃ ์ต์ ์ด์์ ์ (K) ์ ์ด๋ค ๊ฑฐ๋ฆฌ ์ฒ๋ (distance metric / ex ) ๋งํ ๋ผ๋ ธ๋น์ค , ๋ฏผ์ฝ์คํค ) ๊ฐ ์ ํฉํ์ง ๋ถ๋ถ๋ช ํด์ ์์๋ก ์ ์ ํด์ผํจ
๐ best K๋ ๋ฐ์ดํฐ ๋ง๋ค ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ํ์ฉ์ ์ธ ๋ฐฉ์ (Grid Search)๋ก ํ์
2๏ธโฃ ์๋ก์ด ๊ด์ธก์น์ ํ์ต ๋ฐ์ดํฐ ์ฌ์ด์ ๊ฑฐ๋ฆฌ๋ฅผ ์ ๋ถ ์ธก์ ํด์ผํด์ ๊ณ์ฐ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆผ
โ๏ธ KNN ํ๊ท
1๏ธโฃ ๋จ์ ํ๊ท - ๊ฐ๊น์ด ์ด์๋ค์ ๋จ์ ํ๊ท
2๏ธโฃ ๊ฐ์ค ํ๊ท (weighted regression)
๐ ์ผ๋ง๋ ๊ฐ๊น์ด ์๋์ง์ ๋ฐ๋ผ ๊ฐ์คํธ๊ทฑ์ ๊ตฌํด ๊ฑฐ๋ฆฌ๊ฐ ๊ฐ๊น์ธ์๋ก ๋ฐ์ดํฐ๊ฐ ๋ ์ ์ฌํ ๊ฒ์ด๋ผ๊ณ ๋ณด๊ณ ๊ฐ์ค์น๋ฅผ ๋ถ์ฌํ๋ ๋ฐฉ์
from sklearn.neighbors import KNeighborsRegressor
knn = KNeighborsRegressor(n_neighbors = 3, p = 2)
knn.fit(x_train,y_train)
์ด๋ฐ ์์ผ๋ก ์ฌ์ฉํ๋ฉด ๋จ
KNeighborsRegressor
โ๏ธn_neighbors : int, default=5 โก๏ธ K ๊ฐ์
โ๏ธweights : ‘uniform’, ‘distance’ ,defalut = uniform โก๏ธ uniform์ ๋จ์ ํ๊ท distance๋ ๊ฐ์ค ํ๊ท
โ๏ธp : int, default = 2 โก๏ธ p๋ ๊ฑฐ๋ฆฌ ๊ตฌํ๋ ๋ฐฉ๋ฒ / p = 1 : ๋งจํดํผ ๊ฑฐ๋ฆฌ p = 2 : ์ ํด๋ฆฌ๋ ๊ฑฐ๋ฆฌ
โ๏ธ KNN ๋ถ๋ฅ
from sklearn.neighbors import KNeighborsClassifier
test_pred = knn.predict(test)
์์ธก์ predict๋ฅผ ์ฌ์ฉํด์ test๋ฐ์ดํฐ๋ฅผ ๋ฃ์ผ๋ฉด ์ฌ์ฉํ ์ ์์
๋๊ธ