๋จธ์ ๋ฌ๋ ์ง๋ํ์ต์์ ์ฌ์ฉ๋๋ ๊ฐ์ฅ ๊ฐ๋จํ๊ณ ์ง๊ด์ ์ธ ๋ถ๋ฅ ๋ฐ ํ๊ท ๋ฐฉ๋ฒ ์ค ํ๋์ธ KNN ๋ฐฉ๋ฒ์ ๋ํ ์ ๋ฆฌ
KNN (K-Nearest Neighbors) ๊ฐ์
- K-์ต๊ทผ์ ์ด์(KNN, K-Nearest Neighbors)์ ์ง๋ํ์ต(Supervised Learning)์์ ์์ฃผ ์ฌ์ฉ๋๋ ๊ฐ๋จํ์ง๋ง ๊ฐ๋ ฅํ ๋ถ๋ฅ(Classification) ๋ฐ ํ๊ท(Regression) ์๊ณ ๋ฆฌ์ฆ์ผ๋ก, ํ์ต ๊ณผ์ ์ด ๊ฑฐ์ ์๊ณ , ์์ธก ์์ ์ ๊ณ์ฐ์ด ์ด๋ฃจ์ด์ง๋ Lazy Learning ๋ฐฉ์์ ๋ํ์ ์ธ ์์ด๋ค.
- ์์ด๋์ด: ์๋ก์ด ๋ฐ์ดํฐ ํฌ์ธํธ๊ฐ ์ฃผ์ด์ก์ ๋, ํ์ต ๋ฐ์ดํฐ ์ค ๊ฐ์ฅ ๊ฐ๊น์ด
K
๊ฐ์ ์ด์์ ์ฐพ๊ณ , ์ด์๋ค์ ๋ ์ด๋ธ์ ๋ฐํ์ผ๋ก ์์ธก์ ์ํํ๋ค. - ์ฉ๋: ๋ถ๋ฅ(Classification), ํ๊ท(Regression), ์ด์์น ํ์ง ๋ฑ
KNN ๋ฐฉ๋ฒ
1. ๊ฑฐ๋ฆฌ ์ธก์
- ๋ฐ์ดํฐ ๊ฐ ๊ฑฐ๋ฆฌ(์ ์ฌ์ฑ)๋ฅผ ๊ณ์ฐํ๊ธฐ ์ํด ๋ค์ํ ๊ฑฐ๋ฆฌ ํจ์๊ฐ ์ฌ์ฉ๋๋ฉฐ, ๋ํ์ ์ผ๋ก ์ ํด๋ฆฌ๋ ๊ฑฐ๋ฆฌ(Euclidean Distance) ๊ฐ ์๋ค.
2. ๋ถ๋ฅ(Classification)์์์ KNN
- ๋ถ๋ฅ ๋ฌธ์ ์์ KNN ์๊ณ ๋ฆฌ์ฆ์ ์๋ก์ด ์ํ ์ ๋ํด ๋ค์๊ณผ ๊ฐ์ด ๋์ํ๋ค:
- ๋ชจ๋ ํ์ต ์ํ ์์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ์ฐํ๋ค.
- ๊ฐ์ฅ ๊ฐ๊น์ด ๊ฐ์ ์ํ์ ์ ํํ๋ค.
- ํด๋์ค ๋ ์ด๋ธ์ ํ์ธํ์ฌ ๋ค์๊ฒฐ(Voting) ๋ก ์ต์ข ํด๋์ค๋ฅผ ๊ฒฐ์ ํ๋ค.
3. ํ๊ท(Regression)์์์ KNN
- ํ๊ท ๋ฌธ์ ์์ KNN ์๊ณ ๋ฆฌ์ฆ์ ๊ฐ์ ์ด์ ์ํ์ ํ๊ฒ ๊ฐ ํ๊ท ์ผ๋ก ์์ธก ๊ฐ์ ๊ณ์ฐํ๋ค.
4. KNN ํ์ดํผํ๋ผ๋ฏธํฐ
- K (์ด์ ์): ์์์๋ก ๋ฏผ๊ฐ, ํด์๋ก ๋ถ๋๋ฌ์ด ๊ฒฐ์ ๊ฒฝ๊ณ
- ๊ฑฐ๋ฆฌ ์ฒ๋: ์ ํด๋ฆฌ๋, ๋งจํดํผ ๋ฑ
- ๊ฐ์ค์น(ํ์์):
- ๊ท ๋ฑ ๊ฐ์ค์น: ๋ชจ๋ ์ด์์ด ๋์ผํ ์ํฅ
- ๊ฑฐ๋ฆฌ ๊ฐ์ค์น: ๊ฐ๊น์ด ์ด์์ ๋ ํฐ ๊ฐ์ค์น๋ฅผ ๋ถ์ฌ
KNN ์ฅ๋จ์
์ฅ์ | ๋จ์ |
---|---|
- ๊ตฌํ์ด ๊ฐ๋จํจ - ๋น์ ํ ๋ฐ์ดํฐ์๋ ์ ์๋ - ํ์ต ๊ณผ์ ์ด ํ์ ์์ | - ์์ธก ์ ๊ณ์ฐ๋์ด ํผ (๋ฉ๋ชจ๋ฆฌ ์๊ตฌ๋ ํผ) - ๊ณ ์ฐจ์ ๋ฐ์ดํฐ์์ ์ฑ๋ฅ ์ ํ (์ฐจ์์ ์ ์ฃผ) - ์ด์์น์ ๋ฏผ๊ฐํ๊ณ ์ ์ ํ ์ ํ ํ์ |
KNN ์ฌ์ฉ ์ ๊ณ ๋ คํด์ผํ ์
- ๋ฐ์ดํฐ ์ ๊ทํ: ์๋ก ๋ค๋ฅธ ๋ฒ์์ ๋ฐ์ดํฐ๊ฐ ๊ณต์กดํ ๊ฒฝ์ฐ ๊ฑฐ๋ฆฌ ์ธก์ ์ด ์๋ฏธ๋ฅผ ๊ฐ์ง์ง ๋ชปํ๋ฏ๋ก, ๊ณตํํ ๊ฑฐ๋ฆฌ ์ธก์ ์ ์ํด ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ํน์ ๋ฒ์๋ด๋ก ์ ๊ทํ๊ฐ ํ์ํจ.
- ํ์ K: ๋ถ๋ฅ ๋ฌธ์ ์์ ๊ฐ ์ํ์ ์ด์ฉํด ๋ค์๊ฒฐ๋ก ๋ ์ด๋ธ ์ ํ ์, ์ง์๊ฐ์ ๊ฒฝ์ฐ ๋์ ์ํฉ์ด ๋ฐ์ํจ. ์ด๋ฅผ ๋ฐฉ์งํ๊ณ ์ ๋ ํ์๋ก ์ง์ ํ๋ ๊ฒ์ ์ถ์ฒํจ.
Python ์์ ์ฝ๋
Scikit-learn
์ ์ด์ฉํ KNN ์ค์ต ์ฝ๋
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score
# ๋ฐ์ดํฐ์
๋ถ๋ฌ์ค๊ธฐ
X, y = load_iris(return_X_y=True)
# ํ์ต/ํ
์คํธ ๋ถํ
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
# KNN ๋ชจ๋ธ ํ์ต
knn = KNeighborsClassifier(n_neighbors=3)
knn.fit(X_train, y_train)
# ์ค์ ๋ก ํ์ตํ๋ ๊ฒ์ด ์๋, ์
๋ ฅ์ผ๋ก ์ฃผ์ด์ง X_train(ํน์ง๋ฒกํฐ)์ Y_train(์ ๋ต๋ ์ด๋ธ)์
# ๋ด๋ถ์ ์ ์ฅํจ. ์ดํ ์์ธก ๋จ๊ณ์์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ์ด์ฉํจ.
# ์์ธก ๋ฐ ์ ํ๋ ํ๊ฐ
y_pred = knn.predict(X_test)
print("Accuracy:", accuracy_score(y_test, y_pred))