KNN ์๊ณ ๋ฆฌ์ฆ ๊ตฌํํ๊ธฐ
# ํ์ํ ํจํค์ง import
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score
# ๋ฐ์ดํฐ ๋ก๋
train_data = pd.read_csv("C:/Users/allye/Desktop/DSOB/WIDA Dacon/DCSTree/train.csv")
# type๊ณผ ๋๋จธ์ง ๋ฐ์ดํฐ๋ค์ ๋ถ๋ฆฌํด์ค
X = train_data.iloc[:, 2:]
y = train_data.iloc[:, 1]
# ๋ฐ์ดํฐ์
๋ถํ (ํ์ต์ฉ ๋ฐ์ดํฐ์ ๊ฒ์ฆ์ฉ ๋ฐ์ดํฐ)
# training๊ณผ test์ ๋น์จ์ 0.3
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# KNN ๋ชจ๋ธ ์์ฑ
k = 3 # k ๊ฐ ์ค์
model = KNeighborsClassifier(n_neighbors=k)
# ๋ชจ๋ธ ํ์ต
model.fit(X_train, y_train)
# ๊ฒ์ฆ์ฉ ๋ฐ์ดํฐ ์์ธก
y_pred = model.predict(X_test)
# ์ ํ๋ ๊ณ์ฐ
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy:", accuracy)
Accuracy: 0.7735924530817694
KNN์ ํ์ดํผํ๋ผ๋ฏธํฐ ๋ถ์
ํ์ดํผ ํ๋ผ๋ฏธํฐ : ๋จธ์ ๋ฌ๋์์ ์ด๋ ํ ์์์ ๋ชจ๋ธ์ ํ์ต์ํฌ ๋, ์ฌ๋์ด ์ง์ ์ค์ ํด์ผํ๋ ๋ณ์
- Distance(๊ฑฐ๋ฆฌ)
๊ฑฐ๋ฆฌ์ ๋ฐ๋ผ ์๋ก ๋ค์ด์ฌ ๋ฐ์ดํฐ์ ๋ถ๋ฅ๊ฐ ๋ฌ๋ผ์ง
- Euclidean Distance (์ ํด๋ฆฌ๋์ ๊ฑฐ๋ฆฌ)
- ์ผ๋ฐ์ ์ผ๋ก ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ
- ํผํ๊ณ ๋ผ์ค ์ ๋ฆฌ, n ์ฐจ์์์์ ๋ ์ ์ฌ์ด์ ๊ฑฐ๋ฆฌ๋ฅผ ํตํด ๊ณ์ฐ
- But, ์ฐจ์์ด ๋์์ง ์๋ก ์ ํ๋๊ฐ ๋จ์ด์ง
- Manhatten Distance (๋งจํํผ ๊ฑฐ๋ฆฌ)
- ๋ ๋ฒ์งธ๋ก ๋ง์ด ์ฐ์ด๋ ๊ฑฐ๋ฆฌ ๊ณ์ฐ
- ์ ํ๋ ์กฐ๊ฑด ํ์์ ์ ํด์ง ๋ฃจํธ๋ฅผ ํตํด ๋๋ฌํ ์ ์๋ ๊ฑฐ๋ฆฌ
์ด ์ธ์๋ ํ์คํ ๊ฑฐ๋ฆฌ, ๋งํ ๋ผ๋ ธ๋น์ค ๊ฑฐ๋ฆฌ, ์ฒด๋น์ ฐํ ๊ฑฐ๋ฆฌ, ๋ฏผ์ฝฅ์คํค ๊ฑฐ๋ฆฌ, ์บ๋ฒ๋ผ ๊ฑฐ๋ฆฌ ๋ฑ์ด ์กด์ฌ
- K
KNN ์๊ณ ๋ฆฌ์ฆ์์ ๊ฐ์ฅ ์ค์ํ ํ๋ผ๋ฏธํฐ
K๊ฐ์ ์ด๋ป๊ฒ ์ค์ ํ๋๋์ ๋ฐ๋ผ ๊ฒฐ๊ณผ๊ฐ ๋ฌ๋ผ์ง
K = ์ด์์ ์
- K ๊ฐ์ด ์์์๋ก
- ์ฅ์
- ๋ ธ์ด์ฆ์ ๋ํ ์ํฅ๋ ฅ์ด ์ค์ด๋ฆ
- ๊ฒฐ์ ๊ฒฝ๊ณ๊ฐ ๋ถ๋๋ฌ์ ์ง
- train set์์์ ์ ํ๋๊ฐ ๋์
- ๋ชจ๋ธ์ด ๋ณต์กํด์ง ์ ์์
- test set์์ ์๋ฌ๊ฐ ๋๊ณ ์ ํ๋๊ฐ ๋ฎ์์ง → ๊ณผ์ ํฉ (Overfitting)
- K ๊ฐ์ด ํด์๋ก
- ์ฅ์
- ๋ชจ๋ธ์ด ๋ ๋ณต์กํจ
- test set์ ๋ํ ์ ํ๋๊ฐ ๋ฎ์ → ๊ณผ์์ ํฉ (Inderfitting)
์ด์์ ์๋ฅผ ์ค์ ํ ๋๋ **๊ต์ฐจ ๊ฒ์ฆ(Cross-validation)**์ ์ฌ์ฉํ์ฌ ์ต์ ์ k๊ฐ์ ์ฐพ๋ ๊ฒ์ด ์ข์ต๋๋ค.
๋ถ๋ฅ ๋ชจ๋ธ์ ์ฑ๋ฅ ํ๊ฐ ๋ฐฉ๋ฒ(์งํ)
- logloss (Logarithmic Loss)
๋ชจ๋ธ์ด ์์ธกํ ํ๋ฅ ๊ณผ ์ค์ ํด๋์ค ๋ ์ด๋ธ ๊ฐ์ ์ฐจ์ด๋ฅผ ์ง์ ์ ์ผ๋ก ์ธก์
๐ก LogLoss = -1/N * Σ(yi*log(pi) + (1-yi)log(1-pi))
yi : i๋ฒ์งธ ์ํ์ ์ค์ ํด๋์ค ๋ ์ด๋ธ
pi : ๋ชจ๋ธ์ด ์์ธกํ i๋ฒ์งธ ์ํ์ด ํด๋์ค 1์ ์ํ ํ๋ฅ
N : ์ ์ฒด ์ํ ์
- ์์ธก ํ๋ฅ ์ด ์ค์ ๋ ์ด๋ธ๊ณผ ์ผ์นํ ์๋ก : ์ต์ํ
- ์์ธก ํ๋ฅ ์ด ์ค์ ๋ ์ด๋ธ๊ณผ ๋ค๋ฅผ์๋ก : ์ต๋ํ
- 0๊ณผ 1 ์ฌ์ด์ ๊ฐ
- ๊ฐ์ด ์์์๋ก ๋ชจ๋ธ์ ์์ธก์ด ๋ ์ข์
- Recall (์ฌํ์จ)
์ด์ง ๋ถ๋ฅ ๋ชจ๋ธ์์ ๋ชจ๋ธ์ด ์ฐธ์ผ๋ก ์์ธกํ ์ํ ์ค ์ค์ ๋ก ์ฐธ์ธ ์ํ์ ๋น์จ์ ๋ํ๋ด๋ ์งํ
๋ชจ๋ธ์ด ๋ชจ๋ ์์ฑ ์ํ์ ์๋ณํ ์ ์๋ ๋ฅ๋ ฅ์ ์ธก์ ํ๋ ์งํ
๐ก TP / (TP + FN)
TP : ๋ชจ๋ธ์ด ์์ฑ์ผ๋ก ์์ธกํ๊ณ ์ค์ ๋ก ์์ฑ์ธ ์ํ์ ์
FN : ๋ชจ๋ธ์ด ์์ฑ์ผ๋ก ์์ธกํ์ง๋ง ์ค์ ๋ก๋ ์์ฑ์ธ ์ํ์ ์
์์ฑ์ธ ์ํ์ ์ฐพ๋ ๊ฒ์ด ์ค์ํ ๊ฒฝ์ฐ์ ๋งค์ฐ ์ ์ฉํ ์งํ
ex) ์ ์ง๋จ ๋ชจ๋ธ
์ถ์ฒ :
https://needjarvis.tistory.com/715
https://leonard92.tistory.com/12
https://hleecaster.com/ml-accuracy-recall-precision-f1/