A A
[ํ˜ผ๊ณต๋จธ์‹ ] ๋‚˜์˜ ์ฒซ ๋จธ์‹ ๋Ÿฌ๋‹
์ด ๊ธ€์€ ํ•™ํšŒ ์Šคํ„ฐ๋””๋ฅผ ํ•˜๋ฉด์„œ ํ˜ผ์ž ๊ณต๋ถ€ํ•˜๋Š” ๋จธ์‹ ๋Ÿฌ๋‹ + ๋”ฅ๋Ÿฌ๋‹ ์ฑ…์„ ๊ณต๋ถ€ํ•ด์„œ ์ ์€ ๋‚ด์šฉ์ด๋‹ˆ ์ฐธ๊ณ  ๋ฐ”๋ž๋‹ˆ๋‹ค.
๊ธฐ๋ณธ์ ์ธ ๊ฐœ๋…๋ณด๋‹ค๋Š” ์‹ค์Šต ๋‚ด์šฉ์— ๊ธฐ๋ฐ˜์„ ๋‘๊ณ  ๊ธ€์„ ์ž‘์„ฑํ•˜์˜€์œผ๋‹ˆ ์ฐธ๊ณ  ๋ฐ”๋ž๋‹ˆ๋‹ค.

1- 1.  ์ธ๊ณต์ง€๋Šฅ๊ณผ ๋จธ์‹ ๋Ÿฌ๋‹, ๋”ฅ๋Ÿฌ๋‹

์ธ๊ณต์ง€๋Šฅ์ด๋ž€?

  • ์ธ๊ณต์ง€๋Šฅ์€ ์‚ฌ๋žŒ์ฒ˜๋Ÿผ ํ•™์Šตํ•˜๊ณ  ์ถ”๋ก ํ•  ์ˆ˜ ์žˆ๋Š” ์ง€๋Šฅ์„ ๊ฐ€์ง„ ์ปดํ“จํ„ฐ ์‹œ์Šคํ…œ์„ ๋งŒ๋“œ๋Š” ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค. 

๋จธ์‹ ๋Ÿฌ๋‹์ด๋ž€?

  • ๋จธ์‹ ๋Ÿฌ๋‹์ด๋ž€ ๊ทœ์น™์„ ์ผ์ผ์ด ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํ•˜์ง€ ์•Š์•„๋„ ์ž๋™์œผ๋กœ ๋ฐ์ดํ„ฐ์—์„œ ๊ทœ์น™์„ ํ•™์Šตํ•˜์—ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์—ฐ๊ตฌํ•˜๋Š” ๋ถ„์•ผ์ž…๋‹ˆ๋‹ค.
  • ๋Œ€ํ‘œ์ ์ธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” scikit-learn ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

๋”ฅ๋Ÿฌ๋‹์ด๋ž€?

  • ๋งŽ์€ ๋จธ์‹ ๋Ÿฌ๋‹ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ค‘์— ์ธ๊ณต์‹ ๊ฒฝ๋ง(Artificial Netural Network)์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ๋ฐฉ๋ฒ•๋“ค์„ ํ†ต์นญํ•˜์—ฌ ๋”ฅ๋Ÿฌ๋‹์ด๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค.
  • ๋Œ€ํ‘œ์ ์œผ๋กœ Pytorch, Tensorflow ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. - Python API ํ˜•ํƒœ ๊ธฐ๋ฐ˜์œผ๋กœ ์ œ๊ณต

1-2.  ์ฝ”๋žฉ๊ณผ ์ฃผํ”ผํ„ฐ ๋…ธํŠธ๋ถ

  • Google Colab: ๊ตฌ๊ธ€ ์ฝ”๋žฉ์€ ์›น๋ธŒ๋ผ์šฐ์ €์—์„œ ๋ฌด๋ฃŒ๋กœ Python Program์„ ํ…Œ์ŠคํŠธํ•˜๊ณ  ์ €์žฅํ• ์ˆ˜ ์žˆ๋Š” ํ”„๋กœ๊ทธ๋žจ ์ž…๋‹ˆ๋‹ค.
  • ML ํ”„๋กœ๊ทธ๋žจ๋„ ๋งŒ๋“ค์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • Colab์€ ์›น ๋ธŒ๋ผ์šฐ์ € ์ค‘์—์„œ Text & Program ์ฝ”๋“œ๋ฅผ ์ž์œ ๋กญ๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ์˜จ๋ผ์ธ ์—๋””ํ„ฐ ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ์‰ฝ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ฝ”๋žฉ ํŒŒ์ผ์„ Notebook์ด๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค.
  • ์ฐธ๊ณ ๋กœ ํ•„์ž๋Š” Jupyter Notebook์„ ์ด์šฉํ•ด์„œ ์‹ค์Šต์„ ํ•˜์˜€์œผ๋‹ˆ, ์ฐธ๊ณ  ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

์ฐธ๊ณ ์‚ฌํ•ญ

์ถ”๊ฐ€๋กœ ํ…์ŠคํŠธ์…€์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋งˆํฌ๋‹ค์šด ๋ฌธ๋ฒ•์„ ์˜ฌ๋ ค๋†“๊ฒ ์Šต๋‹ˆ๋‹ค. ์ฐธ๊ณ  ๋ฐ”๋ž๋‹ˆ๋‹ค.


1-3. ๋งˆ์ผ“๊ณผ ๋จธ์‹ ๋Ÿฌ๋‹

  • ํ•œ๋ฒˆ ์ƒ์„ ๋ถ„๋ฅ˜ ๋ฌธ์ œ๋ฅผ ๊ฐ€์ง€๊ณ  ๋จธ์‹ ๋Ÿฌ๋‹ ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“ค์–ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
  • ์ƒ์„  dataset์€ kaggle์—์„œ ๊ณต๊ฐœ๋œ dataset์„ ์ด์šฉํ•˜์˜€์œผ๋‹ˆ, ์ฐธ๊ณ  ๋ฐ”๋ž๋‹ˆ๋‹ค.
 

Fish market

Database of common fish species for fish market

www.kaggle.com

 

๋„๋ฏธ ๋ฐ์ดํ„ฐ์…‹ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ

๋„๋ฏธ Dataset์„ ํ•œ๋ฒˆ ๋ถˆ๋Ÿฌ์˜ค๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ฐ ๋„๋ฏธ์˜ ํŠน์ง•๊ณผ ๊ธธ์ด๋ฅผ ๋ฌด๊ฒŒ๋กœ ํ‘œํ˜„ํ•œ๊ฒƒ์„ ํŠน์„ฑ์ด๋ผ๊ณ  ๋ถ€๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

# ๋„๋ฏธ์˜ ๊ธธ์ด
bream_length = [25.4, 26.3, 26.5, 29.0, 29.0, 29.7, 29.7, 30.0, 30.0, 30.7, 31.0, 31.0, 
                31.5, 32.0, 32.0, 32.0, 33.0, 33.0, 33.5, 33.5, 34.0, 34.0, 34.5, 35.0, 
                35.0, 35.0, 35.0, 36.0, 36.0, 37.0, 38.5, 38.5, 39.5, 41.0, 41.0]
# ๋„๋ฏธ์˜ ๋ฌด๊ฒŒ
bream_weight = [242.0, 290.0, 340.0, 363.0, 430.0, 450.0, 500.0, 390.0, 450.0, 500.0, 475.0, 500.0, 
                500.0, 340.0, 600.0, 600.0, 700.0, 700.0, 610.0, 650.0, 575.0, 685.0, 620.0, 680.0, 
                700.0, 725.0, 720.0, 714.0, 850.0, 1000.0, 920.0, 955.0, 925.0, 975.0, 950.0]
  • ๋„๋ฏธ๋“ค์˜ ํŠน์„ฑ์„ ์ˆซ์ž๋กœ ๋ณด๋Š” ๊ฒƒ ๋ง๊ณ , ๊ทธ๋ž˜ํ”„๋กœ ํ‘œํ˜„ํ•˜๋ฉด ๋ฐ์ดํ„ฐ๋ฅผ ์ž˜ ํ‘œํ˜„ํ• ์ˆ˜ ์žˆ๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค. ๊ธธ์ด๋ฅผ x์ถ•, ๋ฌด๊ฒŒ๋ฅผ y์ถ•์œผ๋กœ ํ•ด์„œ ๊ทธ๋ž˜ํ”„๋ฅผ ์ ์œผ๋กœ ํ‘œํ˜„ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ทธ๋ž˜ํ”„๋ฅผ ์‚ฐ์ ๋„: Scatter Plot์ด๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค.
  • Python์—์„œ ๊ณผํ•™ ๊ณ„์‚ฐ์šฉ ๊ทธ๋ž˜ํ”„๋ฅผ ๊ทธ๋ฆฌ๋Š” ๋Œ€ํ‘œ์ ์ธ ํŒจํ‚ค์ง€๋Š” Matplotlib ํŒจํ‚ค์ง€ ์ž…๋‹ˆ๋‹ค. ํ•œ๋ฒˆ ๋ถˆ๋Ÿฌ์™€์„œ ๊ทธ๋ž˜ํ”„๋ฅผ ๊ทธ๋ ค๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
# ์‚ฐ์ ๋„
import matplotlib.pyplot as plt

plt.scatter(bream_length, bream_weight)
plt.xlabel('length')  # xlabel()์€ x์ถ•์˜ ์ด๋ฆ„์„ ํ™”๋ฉด์— ํ‘œ์‹œ
plt.ylabel('weight')  # ylabel()์€ y์ถ•์˜ ์ด๋ฆ„์„ ํ™”๋ฉด์— ํ‘œ์‹œ
plt.show()

๋น™์–ด ๋ฐ์ดํ„ฐ์…‹ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ

๋น™์–ด Dataset์„ ํ•œ๋ฒˆ ๋ถˆ๋Ÿฌ์˜ค๊ฒ ์Šต๋‹ˆ๋‹ค.
# ๋น™์–ด Dataset
smelt_length = [9.8, 10.5, 10.6, 11.0, 11.2, 11.3, 11.8, 11.8, 12.0, 12.2, 12.4, 13.0, 14.3, 15.0]
smelt_weight = [6.7, 7.5, 7.0, 9.7, 9.8, 8.7, 10.0, 9.9, 9.8, 12.2, 13.4, 12.2, 19.7, 19.9]
# ์‚ฐ์ ๋„
import matplotlib.pyplot as plt

plt.scatter(smelt_length, smelt_weight)
plt.xlabel('length')  # xlabel()์€ x์ถ•์˜ ์ด๋ฆ„์„ ํ™”๋ฉด์— ํ‘œ์‹œ
plt.ylabel('weight')  # ylabel()์€ y์ถ•์˜ ์ด๋ฆ„์„ ํ™”๋ฉด์— ํ‘œ์‹œ
plt.show()

  • ์ด๋ ‡๊ฒŒ ๋น™์–ด dataset๋กœ ์‚ฐ์ ๋„๋ฅผ ์ด์šฉํ•œ ๊ทธ๋ž˜ํ”„๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2๊ฐœ์˜ dataset์„ ํ•˜๋‚˜์˜ ๊ทธ๋ž˜ํ”„๋กœ ๋‚˜ํƒ€๋‚ด๊ธฐ

  • ํ•œ๋ฒˆ ๋น™์–ด & ๋„๋ฏธ์˜ dataset์„ ํ•˜๋‚˜์˜ ์‚ฐ์ ๋„ ๊ทธ๋ž˜ํ”„๋กœ ๋‚˜ํƒ€๋‚ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
plt.scatter(bream_length, bream_weight)
plt.scatter(smelt_length, smelt_weight)
plt.xlabel('length')
plt.ylabel('weight')
plt.show()

  • Matplotlib ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” 2๊ฐœ์˜ ์‚ฐ์ ๋„๋ฅผ ์ƒ‰๊น”๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์ฃผํ™ฉ์ƒ‰์ด ๋น™์–ด, ํŒŒ๋ž€์ƒ‰์ด ๋„๋ฏธ์˜ dataset์ž…๋‹ˆ๋‹ค.
  • ๋น™์–ด & ๋„๋ฏธ๋Š” ๋น„์Šทํ•˜๊ฒŒ ๊ธธ์ด์™€ ๋ฌด๊ฒŒ๊ฐ€ ๋น„๋ก€ํ•˜์ง€๋งŒ, ๋Š˜์–ด๋‚˜๋Š” ์ •๋„๊ฐ€ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋น™์–ด์˜ ์‚ฐ์ ๋„๋„ ์„ ํ˜•์ ์ด์ง€๋งŒ, ๋ฌด๊ฒŒ๊ฐ€ ๊ธธ์ด์— ์˜ํ–ฅ์„ ๋œ ๋ฐ›๋Š”๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

K-์ตœ๊ทผ์ ‘ ์•Œ๊ณ ๋ฆฌ์ฆ˜

์ด์ œ ๋„๋ฏธ์™€ ๋น™์–ด Dataset์ด ๋‹ค ์ค€๋น„๊ฐ€ ๋˜์—ˆ๊ณ , ์‚ฐ์ ๋„ ๊ทธ๋ž˜ํ”„๋„ ๊ทธ๋ ค ๋ณด์•˜์œผ๋‹ˆ, ๋‘ ๋ฐ์ดํ„ฐ๋ฅผ ์Šค์Šค๋กœ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋จธ์‹ ๋Ÿฌ๋‹ ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“ค์–ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. 
  • ์—ฌ๊ธฐ์„œ๋Š” K-์ตœ๊ทผ์ ‘ ์ด์›ƒ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ตฌ๋ถ„ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

K-์ตœ๊ทผ์ ‘ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ด๋ž€?

  • ๊ฐ„๋‹จํ•œ ๋จธ์‹ ๋Ÿฌ๋‹ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ค‘ ํ•˜๋‚˜๋กœ, ๊ทœ์น™์ด ์žˆ๊ธฐ ๋ณด๋‹ค๋Š” ๋ณดํ†ต ์ „์ฒด ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”๊ฒƒ์ด ์ „๋ถ€์ž…๋‹ˆ๋‹ค.
  • ์ด์ œ Python ์—์„œ๋Š” ๋‘ ๋ฐ์ดํ„ฐ์…‹์„ ๋”ํ•ด์„œ ํ•˜๋‚˜์˜ list๋กœ ๋งŒ๋“ค์–ด ์ค๋‹ˆ๋‹ค.
length = bream_length + smelt_length
weight = bream_weight + smelt_weight
  • ์—ฌ๊ธฐ์„œ ์‚ฌ์šฉํ•˜๋Š” ๋จธ์‹ ๋Ÿฌ๋‹ ํŒจํ‚ค์ง€๋Š” scikit-learn ์ด๋ฉฐ, ์ด ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๊ฐ ํŠน์„ฑ์˜ list๋ฅผ ์„ธ๋กœ ๋ฐฉํ–ฅ์œผ๋กœ ๋Š˜์–ด๋œจ๋ฆฐ 2์ฐจ์› ๋ฆฌ์ŠคํŠธ๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • ์ด๋ ‡๊ฒŒ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์€ Python์˜ zip() ํ•จ์ˆ˜์™€ ๋ฆฌ์ŠคํŠธ ๋‚ดํฌ ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•ด์„œ ๋งŒ๋“œ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
fish_data = [[l,w] for l,w in zip(length, weight)]
print(fist_data)
  • for๋ฌธ์€ zip() ํ•จ์ˆ˜์™€ length & weight list ์—์„œ ์›์†Œ๋ฅผ ํ•˜๋‚˜์”ฉ ๊บผ๋‚ด์„œ 1๊ณผ w์— ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด [l,w]๊ฐ€ ํ•˜๋‚˜์˜ ์›์†Œ๋กœ ๊ตฌ์„ฑ๋œ list๊ฐ€ ๋งŒ๋“ค์–ด ์ง‘๋‹ˆ๋‹ค. ์ด์ œ ํ™•์ธํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
[[25.4, 242.0], [26.3, 290.0], [26.5, 340.0], [29.0, 363.0], [29.0, 430.0], [29.7, 450.0], [29.7, 500.0], [30.0, 390.0], [30.0, 450.0], [30.7, 500.0], [31.0, 475.0], [31.0, 500.0], [31.5, 500.0], [32.0, 340.0], [32.0, 600.0], [32.0, 600.0], [33.0, 700.0], [33.0, 700.0], [33.5, 610.0], [33.5, 650.0], [34.0, 575.0], [34.0, 685.0], [34.5, 620.0], [35.0, 680.0], [35.0, 700.0], [35.0, 725.0], [35.0, 720.0], [36.0, 714.0], [36.0, 850.0], [37.0, 1000.0], [38.5, 920.0], [38.5, 955.0], [39.5, 925.0], [41.0, 975.0], [41.0, 950.0], [9.8, 6.7], [10.5, 7.5], [10.6, 7.0], [11.0, 9.7], [11.2, 9.8], [11.3, 8.7], [11.8, 10.0], [11.8, 9.9], [12.0, 9.8], [12.2, 12.2], [12.4, 13.4], [13.0, 12.2], [14.3, 19.7], [15.0, 19.9]]
  • ์ด๋ ‡๊ฒŒ 2์ฐจ์› ๋ฆฌ์ŠคํŠธ์ธ fist_data๊ฐ€ ๋งŒ๋“ค์–ด ์กŒ์Šต๋‹ˆ๋‹ค. 
์ด์ œ Dataset์ด ์™„์„ฑ์ด ๋˜์—ˆ์œผ๋‹ˆ, ์ปดํ“จํ„ฐ๊ฐ€ ์ดํ•ด ํ• ์ˆ˜ ์žˆ๋„๋ก ๋„๋ฏธ์™€ ๋น™์–ด๋ฅผ 1๊ณผ 0์œผ๋กœ ํ‘œํ˜„ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋„๋ฏธ์™€ ๋น™์–ด๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ๋‚˜์—ดํ–ˆ๊ธฐ ๋•Œ๋ฌธ์—. ์ •๋‹ต ๋ฆฌ์ŠคํŠธ๋Š” 1์ด 35๋ฒˆ์ด ๋‚˜์˜ค๊ณ , 0์ด 14๋ฒˆ ๋‚˜์˜ต๋‹ˆ๋‹ค. 
#๋„๋ฏธ๋ฅผ 1, ๋น™์–ด๋Š” 0
fish_target = [1]*35+[0]*14
fish_target
[1,
 1,
 1,
 1,
 1,
 1,
 1,
 1,
 1,
 1,
 1,
 1,
 1,
 1,
 1,
 1,
 1,
 1,
 1,
 1,
 1,
 1,
 1,
 1,
 1,
 1,
 1,
 1,
 1,
 1,
 1,
 1,
 1,
 1,
 1,
 0,
 0,
 0,
 0,
 0,
 0,
 0,
 0,
 0,
 0,
 0,
 0,
 0,
 0]
์ด์ œ scikit-learn ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ K-์ตœ๊ทผ์ ‘ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค๋ฅผ KNeighborsClassifier๋ฅผ import ํ•ด์„œ ๊ตฌํ˜„ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  importํ•œ KNeighborsClassifier ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
# k-์ตœ๊ทผ์ ‘ ์ด์›ƒ
from sklearn.neighbors import KNeighborsClassifier
kn = KNeighborsClassifier()
  • kn์ด importํ•œ KNeighborsClassifier์˜ ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค.
์ด์ œ ์ด kn ๊ฐ์ฒด์— fish_data & fish_target data๋ฅผ ์ „๋‹ฌํ•˜์—ฌ ๋„๋ฏธ๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•œ ๊ธฐ์ค€์„ ํ•™์Šต์‹œํ‚ค๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ณผ์ •์„ ๋จธ์‹ ๋Ÿฌ๋‹์—์„œ๋Š” ํ›ˆ๋ จ (training) ์ด๋ผ๊ณ  ํ•˜๋ฉฐ, scikit-learn ์—์„œ๋Š” fit() method๊ฐ€ ํ›ˆ๋ จ์˜ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.
kn.fit(fish_data, fish_target) 
# kn - ๋จธ์‹ ๋Ÿฌ๋‹ ๋ชจ๋ธ. fit - ๋‘ ๋ฐ์ดํ„ฐ๋ฅผ ํ•™์Šต์‹œ์ผœ ๋„๋ฏธ๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•œ ๊ธฐ์ค€์„ ์ฐพ๋Š”๋‹ค.
  • ๊ทธ๋ฆฌ๊ณ  ์ด์ œ ๊ฐ์ฒด(ํ˜น์€ model) kn์ด ์–ผ๋งˆ๋‚˜ ์ž˜ ํ›ˆ๋ จ๋˜์—ˆ๋Š”์ง€ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. scikit-learn์—์„œ ๋ชจ๋ธ์„ ํ‰๊ฐ€ํ•˜๋Š” method๋Š” score() method ์ž…๋‹ˆ๋‹ค. ์ด method๋Š” 0์—์„œ 1 ์‚ฌ์ด์˜ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. 1์€ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์ •ํ™•ํžˆ ๋งž์ถ”์—ˆ๋‹ค๋Š”๊ฒƒ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
kn.score(fish_data, fish_target)
1.0
  • ์ด๋ ‡๊ฒŒ 1.0์ด ๋‚˜์˜ค๋ฉด ์ •ํ™•๋„๊ฐ€ 100% ์ด๋ผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๋ชจ๋ธ์ด ์ •ํ™•๋„๊ฐ€ 100%์ด๊ณ , ๋„๋ฏธ์™€ ๋น™์–ด๋ฅผ ์™„๋ฒฝํ•˜๊ฒŒ ๋ถ„๋ฅ˜ ํ–ˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
  • ๊ทธ๋ฆฌ๊ณ  ์ •ํ™•๋„๋Š” ๋ฐฑ๋ถ„์œจ๋กœ ๋‚˜ํƒ€๋‚ด๋ฉฐ, ๊ฐ’์œผ๋กœ 0~1 ์‚ฌ์ด์˜ ๊ฐ’์„ ๊ฐ€์ง€๋ฉฐ, [์ •ํ™•๋„ = ๋งžํžŒ ๊ฐœ์ˆ˜ / ์ „์ฒด ๋ฐ์ดํ„ฐ ๊ฐœ์ˆ˜] ์ž…๋‹ˆ๋‹ค.

K-์ตœ๊ทผ์ ‘ ์ด์›ƒ ์•Œ๊ณ ๋ฆฌ์ฆ˜

์—ฌ๊ธฐ์„œ ๋งŒ์•ฝ์— ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™€์„œ ์ •๋‹ต์„ ์˜ˆ์ธกํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด? predict() method๋ฅผ ์ด์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
  • ์—ฌ๊ธฐ์„œ kn.predict([[30, 600]))๋ฅผ ์ž…๋ ฅํ•˜๋ฉด, ๋ฐ์ดํ„ฐ์…‹์— ๋งž๊ฒŒ ์ •๋‹ต์„ ์˜ˆ์ธกํ•ด์ค€๋‹ค.

kn.predict([[30, 600]]) #๊ธธ์ด 30cm, ๋ฌด๊ฒŒ 600g์ธ data ์˜ˆ์ธก
  • ๊ทธ๋Ÿฌ๋ฉด ์—ฌ๊ธฐ์„œ ๋ช‡๊ฐœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฐธ๊ณ ํ• ๊นŒ์š”? KNeighborsClassifier ํด๋ž˜์Šค๋Š” ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ 5์ด์ง€๋งŒ, ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ด๊ฟ€์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
kn49 = KNeighborsClassifier(n_neighbors=49)

kn49.fit(fish_data, fish_target)
kn49.score(fish_data, fish_target)
  • ์—ฌ๊ธฐ์„œ๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜(n_neighbors=49) 49๊ฐœ๋ฅผ ์ฐธ๊ณ ํ•ด์„œ k-์ตœ๊ทผ์ ‘ ์ด์›ƒ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜์—ฌ fish_data๋ฅผ ์ ์šฉํ•ด๋ฉด ๋ชจ๋“  ์ƒ์„ ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์˜ˆ์ธกํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 
  • ๊ทธ๋Ÿฌ๋ฉด, fish_data 49๊ฐœ์ค‘์— ๋„๋ฏธ๊ฐ€ 35๊ฐœ ์ด๋ฏ€๋กœ, ๋‹ค์ˆ˜๋ฅผ ์ฐจ์ง€ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์–ด๋–ค ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ์–ด๋„ ๋ฌด์กฐ๊ฑด ๋„๋ฏธ๋กœ ์˜ˆ์ธกํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.
kn49.score(fish_data, fish_target)
#๊ฒฐ๊ณผ๊ฐ’ : ๋Œ€๋žต 71%์˜ ์ •ํ™•๋„
0.7142857142857143

ํ•ต์‹ฌ ํŒจํ‚ค์ง€ & ํ•จ์ˆ˜

Matplotlib

  • scatter() ๋Š” ์‚ฐ์ ๋„๋ฅผ ๊ทธ๋ฆฌ๋Š” ๋ฑƒํ”Œ๋กฏ๋ฆฝ ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. ์ฒ˜์Œ 2๊ฐœ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ X์ถ• ๊ฐ’๊ณผ y์ถ• ๊ฐ’ ์„ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฐ’์€ ํŒŒ์ด์”ฌ ๋ฆฌ์ŠคํŠธ ๋˜๋Š” Numpy ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค.

Scikit-learn

  • KNeighborsClassifier()๋Š” k-์ตœ๊ทผ์ ‘ ์ด์›ƒ ๋ถ„๋ฅ˜ ๋ชจ๋ธ์„ ๋งŒ๋“œ๋Š” ์‚ฌ์ดํ‚ท๋Ÿฐ ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค. n] neighbors ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ด์›ƒ์˜ ๊ฐœ์ˆ˜๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์€ 5์ž…๋‹ˆ๋‹ค.
  • fit()์€ ์‚ฌ์ด๊ฒƒ๋Ÿฐ ๋ชจ๋Œˆ์„ ํ›ˆ๋ จํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”์„œ๋“œ์ž…๋‹ˆ๋‹ค. ์ฒ˜์Œ ๋‘ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ํ›ˆ๋ จ์— ์‚ฌ์šฉํ•  ํŠน์„ฑ๊ณผ ์ •๋‹ต ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
  • predict()๋Š” ์‚ฌ์ดํ‚ท๋Ÿฐ ๋ชจ๋ธ์„ ํ›ˆ๋ จํ•˜๊ณ  ์˜ˆ์ธกํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”์„œ๋“œ์ž…๋‹ˆ๋‹ค. ํŠน์„ฑ ๋ฐ์ดํ„ฐ ํ•˜๋‚˜ ๋งŒ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›์Šต๋‹ˆ๋‹ค.
  • score() ๋Š” ํ›ˆ๋ จ๋œ ์‚ฌ์ดํ‚ท๋Ÿฐ ๋ชจ๋ธ์˜ ์„ฑ๋Šฅ์„ ์ธก์ •ํ•ฉ๋‹ˆ๋‹ค. ์ฒ˜์Œ ๋‘ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ํŠน์„ฑ๊ณผ ์ •๋‹ต ๋ฐ์ด ํ„ฐ๋ฅผ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฉ”์„œ๋“œ๋Š” ๋จผ์ € predict() ๋ฉ”์„œ๋“œ๋กœ ์˜ˆ์ธก์„ ์ˆ˜ํ–‰ํ•œ ๋‹ค์Œ ๋ถ„๋ฅ˜ ๋ชจ๋ธ์ผ ๊ฒฝ ์šฐ ์ •ํƒ‘๊ณผ ๋น„๊ตํ•˜์—ฌ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์˜ˆ์ธกํ•œ ๊ฐœ์ˆ˜์˜ ๋น„์œจ์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.