0. ์์ฑ ๋ถ๋ฅ ๋ฌธ์ (์๋๋ฆฌ์ค)
์๋๋ฆฌ์ค: ํ๋น ๋ง์ผ์์ ์์ ์ ํ๋๋ฐ, ์ง์์ด ์์ ๊ตฌ๋ถ์ ๋ชปํ๋ค
๋ฐ๋ผ์, ๋จธ์ ๋ฌ๋์ ์ด์ฉํด ์์ ์ ํน์ฑ์ ํตํด ์์ ์ ์ด๋ฆ์ ์๋ ค์ฃผ๋ ๋จธ์ ๋ฌ๋์ ๋ง๋ค์ด์ผ ํ๋ค.
ํ๋น๋ง์ผ์์ ํ๊ธฐ ์์ํ ์์ ์ ๋๋ฏธ ๋ฑ์ด ์๋ค.
๋ฐ์ดํฐ์ ์ถ์ฒ: https://github.com/Ankit152/Fish-Market
(์ฑ ์์๋ ์บ๊ธ์ด์๋๋ฐ, ํ์ฌ ์ญ์ ๋ ๊ฒ์ผ๋ก ๋ณด์)
์์ ์ ๋ถ๋ฅํ๋ ์ผ์ด๋ ์์ ์ ํน์ง์ ํตํด ์ฝ๊ฒ ๊ตฌ๋ถํ ์ ์์ ๊ฒ์ด๋ค.
์์ ์ ๋ํด ์ ์๋ ๊นํ์ฅ์ด ์์ ๊ธธ์ด๊ฐ 30cm์ด์์ด๋ฉด ๋๋ฏธ๋ผ๊ณ ์๋ ค์ฃผ์๋ค.
ํ์ง๋ง, 30cm์ด์์ธ ๋ชจ๋ ์์ ์ด ๋๋ฏธ๋ ์๋๋ค.
์ด ๋ฌธ์ ๋ฅผ ๋จธ์ ๋ฌ๋์ผ๋ก ์ด๋ป๊ฒ ํด๊ฒฐํ ์ ์์๊น?
๋ณดํต ํ๋ก๊ทธ๋๋ฐ๋ ํ๋ก๊ทธ๋จ์ '๋๊ตฐ๊ฐ ์ ํด์ค ๊ธฐ์ค๋๋ก' ์ผ์ ํ๋ค.
ํ์ง๋ง ๋จธ์ ๋ฌ๋์ ์ค์ค๋ก ๊ธฐ์ค์ ์ฐพ์์ ์ผ์ ํ๋ค.
์๋ฅผ ๋ค์ด, ํ๋น ๋ง์ผ์ ๋ค์ด์ค๋ ์์ ์ค 30~40cm ๊ธธ์ด์ธ ์์ ์ ๋๋ฏธ๋ผ๋ ๊ธฐ์ค์ ๋จธ์ ๋ฌ๋์ ์ค์ค๋ก ์ฐพ์ ์ ์๋ค๋ ๊ฒ์ด๋ค.
๋ํ, ์ด๋ ๊ฒ ์ค์ค๋ก ์ฐพ์ ๊ธฐ์ค์ผ๋ก ์์ ์ ๊ตฌ๋ถํด๋ผ ์๋ ์๋ค.
๋จธ์ ๋ฌ๋์์ ์ด๋ ๊ฒ ์ฌ๋ฌ ๊ฐ์ ์ข ๋ฅ(ํด๋์ค)๋ฅผ ๊ตฌ๋ถํด๋ด๋ ๊ฒ์ ๋ถ๋ฅ๋ผ๊ณ ํ๋ค.
์ด๋, ํด๋์ค๋ ์ข ๋ฅ๋ผ๋ ์๋ฏธ๋ก ํ๋ก๊ทธ๋๋ฐ์์ ํํ ์ฐ์ด๋ ํด๋์ค์๋ ๋ค๋ฅธ ์๋ฏธ์์ ๊ธฐ์ตํ์
2๊ฐ์ ํด๋์ค ์ค ํ๋๋ฅผ ๊ณ ๋ฅด๋ ๋ฌธ์ ๋ ์ด์ง ๋ถ๋ฅ๋ผ๊ณ ํ๋ค.
1. ๋๋ฏธ ๋ถํฌ ์ฐ์ ๋๋ก ์ถ๋ ฅํ๊ธฐ
๋๋ฏธ์ ๋ํ ์ ๋ณด(๋ฐ์ดํฐ)๋ฅผ ๋ฆฌ์คํธ ํ์์ผ๋ก ์ค๋นํ๋ค.
(1) ๋๋ฏธ ๋ฐ์ดํฐ ์ค๋น ๋ฐ ์ฐ์ ๋ ์ถ๋ ฅ
#๋๋ฏธ ๋ฐ์ดํฐ(๋๋ฏธ์ ๊ธธ์ด์ ๋ฌด๊ฒ) ์ค๋น
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]
(2) ๋น์ด ๋ฐ์ดํฐ ์ค๋น ๋ฐ ์ฐ์ ๋ ์ถ๋ ฅ
#๋น์ด ๋ฐ์ดํฐ(๋น์ด์ ๊ธธ์ด์ ๋ฌด๊ฒ) ์ค๋น
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 ]
- ์ด๋ฒ์๋ ๋น์ด์ ๋๋ฏธ์ ๋ฐ์ดํฐ๋ฅผ ์ฐ์ ๋์ ํจ๊ป ์ถ๋ ฅํด๋ณธ๋ค.
์ฐ์ ๋๋ฅผ ๋ณด๋ฉด ์ถ์ ๊ฐ์ด ๋ฌ๋ผ์ ํ๊ฐ ์ด์ ๊ณผ๋ ํํ๊ฐ ์กฐ๊ธ ๋ค๋ฅด๊ฒ ๋์จ ๊ฒ์ ํ์ธํ ์ ์๋ค.
๋๋ฏธ๋ ๋ฌด๊ฒ๊ฐ 1000๊น์ง ๋์ค๊ธฐ ๋๋ฌธ์ธ๋ฐ, ์ด๋ฐ ๋ฐ์ดํฐ๋ ๋ถ๋ฅํ๊ธฐ ์ข์ ๋ฐ์ดํฐ๋ผ๊ณ ํ ์ ์๋ค.
(์ผ์ชฝ์ด๋ฉด ๋น์ด, ์ค๋ฅธ์ชฝ์ด๋ฉด ๋๋ฏธ๋ผ๊ณ ํ๋จํ ์ ์๊ธฐ ๋๋ฌธ)
2. ์ฒซ ๋ฒ์งธ ๋จธ์ ๋ฌ๋ ํ๋ก๊ทธ๋จ
- k ์ต๊ทผ์ ์ด์ ์๊ณ ๋ฆฌ์ฆ
: ์ด๋ค ๋ฐ์ดํฐ์ ๋ํ ๋ต์ ๊ตฌํ ๋, ์ฃผ์์ ๋ค๋ฅธ ๋ฐ์ดํฐ๋ฅผ ๋ณด๊ณ ๋ค์๋ฅผ ์ฐจ์งํ๋ ๊ฒ์ ์ ๋ต์ผ๋ก ํจ
๊ธธ์ด์ ๋ฌด๊ฒ๋ฅผ ๋ณด๊ณ ๋๋ฏธ์ธ์ง ๋น์ด์ธ์ง ๊ตฌ๋ถํ๋ ๋จธ์ ๋ฌ๋ ํ๋ก๊ทธ๋จ์ ๋ง๋ค ๊ฒ์ด๋ค.
์ด ์ฑ ์์ ์ฌ์ฉํ๋ ๋จธ์ ๋ฌ๋ ํจํค์ง๋ ์ฌ์ดํท๋ฐ์ด๋ค.
์ฌ์ดํท๋ฐ์ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ๊ฐ ํน์ฑ์ ๋ฆฌ์คํธ๋ฅผ 2์ฐจ์ ๋ฆฌ์คํธ๋ก ๋ง๋ค์ด์ฃผ์ด์ผ ํ๋ค.
(1) ํน์ฑ 2์ฐจ์ ๋ฆฌ์คํธ ์์ฑ
#๋ฐ์ดํฐ์
ํตํฉ (๋๋ฏธ+๋ฐฉ์ด)
length = bream_length + smelt_length
weight = bream_weight + smelt_weight
print(length)
print(weight)
#์ ์ผ๋ก ์ฐ๊ธฐ ์ํด (x,y) ์ถ์ถ - fish_data
#๊ธธ์ด, ๋ฌด๊ฒ ํํ์ 2์ฐจ์ ๋ฐฐ์ด์ด ๋จ
fish_data = [[l,w] for l,w in zip(length, weight)]
print(fish_data)
zipํจ์๋ฅผ ํตํด fish_data์ [ [l1, w1], [l2, w2],[l3, w3],...[l49, w49]] ํํ์ 2์ฐจ์ ๋ฐฐ์ด์ด ๋๋ค.
zip()ํจ์ ์ฐธ๊ณ ์๋ฃ
(2) ์ ๋ต ๋ฐ์ดํฐ ์ค๋น
์์ 49๊ฐ์ ๊ธธ์ด์ ๋ฌด๊ฒ๋ฅผ ๋ชจ๋ ์ค๋นํ์ผ๋ฉด, ์ด์ ๋ ์ ๋ต ๋ฐ์ดํฐ๋ฅผ ์ค๋นํด์ผ ํ๋ค.
์ด ๋จธ์ ๋ฌ๋์ ๊ธธ์ด์ ๋ฌด๊ฒ๋ฅผ ๋ณด๊ณ ์ด๋ค ์์ ์ด ๋๋ฏธ์ธ์ง ๋น์ด์ธ์ง ๊ตฌ๋ถํด์ผ ํ๋ค.
๊ทธ๋ฌ๊ธฐ ์ํด์๋ ์ด๋ค ์์ ์ด ๋๋ฏธ์ธ์ง ๋น์ด์ธ์ง ์๋ ค์ฃผ์ด์ผ ํ๋ค.
๋๋ฏธ์ ๋น์ด๋ฅผ ์ซ์๋ฅผ ํตํด ์๋ ค์ค๋ค. ๋๋ฏธ - 1, ๋น์ด - 0
(๋ณดํต ๋จธ์ ๋ฌ๋์์๋ ์ด์ง๋ถ๋ฅ์์ ์ฐพ์ผ๋ ค๋ ๋์์ 1๋ก ๋๊ณ , ๊ทธ ์ธ์๋ 0์ผ๋ก ๋๋๋ค.)
#๊ฐ ์์์ ๋ํด์ ๋๋ฏธ์ ๋น์ด๋ก ๋ผ๋ฒจ๋งํ๋ ๋ฆฌ์คํธ ์์ฑ - fish_target
#์์๋ ์ญ ๋๋ฏธ(1)์ด๊ณ , ๋ค์๋ ์ญ ๋น์ด(0)๋ค
fish_target = [1]*35+[0]*14
print(fish_target)
์ฆ, fish_data์๋ ํน์ง ๋ฆฌ์คํธ๊ฐ ์์๋๋ก ์๊ณ , fish_target์๋ ์์ ์ด๋ฆ ๋ฆฌ์คํธ๊ฐ ์์๋๋ก ์๋ค.
์ด์ ์ฌ์ดํท๋ฐ ํจํค์ง์์ k-์ต๊ทผ์ ์ด์ ์๊ณ ๋ฆฌ์ฆ์ ๊ตฌํํ ํด๋์ค์ธ KNeighborClassifer์ importํด์ค๋ค.
(3) KNeighborClassifer ์ํฌํธ
#k-์ต๊ทผ์ ์ด์ ์๊ณ ๋ฆฌ์ฆ ์ฌ์ฉ์ ์ํด ์ธ์ดํท๋ฐ ํจํค์ง๋ก๋ถํฐ ์ํฌํธ
from sklearn.neighbors import KNeighborsClassifier
#KNeighborsClassifer ํด๋์ค์ ๊ฐ์ฒด ์์ฑ
kn = KNeighborsClassifier()
(4) ํ๋ จ ๋ฐ ํ๊ฐ
์ด ๊ฐ์ฒด(kn)์ fish_data์ fist_target์ ์ ๋ฌํ์ฌ ๋๋ฏธ๋ฅผ ์ฐพ๊ธฐ ์ํ ๊ธฐ์ค์ ํ์ต์ํจ๋ค.
์ด๋ฐ ๊ณผ์ ์ ํ๋ จ์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
- fit()์ ๋จธ์ ๋ฌ๋์ ํ๋ จ ๋ฉ์๋
- fit() ๋ฉ์๋๋ ์ฃผ์ด์ง ๋ฐ์ดํฐ๋ก ์๊ณ ๋ฆฌ์ฆ์ ํ๋ จํ๋ค.
- score()๋ ํ๊ฐ ๋ฉ์๋
- score() ๋ฉ์๋๋ ๋ชจ๋ธ์ ํ๊ฐํ๋ ๋ฉ์๋์ด๋ฉฐ, 0์์ 1์ฌ์ด์ ๊ฐ์ ๋ฐํํ๋ค. 1์ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์ ํํ ๋งํ๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค. (์ ํ๋ ํ์ธ)
#kn๋ชจ๋ธ์ ์์(fish_data)์ ๋ ์ด๋ธ(fish_target)์ ์ง์ ํ์ฌ ํ๋ จํจ
kn.fit(fish_data, fish_target)
#kn๋ชจ๋ธ์ ์์(fish_data)์ ๋ ์ด๋ธ(fish_target)์ ์ง์ ํ์ฌ ํ๊ฐํจ
kn.score(fish_data,fish_target)
3. k-์ต๊ทผ์ ์ด์ ์๊ณ ๋ฆฌ์ฆ
k- ์ต๊ทผ์ ์ด์ ์๊ณ ๋ฆฌ์ฆ: ์ด๋ค ๋ฐ์ดํฐ์ ๋ํ ๋ต์ ๊ตฌํ ๋, ์ฃผ์์ ๋ค๋ฅธ ๋ฐ์ดํฐ๋ฅผ ๋ณด๊ณ ๋ค์๋ฅผ ์ฐจ์งํ๋ ๊ฒ์ ์ ๋ต์ผ๋ก ํจ
์๋ฅผ ๋ค์ด, ์ผ๊ฐํ์ผ๋ก ํ์๋ ์๋ก์ด ๋ฐ์ดํฐ(๊ธธ์ด: 30, ๋ฌด๊ฒ:600)๊ฐ ์๋ค๊ณ ๊ฐ์ ํ ๋, ์ด ์ผ๊ฐํ์์ ๊ฐ๊น์ด ๋ฐ์ดํฐ๋ค์ด ๋๋ฏธ ๋ฐ์ดํฐ์ด๊ธฐ ๋๋ฌธ์ ์ด ๋จธ์ ๋ฌ๋์ ๋๋ฏธ๋ผ๊ณ ํ๋จํ๋ค.
predict() ๋ฉ์๋๋ ์๋ก์ด ๋ฐ์ดํฐ์ ์ ๋ต์ ์์ธกํ๋ค.
์ด ๋ฉ์๋๋ fit()๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก 2์ฐจ๋ฆฌ์คํธ๋ฅผ ์ ๋ฌํด์ผ ํ๋ค.
ํ์ธ ๊ฒฐ๊ณผ, ์ค์ ๋ก array[1] ์ฆ, ๋๋ฏธ(1)๋ผ๊ณ ์์ธกํ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
k-์ต๊ทผ์ ์ด์ ์๊ณ ๋ฆฌ์ฆ์ ์ํด ์ค๋นํด์ผ ํ ์ผ์ ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ ๊ฐ์ง๊ณ ์๋ ๊ฒ์ด๋ค.
์๋ก์ด ๋ฐ์ดํฐ์ ๋ํด ์์ธกํ ๋๋ ๊ฐ์ฅ ๊ฐ๊น์ด ์ง์ ๊ฑฐ๋ฆฌ์ ์ด๋ค ๋ฐ์ดํฐ๊ฐ ์๋์ง๋ฅผ ์ดํผ๋ฉด ๋๋ค.
๋จ, k-์ต๊ทผ์ ์ด์ ์๊ณ ๋ฆฌ์ฆ์ ์ด๋ฐ ํน์ง ๋๋ฌธ์ ๋ฐ์ดํฐ๊ฐ ์์ฃผ ๋ง์ ๊ฒฝ์ฐ์๋ ์ฌ์ฉ์ด ์ด๋ ต๋ค.
๋ง์ ๋ฐ์ดํฐ์ ๋ฐ๋ผ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ง์ด ํ์ํ๊ณ ์ง์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ์ฐํ๋๋ฐ์๋ ๋ง์ ์๊ฐ์ด ํ์ํ๊ธฐ ๋๋ฌธ์ด๋ค.
์ฌ์ดํท๋ฐ์ KNeighborsClassifier ํด๋์ค์ ๊ฒฝ์ฐ, fix_X ์์ฑ์ ์ฐ๋ฆฌ๊ฐ ์ ๋ฌํ fish_data๋ฅผ ๋ชจ๋ ๊ฐ์ง๊ณ ์๋ค.
_y ์์ฑ์๋ fish_target์ ๊ฐ์ง๊ณ ์๋ค.
#๋ชจ๋ธ์ ํ์ต๋ ๋ฐ์ดํฐ๊ฐ
print(kn._fit_X)
#๋ชจ๋ธ์ ํ์ต๋ ๋ ์ด๋ธ ๊ฐ
print(kn._y)
##๋ชจ๋ ๋ฐ์ดํฐ์
๊ฐ์์ธ 49๊ฐ๋งํผ ๊ฐ๊น์ด ๋ฐ์ดํฐ๋ฅผ ์ฐธ๊ณ ํ๋ ๋ชจ๋ธ ์์ฑ
kn49 = KNeighborsClassifier(n_neighbors=49)
##๋ชจ๋ธ ํ์ต ๋ฐ ํ๊ฐ(์ ํ๋ ์ถ๋ ฅ)
kn49.fit(fish_data, fish_target)
kn49.score(fish_data, fish_target)
#๋๋ฏธ 35๊ฐ์ ๋ํด์๋ง ์ ํํ ๋ง์ถ๊ธฐ ๋๋ฌธ์ 35/49์ ๊ฐ์ ์ ํ๋๋ฅผ ๋ณด์
print(35/49)
kn49.predict([[15,80]]) #๋ฌด์กฐ๊ฑด ๋๋ฏธ ๋์ด
๋ฐ๋ผ์, ์ค์ ๋ก k-์ต๊ทผ์ ์ด์์๊ณ ๋ฆฌ์ฆ์ ์ค์ ๋ก ๋ฌด์ธ๊ฐ ํ๋ จ๋๋ ๊ฒ์ ์๋ ์ ์ด๋ค.
๋จ์ง, fit() ๋ฉ์๋์ ์ ๋ฌํ ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ ์ ์ฅํ๊ณ ์๋ค๊ฐ ์๋ก์ด ๋ฐ์ดํฐ๊ฐ ๋ฑ์ฅํ๋ฉด ๊ฐ์ฅ ๊ฐ๊น์ด ๋ฐ์ดํฐ๋ฅผ ์ฐธ๊ณ ํ ๋ฟ์ด๋ค.
์ด๋, ๊ฐ์ฅ ๊ฐ๊น์ด ๋ช๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฐธ๊ณ ํ ์ง๋ ์ฐ๋ฆฌ๊ฐ ์์๋ก ์ ํ ์ ์๋ค. (๊ธฐ๋ณธ๊ฐ: 5)
๊ฐ์ฅ ๊ฐ๊น์ด ๋ฐ์ดํฐ 49๊ฐ๋ฅผ ์ด์ฉํ๋ ๋ชจ๋ธ์ fish_data๋ฅผ ์ ์ฉํ๋ฉด ์ด๋ค ๋ฐ์ดํฐ๊ฐ ๋์๋ ๋ชจ๋ ์์ ์ ์ด์ฉํ์ฌ ์์ธกํ๊ฒ ๋๋ค. ์ด๋, 49๊ฐ ์ค ๋๋ฏธ๊ฐ 35๊ฐ๋ก ๋ ๋ง๊ธฐ ๋๋ฌธ์ ์ด ๊ฒฝ์ฐ์๋ ๋ฌด์กฐ๊ฑด ๋๋ฏธ๋ก ์์ธก๋๋ค.
๋ฐ๋ผ์ ํด๋น ๋ชจ๋ธ์ ์ ํํ์ง ์๊ธฐ ๋๋ฌธ์ n_neighbors ๊ฐ์ ๋ค๋ฅธ ๊ฐ(ex. 5) ๋ก ๋๋ ๊ฒ์ด ์ ์ ํ ๊ฒ์ด๋ค.