๋ฐ์ํ
์ด๋ฒ์๋ Support Vector Machine (์ํฌํธ ๋ฒกํฐ ๋จธ์ )์ ๋ฐํ์ฌ ํ๋ฒ ์์๋ณด๊ฒ ์ต๋๋ค.
์ํฌํธ ๋ฒกํฐ ๋จธ์ (Support Vector Machine, SVM)์ ๋ณต์กํ ๋ฐ์ดํฐ์ ์์๋ ํจ๊ณผ์ ์ธ ๋ถ๋ฅ๋ฅผ ์ํํ ์ ์๋ ๊ฐ๋ ฅํ ์ง๋ํ์ต ์๊ณ ๋ฆฌ์ฆ์ ๋๋ค. ์ด ์๊ณ ๋ฆฌ์ฆ์ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฆฌํ๋ ์ต์ ์ ์ดํ๋ฉด(๊ฒฐ์ ๊ฒฝ๊ณ)์ ์ฐพ์๋ด๋ ๊ฒ์ ๋ชฉํ๋ก ํฉ๋๋ค.
SVM์ ์ฃผ์ ํน์ง๊ณผ ์๋ฆฌ๋ฅผ ์์ธํ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
Support Vector Machine (SVM)์ ์ฃผ์ ํน์ง
- ๊ฒฐ์ ์ดํ๋ฉด(Decision Hyperplane): ๋ ํด๋์ค๋ฅผ ๋ถ๋ฆฌํ๋ ๊ฐ์ฅ ์ข์ ์ดํ๋ฉด์ ์ฐพ์ต๋๋ค. ์ด ํ๋ฉด์ ๋ ํด๋์ค ๊ฐ์ ๋ง์ง(๊ฑฐ๋ฆฌ)์ ์ต๋ํํฉ๋๋ค.
- w: ์ดํ๋ฉด์ ๋ฒ์ ๋ฒกํฐ, x: ๋ฐ์ดํฐ ํฌ์ธํธ, b: ์ ํธ
- w * x + b = 0
- ์ํฌํธ ๋ฒกํฐ(Support Vectors): ๊ฒฐ์ ๊ฒฝ๊ณ์ ๊ฐ์ฅ ๊ฐ๊น์ด ์์นํ ๋ฐ์ดํฐ ํฌ์ธํธ๋ค๋ก, ๊ฒฝ๊ณ์ ์์น์ ๋ฐฉํฅ์ ๊ฒฐ์ ํ๋ ๋ฐ ์ค์ํ ์ญํ ์ ํฉ๋๋ค.
- ||w||: ๋ฒ์ ๋ฒกํฐ์ ํฌ๊ธฐ
- M = 2 / ||w||
- ๋ง์ง ์ต๋ํ(Maximizing Margin): ์ํฌํธ ๋ฒกํฐ์ ๊ฒฐ์ ์ดํ๋ฉด ์ฌ์ด์ ๊ฑฐ๋ฆฌ(๋ง์ง)์ ์ต๋ํํ์ฌ, ๋ชจ๋ธ์ ์ผ๋ฐํ ์ฑ๋ฅ์ ๋์ ๋๋ค.
SVM์ ๊ธฐ๋ณธ ์๋ฆฌ
- ์ดํ๋ฉด(Hyperplane):
- w⋅x + b = 0 ํํ์ ์ ํ ๋ฐฉ์ ์์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฆฌํฉ๋๋ค.
- ww๋ ์ดํ๋ฉด์ ๋ฒ์ ๋ฒกํฐ์ด๊ณ , ๋ ์ ํธ์ ๋๋ค.
- ๋ง์ง(Margin):
- ์ดํ๋ฉด์ผ๋ก๋ถํฐ ์ํฌํธ ๋ฒกํฐ๊น์ง์ ์ต์ ๊ฑฐ๋ฆฌ์ ๋๋ค.
- ๋ง์ง์ ์ต๋ํํ๋ ๊ฒ์ด ๋ชจ๋ธ์ ๋ชฉํ์ ๋๋ค.
- ์ปค๋ ํธ๋ฆญ(Kernel Trick):
- ์ ํ ๋ถ๋ฆฌ๊ฐ ๋ถ๊ฐ๋ฅํ ๋ฐ์ดํฐ์ ์ ๋ํด์ ๊ณ ์ฐจ์ ๊ณต๊ฐ์ผ๋ก ๋งคํํ์ฌ ์ ํ์ ์ผ๋ก ๋ถ๋ฆฌํ ์ ์๊ฒ ํฉ๋๋ค.
- ์ปค๋ ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๊ณ ์ฐจ์ ๊ณต๊ฐ์ ๋ด์ ์ ๊ฐ์ ์ ์ผ๋ก ๊ณ์ฐํฉ๋๋ค.
Kernel Trick (์ปค๋ ํธ๋ฆญ)
- SVM์ ๋ณธ์ง์ ์ผ๋ก ์ ํ ๋ถ๋ฆฌ ์๊ณ ๋ฆฌ์ฆ ์ ๋๋ค.
- ๋น์ ํ ๋ฐ์ดํฐ์ ์ปค๋ํธ๋ฆญ์ ์ฌ์ฉํด ๋ฐ์ดํฐ๋ฅผ ๊ณ ์ฐจ์ ๊ณต๊ฐ์ผ๋ก ๋ณํํ์ฌ ์ ํ์ ์ผ๋ก ๋ถ๋ฆฌํฉ๋๋ค.
- ์ด๋ฌํ ๋งคํ์ ๋ช ์์ ์ผ๋ก ์ํํ์ง ์๊ณ ๋ ๊ณ ์ฐจ์ ๊ณต๊ฐ์์์ ๋ด์ (Inner Product)์ ๊ณ์ฐํ ์ ์๊ฒ ํฉ๋๋ค.
- ์ฌ๊ธฐ์ ์ปค๋์? ๋ฐ์ดํฐ๋ฅผ ๊ณ ์ฐจ์ ๊ณต๊ฐ์ผ๋ก ๋งคํํ๋ ํจ์์ ๋๋ค.
์ฃผ์ Kernel Function (์ปค๋ ํจ์)
Kernel Function์ ์ฃผ๋ก 4๊ฐ์ ํจ์๊ฐ ์์ต๋๋ค. ํ๋ฒ ์์๋ณด๊ฒ ์ต๋๋ค.
1. Linear Kernel (์ ํ ์ปค๋)
2. Polynomial Kernel (๋คํญ ์ปค๋)
3. RBF ์ปค๋ (Radial Basis Function, Gaussian Kernel)
- ์ฌ๊ธฐ์, γ๋ ์ปค๋ด ํจ์์ ํญ์ ์กฐ์ ํ๋ ์ญํ ์ ๋๋ค.
4. Sigmoid Kernel (์๊ทธ๋ชจ์ด๋ ์ปค๋)
- ์ฌ๊ธฐ์ a, c๋ HyperParameter๋ฅผ ์๋ฏธํฉ๋๋ค.
SVM์ ์ฅ, ๋จ์
์ฅ์
- ๊ณ ์ฐจ์ ๋ฐ์ดํฐ์์๋ ์ฐ์ํ ์ฑ๋ฅ์ ๋ณด์ ๋๋ค.
- ๋ง์ง ์ต๋ํ๋ฅผ ํตํ ๋์ ์ผ๋ฐํ ๋ฅ๋ ฅ์ ๋ณด์ ๋๋ค.
- ๋น์ ํ ๋ถ๋ฅ๊ฐ ๊ฐ๋ฅํ ์ปค๋ ํธ๋ฆญ์ ํ์ฉ์ด ๊ฐ๋ฅํฉ๋๋ค.
๋จ์
- ๋๊ท๋ชจ ๋ฐ์ดํฐ์ ์์๋ ํ์ต ์๊ฐ์ด ๊ธธ์ด์ง ์ ์์ต๋๋ค.
- ์ปค๋์ ์ ํ๊ณผ ํ์ดํผํ๋ผ๋ฏธํฐ ์ค์ ์ด ์ค์ํ๋ฉฐ, ์ด์ ๋ฐ๋ผ ๋ชจ๋ธ์ ์ฑ๋ฅ์ด ํฌ๊ฒ ์ํฅ์ ๋ฐ์ ์ ์์ต๋๋ค.
- ๊ณผ์ ํฉ์ ๋ฐฉ์งํ๊ธฐ ์ํ ๋งค๊ฐ๋ณ์์ ํจ๊ป ์ ํํ ๋ชจ๋ธ ํ๋์ด ํ์ํฉ๋๋ค.
SVM Example Code
# ์ํฌํธ ๋ฒกํฐ ๋จธ์ (SVM) ์์
# ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ํฌํธ
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
from sklearn.metrics import classification_report, ConfusionMatrixDisplay
import matplotlib.pyplot as plt
# ์์ธ ๋ฐ์ดํฐ์
๋ก๋
wine = load_wine()
X, y = wine.data, wine.target
# ๋ฐ์ดํฐ์
์ ํ์ต ์ธํธ์ ํ
์คํธ ์ธํธ๋ก ๋ถํ
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# ๋ฐ์ดํฐ ํ์คํ
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
# SVM ๋ชจ๋ธ ํ์ต
svm = SVC(kernel='linear', random_state=42)
svm.fit(X_train, y_train)
# ์์ธก ๋ฐ ํ๊ฐ
y_pred = svm.predict(X_test)
print(classification_report(y_test, y_pred))
precision recall f1-score support
0 1.00 1.00 1.00 14
1 1.00 0.93 0.96 14
2 0.89 1.00 0.94 8
accuracy 0.97 36
macro avg 0.96 0.98 0.97 36
weighted avg 0.98 0.97 0.97 36
# ํผ๋ ํ๋ ฌ ์๊ฐํ
ConfusionMatrixDisplay.from_estimator(svm, X_test, y_test)
plt.title("SVM Confusion Matrix")
plt.show()
๋ฐ์ํ
'๐ Machine Learning' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ML] Random Forest (๋๋ค ํฌ๋ ์คํธ) (0) | 2024.08.12 |
---|---|
[ML] Decision Tree (๊ฒฐ์ ํธ๋ฆฌ) (0) | 2024.08.12 |
[ML] Logistic Regression (๋ก์ง์คํฑ ํ๊ท) (0) | 2024.08.07 |
[ML] K-Nearest Neighbors, K-NN (K-์ต๊ทผ์ ์ด์) (0) | 2024.08.07 |
[ML] Supervised Learning (์ง๋ํ์ต) (0) | 2024.08.06 |