๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
CODING/AI & ML & DL

[๊ธฐ๊ณ„ํ•™์Šต] KNN | K - ์ตœ๊ทผ์ ‘ ์ด์›ƒ ์•Œ๊ณ ๋ฆฌ์ฆ˜

by ๋ฐํ†จ๋งนํ†จ 2020. 9. 21.
728x90
728x90

๐Ÿ“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๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ์œผ๋ฉด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ

728x90

๋Œ“๊ธ€