๋จธ์ ๋ฌ๋
- ํน์ฑ(Feature): ๋ฐ์ดํฐ๋ฅผ ์ค๋ช ํ๋ ๋ค์ํ ์์๋ค์ ํน์ฑ์ด๋ผ๊ณ ํ๋ค.
- ์๋ฅผ ๋ค์ด, ์ง ๊ฐ๊ฒฉ ์์ธก์์๋ ๋ฉด์ , ๋ฐฉ ๊ฐ์, ์์น ๋ฑ์ด ํน์ฑ์ด ๋ ์ ์๋ค.
๋ถ๋ฅ ๋ฌธ์ ์ ์ด์ง ๋ถ๋ฅ
๋จธ์ ๋ฌ๋ ๋ฌธ์ ์ค ํ๋๋ ๋ถ๋ฅ(Classification) ๋ฌธ์
์ฌ๋ฌ ๊ฐ์ ํด๋์ค ์ค์์ ํ๋๋ฅผ ์ ํํ๋ ๋ฌธ์
์๋ฅผ ๋ค์ด, ์ด๋ฉ์ผ์ด ์คํธ์ธ์ง ์คํธ ์๋์ธ์ง ๊ตฌ๋ถํ๋ ๋ฌธ์ ๋ ์ด์ง ๋ถ๋ฅ(Binary Classification)์ ํด๋น
- ์ด์ง ๋ถ๋ฅ: ๋ ๊ฐ์ ํด๋์ค ์ค ํ๋๋ฅผ ๊ณ ๋ฅด๋ ๋ฌธ์ (์: ์ด๋ฉ์ผ์ด ์คํธ์ธ์ง ์๋์ง)
- ๋ค์ค ํด๋์ค ๋ถ๋ฅ: ์ฌ๋ฌ ๊ฐ์ ํด๋์ค ์ค ํ๋๋ฅผ ๊ณ ๋ฅด๋ ๋ฌธ์ (์: ๋๋ฌผ ์ข ๋ฅ๋ฅผ ๊ณ ๋ฅด๋ ๋ฌธ์ )
ํ๋ จ(Training)๊ณผ ์์ธก(Prediction)
- ํ๋ จ(Training): ๋จธ์ ๋ฌ๋ ๋ชจ๋ธ์ ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํ์ฌ ๋ชจ๋ธ์ด ๋ฐ์ดํฐ๋ฅผ ํ์ตํ๊ณ , ๊ท์น์ ์ฐพ์๋ด๋ ๊ณผ์
- ์์ธก(Prediction): ํ๋ จ๋ ๋ชจ๋ธ์ ์ฌ์ฉํ์ฌ ์๋ก์ด ๋ฐ์ดํฐ์ ๋ํด ๊ฒฐ๊ณผ๋ฅผ ์์ธกํ๋ ๊ณผ์
K-์ต๊ทผ์ ์ด์(K-Nearest Neighbors, KNN)
K-์ต๊ทผ์ ์ด์(KNN) ์๊ณ ๋ฆฌ์ฆ์ ์ฃผ๋ณ ๋ฐ์ดํฐ์์ ๊ฑฐ๋ฆฌ๋ฅผ ์ธก์ ํ์ฌ ์์ธก์ ํ๋ ๋ฐฉ๋ฒ
ํ๋ จ ๊ณผ์ ์ ๋ฐ๋ก ๊ฑฐ์น์ง ์๊ณ , ๋ฐ์ดํฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํ ๋ค, ์์ธก ์ ์ฃผ๋ณ ๋ฐ์ดํฐ๋ฅผ ์ฐธ๊ณ ํ๋ค.
- ํ๋ จ: ์ค์ ๋ก ๊ท์น์ ํ์ตํ๋ ๊ณผ์ ์ ์์ผ๋ฉฐ, ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ
- ์์ธก: ์์ธกํ๊ณ ์ ํ๋ ๋ฐ์ดํฐ์ ๊ฐ์ฅ ๊ฐ๊น์ด K๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฐพ์, ์ด๋ค์ ๋ค์๊ฒฐ๋ก ์์ธก ๊ฒฐ๊ณผ๋ฅผ ๊ฒฐ์
- ํน์ง
- ์ง์ ๊ฑฐ๋ฆฌ(Euclidean distance) ๋๋ ๋งจํดํผ ๊ฑฐ๋ฆฌ(Manhattan distance)๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๋น๊ตํ๋ค.
- ์๋ฅผ ๋ค์ด, ๋ฐ์ดํฐ A์ K๊ฐ์ ์ต๊ทผ์ ์ด์์ ์ดํด๋ณด๊ณ , ๊ทธ๋ค์ ๋ถ๋ฅ๊ฐ ๋ฌด์์ธ์ง ๋ค์๊ฒฐ๋ก ์์ธกํ๋ค.
- K๊ฐ์ ์์ ๋กญ๊ฒ ์ค์ ํ ์ ์์ผ๋ฉฐ, ์ฃผ๋ก ํ์ ๊ฐ์ ์ฌ์ฉํ์ฌ ๋ค์๊ฒฐ์ด ์ ํจํ๊ฒ ๋๋ค.
- ์ฅ์
- ๊ตฌํ์ด ๊ฐ๋จํ๊ณ ์ง๊ด์ ์
- ํ๋ จ ๊ณผ์ ์ด ํ์ ์์ผ๋ฏ๋ก ๋ฐ์ดํฐ ํ์ต ์๊ฐ์ด ์งง๋ค.
- ๋จ์
- ๋ฐ์ดํฐ๊ฐ ๋ง์ ๊ฒฝ์ฐ ๊ณ์ฐ ์๊ฐ์ด ๋ง์ด ๊ฑธ๋ฆฌ๊ณ , ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ง์ด ์๋ชจ๋จ
- ์๋ก์ด ๋ฐ์ดํฐ์ ๋ํด ์์ธกํ ๋ ์ ์ฒด ๋ฐ์ดํฐ์ ๋น๊ตํด์ผ ํ๊ธฐ ๋๋ฌธ์ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆด ์ ์๋ค.
์ฌ์ดํท๋ฐ์์ KNN ์ฌ์ฉํ๊ธฐ
์ฌ์ดํท๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ KNN์ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ ๋งค์ฐ ๊ฐ๋จํ๋ค.
KNeighborsClassifier() ํด๋์ค๋ฅผ ์ฌ์ฉํ์ฌ KNN ๋ชจ๋ธ์ ์์ฑํ๊ณ , ๋ฐ์ดํฐ๋ฅผ ํ๋ จ์ํจ๋ค.
์ฃผ์ ๋ฉ์๋
- fit(): ์ฃผ์ด์ง ๋ฐ์ดํฐ๋ก ๋ชจ๋ธ์ ํ๋ จ
- model.fit(X_train, y_train)
- predict(): ํ๋ จ๋ ๋ชจ๋ธ์ ์ฌ์ฉํ์ฌ ์์ธก
- predictions = model.predict(X_test)
- score(): ๋ชจ๋ธ์ ์ฑ๋ฅ์ ์ธก์
- accuracy = model.score(X_test, y_test)
from sklearn.neighbors import KNeighborsClassifier
# KNN ๋ชจ๋ธ ์์ฑ (์ด์์ ์๋ 3์ผ๋ก ์ค์ )
model = KNeighborsClassifier(n_neighbors=3)
# ํ๋ จ ๋ฐ์ดํฐ๋ก ๋ชจ๋ธ ํ์ต
model.fit(X_train, y_train)
# ํ
์คํธ ๋ฐ์ดํฐ๋ก ์์ธก
predictions = model.predict(X_test)
# ๋ชจ๋ธ ์ฑ๋ฅ ํ๊ฐ
accuracy = model.score(X_test, y_test)
print(f"Accuracy: {accuracy * 100:.2f}%")
KNN ์ฃผ์ ๋งค๊ฐ๋ณ์
- n_neighbors: ์ฌ์ฉํ ์ด์์ ์(K ๊ฐ)
- metric: ๊ฑฐ๋ฆฌ ๊ณ์ฐ ๋ฐฉ๋ฒ (1: ๋งจํํผ๊ฑฐ๋ฆฌ, 2: ์ ํด๋ฆฌ๋์ ๊ฑฐ๋ฆฌ)
- weights: ์ด์์ ์ค์๋๋ฅผ ์ค์ (์: uniform: ๋ชจ๋ ์ด์ ๋์ผ ๊ฐ์ค์น, distance: ๊ฐ๊น์ด ์ด์์ ๋ ๋ง์ ๊ฐ์ค์น)
'๐ฆญ AI&Big Data > ML' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋น์ง๋ํ์ต (0) | 2025.03.05 |
---|---|
๊ฒฐ์ ํธ๋ฆฌ & ์์๋ธ (1) | 2025.03.05 |
๋ก์ง์คํฑ ํ๊ท (0) | 2025.03.05 |
ํ๊ท (0) | 2025.02.28 |
์ธ๊ณต์ง๋ฅ (0) | 2025.02.27 |