๋ฐ์ํ
์ด๋ฒ์๋ K-NN์ ๋ฐํ์ฌ ํ๋ฒ ์์๋ณด๊ฒ ์ต๋๋ค.
K-NN ์ด๋?
K-NN(์ต๊ทผ์ ์ด์ ์๊ณ ๋ฆฌ์ฆ)์ ๋ฐ์ดํฐ ๋ถ๋ฅ ๋ฐ ํ๊ท ๋ฌธ์ ์์ ๋๋ฆฌ ์ฌ์ฉ๋๋ ๋น๋ชจ์์ ๊ธฐ๊ณ ํ์ต ์๊ณ ๋ฆฌ์ฆ์ ๋๋ค.
์ ๋ ฅ ๋ฐ์ดํฐ ํฌ์ธํธ์ ํด๋์ค๋ฅผ ์์ธกํ๊ธฐ ์ํด ๊ทธ ๋ฐ์ดํฐ ํฌ์ธํธ์ ๊ฐ์ฅ ๊ฐ๊น์ด K๊ฐ์ ์ด์์ ๊ธฐ๋ฐ์ผ๋ก ๊ฒฐ์ ์ ๋ด๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ์ ๋๋ค.
K-NN์ ๋ถ๋ฅ(Classification)์ ํ๊ท(Regression) ๋ฌธ์ ๋ชจ๋์ ์ฌ์ฉ๋ ์ ์์ต๋๋ค.
K-NN์ ์ฃผ์ ํน์ง
1. ๋น๋ชจ์์ ๋ฐฉ๋ฒ
- K-NN์ ๋ฐ์ดํฐ ๋ถํฌ์ ๋ํด ํน์ ํ ๊ฐ์ ์ ํ์ง ์๋ ๋น๋ชจ์์ (non-parametric) ๋ฐฉ๋ฒ์ ๋๋ค. ์ด๋ ๋ฐ์ดํฐ์ ํํ๋ ๋ถํฌ์ ๋ํด ์ฌ์ ์ง์์ด ์์ด๋ ์ฌ์ฉํ ์ ์๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
2. ๋ฉ๋ชจ๋ฆฌ ๊ธฐ๋ฐ
- ๋ชจ๋ธ์ ํ์ตํ๋ ๊ณผ์ ์ด ์๊ณ , ์์ธก ์์ ๋ชจ๋ ํ์ต ๋ฐ์ดํฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํ๊ณ ์ฌ์ฉํฉ๋๋ค. ๋ฐ๋ผ์ ๋ชจ๋ธ์ ์ ์ฅํ๊ธฐ ์ํ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ํฝ๋๋ค.
3. ๋จ์์ฑ
- K-NN์ ๊ตฌํ์ ๋งค์ฐ ๊ฐ๋จํ์ง๋ง, ๊ฐ๋ ฅํ ์ฑ๋ฅ์ ๋ฐํํ ์ ์์ต๋๋ค. ํนํ ๋ฐ์ดํฐ์ ๊ตฌ์กฐ๊ฐ ๋ช ํํ์ง ์์ ๋ ์ ์ฉํ ์ ์์ต๋๋ค.
K-NN์ ๊ธฐ๋ณธ ์๋ฆฌ
K-NN์ ๊ธฐ๋ณธ ์๋ฆฌ๋ ์ด๋ ํ ์ ๋ค์ด ์์๊น์? ํ๋ฒ ์์๋ณด๊ฒ ์ต๋๋ค.
๊ฑฐ๋ฆฌ ์ธก์
- ์๋ก์ด ๋ฐ์ดํฐ ํฌ์ธํธ์ ๊ธฐ์กด ๋ฐ์ดํฐ ํฌ์ธํธ๋ค ์ฌ์ด์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ์ฐํฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ ํด๋ฆฌ๋ ๊ฑฐ๋ฆฌ๊ฐ ์ฌ์ฉ๋์ง๋ง, ๋งจํดํผ ๊ฑฐ๋ฆฌ, ์ฝ์ฌ์ธ ์ ์ฌ๋ ๋ฑ ๋ค๋ฅธ ๊ฑฐ๋ฆฌ ์ฒ๋๋ ์ฌ์ฉ ๊ฐ๋ฅํฉ๋๋ค.
- ์ ํด๋ฆฌ๋ ๊ฑฐ๋ฆฌ ์์: ๋ ์ (x1,y1)์ (x2,y2) ์ฌ์ด์ ๊ฑฐ๋ฆฌ๋ ์๋์ ์์์ผ๋ฉ๋๋ค. ๋ก ๊ณ์ฐ
์ด์ ์ ํ
- ๊ณ์ฐ๋ ๊ฑฐ๋ฆฌ ๊ฐ์ ๊ธฐ์ค์ผ๋ก ๊ฐ์ฅ ๊ฐ๊น์ด K๊ฐ์ ์ด์์ ์ ํํฉ๋๋ค.
๊ฒฐ์
- ๋ถ๋ฅ(Classification): K๊ฐ์ ์ด์ ์ค ๊ฐ์ฅ ๋ง์ด ๋ฑ์ฅํ ํด๋์ค๋ฅผ ์๋ก์ด ๋ฐ์ดํฐ ํฌ์ธํธ์ ํด๋์ค๋ก ์์ธกํฉ๋๋ค.
- ํ๊ท(Regression): K๊ฐ์ ์ด์์ ํ๊ท ๊ฐ์ ์๋ก์ด ๋ฐ์ดํฐ ํฌ์ธํธ์ ์์ธก ๊ฐ์ผ๋ก ์ฌ์ฉํฉ๋๋ค.
K๊ฐ์ ์ ํ
๊ทธ๋ฌ๋ฉด K๊ฐ์ ์ด๋ป๊ฒ ์ ํํ๋ ๊ฑธ๊น์? ๊ต์ฐจ๊ฒ์ฆ (Cross-Validation)์ ์ฌ์ฉํ์ฌ ์ ํํฉ๋๋ค.
๊ต์ฐจ ๊ฒ์ฆ (Cross-Validation):
- ๋ค์ํ K ๊ฐ์ ์๋ํ์ฌ ์ต์ ์ K๋ฅผ ์ฐพ์ต๋๋ค. ๊ต์ฐจ ๊ฒ์ฆ์ ํตํด ๋ฐ์ดํฐ์ ์ผ๋ถ๋ถ์ ํ๋ จ ๋ฐ์ดํฐ๋ก, ๋๋จธ์ง ๋ถ๋ถ์ ๊ฒ์ฆ ๋ฐ์ดํฐ๋ก ์ฌ์ฉํด ๋ชจ๋ธ์ ์ฑ๋ฅ์ ํ๊ฐํฉ๋๋ค.
K ๊ฐ์ด ๋ชจ๋ธ์ ๋ผ์น๋ ์ํฅ?
- ์์ K ๊ฐ: ๋ชจ๋ธ์ด ๋ณต์กํด์ ธ ๊ณผ๋์ ํฉ(overfitting)์ด ๋ฐ์ํ ์ ์์ต๋๋ค.
- ํฐ K ๊ฐ: ๋ชจ๋ธ์ด ๋จ์ํด์ ธ ๊ณผ์์ ํฉ(underfitting)์ด ๋ฐ์ํ ์ ์์ต๋๋ค.
K-NN ๊ฐ์ ๋ฐฉ๋ฒ
๋จ์ฝ, K-NN์ ์ฌ์ฉํ๋๋ฐ ๊ฒฐ๊ณผ๊ฐ์ด ์ฌ์ฉ์๊ฐ ์ํ์ง ์๋ ๊ฒฐ๊ณผ๊ฐ ๋์์๋ ์ด๋ป๊ฒ ํด์ผํ ๊น์?
๊ฐ์ ๋ฐฉ๋ฒ๋ค์ ๋ฐํ์ฌ ์ค๋ช ์ ํด๋ณด๊ฒ ์ต๋๋ค.
๊ฐ์ค์น ๋ถ์ฌ
- ๊ฐ๊น์ด ์ด์์๊ฒ ๋ ํฐ ๊ฐ์ค์น๋ฅผ ๋ถ์ฌํ์ฌ ์์ธก์ ์ ํ์ฑ์ ๋์ผ ์ ์์ต๋๋ค.
์ฐจ์ ์ถ์
- ๊ณ ์ฐจ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฐจ์์ผ๋ก ๋ณํํ์ฌ ๊ณ์ฐ ๋ณต์ก๋๋ฅผ ์ค์ผ ์ ์์ต๋๋ค. ์ฃผ์ฑ๋ถ ๋ถ์(PCA)๊ณผ ๊ฐ์ ๋ฐฉ๋ฒ์ด ์ฌ์ฉ๋ ์ ์์ต๋๋ค.
ํจ์จ์ ์ธ ๊ฑฐ๋ฆฌ ๊ณ์ฐ
- KD ํธ๋ฆฌ ๋๋ ๋ณผ ํธ๋ฆฌ์ ๊ฐ์ ์๋ฃ ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ์ฌ ๊ฑฐ๋ฆฌ ๊ณ์ฐ์ ํจ์จ์ ์ผ๋ก ํ ์ ์์ต๋๋ค.
K-NN์ ์ฅ, ๋จ์
K-NN์ ์ฅ์ ๊ณผ ๋จ์ ์ ์ด๋ ํ ์ ๋ค์ด ์์๊น์?
K-NN์ ์ฅ์
- ๋จ์ํ๊ณ ์ดํดํ๊ธฐ ์ฌ์:
- ๊ตฌํ๊ณผ ์ดํด๊ฐ ๋งค์ฐ ๊ฐ๋จํฉ๋๋ค.
- ๋ชจ๋ธ ํ์ต ๊ณผ์ ์ด ์์:
- ๋ฐ์ดํฐ๊ฐ ์ถ๊ฐ๋ ๋๋ง๋ค ๋ชจ๋ธ์ ์ฌํ์ตํ ํ์๊ฐ ์์ต๋๋ค.
- ์๋ก์ด ๋ฐ์ดํฐ๊ฐ ์ถ๊ฐ๋๋ฉด ๊ทธ ๋ฐ์ดํฐ๋ ํฌํจํ์ฌ ์์ธก์ ์ํํ ์ ์์ต๋๋ค.
- ๋ค์ํ ๋ฌธ์ ์ ์ ์ฉ ๊ฐ๋ฅ:
- ๋ถ๋ฅ์ ํ๊ท ๋ฌธ์ ๋ชจ๋์ ์ฌ์ฉ ๊ฐ๋ฅํฉ๋๋ค.
K-NN์ ๋จ์
- ๊ณ์ฐ ๋น์ฉ์ด ๋์:
- ์์ธก ์์ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๋น๊ตํด์ผ ํ๋ฏ๋ก, ๋ฐ์ดํฐ๊ฐ ๋ง์ ๊ฒฝ์ฐ ๊ณ์ฐ ๋น์ฉ์ด ๋์ต๋๋ค.
- ๊ณต๊ฐ ๋ณต์ก๋:
- ๋ชจ๋ ํ์ต ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํด์ผ ํ๋ฏ๋ก, ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ํฝ๋๋ค.
- K ๊ฐ ์ ํ์ ์ด๋ ค์:
- ์ ์ ํ K ๊ฐ์ ์ ํํด์ผ๋ง ์ข์ ์ฑ๋ฅ์ ์ป์ ์ ์์ต๋๋ค.
- ํฌ์ํ ๋ฐ์ดํฐ์์ ์ฑ๋ฅ ์ ํ:
- ๋ฐ์ดํฐ๊ฐ ํฌ์ํ ๊ฒฝ์ฐ ์ฑ๋ฅ์ด ์ ํ๋ ๊ฐ๋ฅ์ฑ์ด ํฝ๋๋ค. ๋ฐ์ดํฐ๊ฐ ์ถฉ๋ถํ ๋ง์์ผ ํจ๊ณผ์ ์ผ๋ก ์๋ํฉ๋๋ค.
K-NN Example Code
K-NN ์์ ์ฝ๋๋ฅผ ํ๋ฒ ๋ณด๊ฒ ์ต๋๋ค.
!kaggle datasets download -d mlg-ulb/creditcardfraud
!unzip creditcardfraud.zip
# K-ํ๊ท ํด๋ฌ์คํฐ๋ง ์์
# ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ํฌํธ
import pandas as pd
import numpy as np
from sklearn.preprocessing import StandardScaler
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
# ๋ฐ์ดํฐ์
๋ก๋
data = pd.read_csv('/content/creditcard.csv')
data.head()
# ํ์ํ ํน์ฑ ์ ํ
X = data.drop(['Time', 'Class'], axis=1)
# ๋ฐ์ดํฐ ํ์คํ
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
# K-ํ๊ท ํด๋ฌ์คํฐ๋ง ๋ชจ๋ธ ์์ฑ ๋ฐ ํ์ต
kmeans = KMeans(n_clusters=2, random_state=42)
kmeans.fit(X_scaled)
# ํด๋ฌ์คํฐ๋ง ๊ฒฐ๊ณผ ์๊ฐํ (PCA๋ฅผ ์ฌ์ฉํ์ฌ 2์ฐจ์์ผ๋ก ์ถ์)
from sklearn.decomposition import PCA
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X_scaled)
plt.figure(figsize=(10, 7))
plt.scatter(X_pca[:, 0], X_pca[:, 1], c=kmeans.labels_, cmap='viridis')
plt.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:, 1], s=300, c='red', marker='X')
plt.xlabel('PCA Component 1')
plt.ylabel('PCA Component 2')
plt.title('K-Means Clustering of Credit Card Fraud Dataset')
plt.show()
๋ฐ์ํ
'๐ Machine Learning' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ML] Support Vector Machine (SVM, ์ํฌํธ ๋ฒกํฐ ๋จธ์ ) (0) | 2024.08.11 |
---|---|
[ML] Logistic Regression (๋ก์ง์คํฑ ํ๊ท) (0) | 2024.08.07 |
[ML] Supervised Learning (์ง๋ํ์ต) (0) | 2024.08.06 |
[ML] Model์ ํ์ต๊ณผ ํ๊ฐ (0) | 2024.08.02 |
[ML] Naive Bayes (๋์ด๋ธ ๋ฒ ์ด์ฆ) (0) | 2024.08.01 |