일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 분류
- rnn
- 과적합
- 최적화
- reinforcement learning
- 지도 학습
- 자연어 처리
- 딥러닝
- LSTM
- 인공 신경망
- Q-Learning
- 정규화
- 강화 학습
- Deep learning
- python
- 머신러닝
- 교차 검증
- 손실 함수
- q-러닝
- GRU
- 활성화 함수
- CNN
- AI
- 회귀
- 인공지능
- 데이터 전처리
- 머신 러닝
- 강화학습
- 신경망
- Machine Learning
- Today
- Total
move84
머신러닝 기초 - 서포트 벡터 머신과 커널 기법 본문
😀 서포트 벡터 머신(SVM)이란?
서포트 벡터 머신은 분류 및 회귀 문제에 널리 쓰이는 강력한 머신러닝 기법이다. 기본 아이디어는 데이터 포인트 중 경계에 가까운, 즉 결정 경계를 정의하는 '서포트 벡터'들을 찾아내고, 이들을 기준으로 최적의 분리 초평면(hyperplane)을 구하는 것이다. 선형 분리가 가능한 경우에는 단순히 직선(또는 초평면)으로 데이터를 나눌 수 있지만, 현실에서는 선형 분리가 어려운 경우가 많다.
📈 커널 기법의 필요성과 개념
데이터가 선형적으로 분리되지 않는 경우, SVM은 커널 함수를 사용해 입력 데이터를 고차원 공간으로 매핑한다. 이렇게 하면 원래의 데이터 공간에서는 뒤죽박죽이던 데이터들이 고차원 공간에서는 선형적으로 분리될 수 있다.
예를 들어, 원형 모양의 데이터를 분류하고 싶을 때, 2차원 평면에서는 선형 분리가 어려워 보이지만, 커널 함수를 통해 3차원으로 올리면 중심을 기준으로 분리할 수 있게 된다. 가장 많이 사용되는 커널 함수로는 RBF(방사 기저 함수), 다항(Polynomial) 커널 등이 있다.
💻 파이썬 코드 예제: RBF 커널을 활용한 SVM 분류
아래 코드는 사이킷런의 SVC(Support Vector Classifier)를 사용해 RBF 커널 기반의 SVM 분류 모델을 구축하는 예제다. 인위적으로 생성한 데이터를 이용해 SVM의 작동 방식을 쉽게 확인할 수 있다.
import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.svm import SVC
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, confusion_matrix, classification_report
# 인위적인 데이터 생성: 두 개의 클래스가 원형으로 분포
X, y = datasets.make_circles(n_samples=300, factor=0.5, noise=0.1, random_state=42)
# 데이터를 훈련 세트와 테스트 세트로 분할
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# RBF 커널을 사용하는 SVM 모델 생성 및 학습
svm_rbf = SVC(kernel='rbf', C=1.0, gamma='scale', random_state=42)
svm_rbf.fit(X_train, y_train)
# 테스트 데이터에 대한 예측 수행
y_pred = svm_rbf.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print("정확도:", accuracy)
print("혼동 행렬:\n", confusion_matrix(y_test, y_pred))
print("\n분류 보고서:\n", classification_report(y_test, y_pred))
# 결정 경계 시각화
def plot_decision_boundary(model, X, y, title):
x_min, x_max = X[:, 0].min() - 0.5, X[:, 0].max() + 0.5
y_min, y_max = X[:, 1].min() - 0.5, X[:, 1].max() + 0.5
xx, yy = np.meshgrid(np.linspace(x_min, x_max, 300),
np.linspace(y_min, y_max, 300))
Z = model.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
plt.contourf(xx, yy, Z, alpha=0.3, cmap=plt.cm.Paired)
plt.scatter(X[:, 0], X[:, 1], c=y, edgecolors='k', cmap=plt.cm.Paired)
plt.title(title)
plt.xlabel("특성 1")
plt.ylabel("특성 2")
plt.show()
plot_decision_boundary(svm_rbf, X, y, "RBF 커널 SVM 결정 경계")
이 코드는 원형으로 분포된 데이터를 생성해, RBF 커널을 사용한 SVM이 어떻게 비선형 데이터를 분류하는지 시각적으로 보여준다. 결정 경계가 곡선 형태로 나타나며, 데이터의 분포를 효과적으로 분리하는 것을 확인할 수 있다.
🌟 초보자를 위한 비유와 예시
커널 기법을 이해하기 쉽게 설명하자면, 마치 납작한 종이 위에 그려진 복잡한 그림을 들고, 투명 필름을 덧대어 그림의 일부 디테일을 강조하는 것과 같다. 원래의 평면에서는 분리가 어려운 부분이, 고차원으로 들어가면 서로 구분되는 형태로 바뀌어 쉽게 분류할 수 있게 되는 것이다.
또 다른 예로, 2차원 평면에 있는 서로 얽혀있는 실타래를 생각해보자. 평면에서는 실타래가 엉켜 있지만, 이를 3차원으로 들어 올리면 각 실이 서로 분리되어 보일 수 있다. 커널 기법은 데이터를 고차원 공간으로 변환해, 이러한 복잡한 구조를 간단하게 만들어주는 역할을 한다.
📚 중요 용어 정리
- 커널 함수(Kernel Function): 입력 데이터를 고차원 공간으로 매핑해 선형 분리가 가능하게 하는 함수. 대표적으로 RBF, 다항 커널 등이 있다.
- RBF 커널(Radial Basis Function Kernel): 데이터 포인트와 중심 사이의 거리를 기반으로 계산되는 커널 함수로, 비선형 관계를 효과적으로 모델링한다.
- C 파라미터: 모델의 복잡도를 조절하는 하이퍼파라미터로, 값이 크면 과적합 위험이 있고, 작으면 과소적합 위험이 있다.
- 감마(Gamma): RBF 커널에서 데이터 포인트 간의 영향을 결정하는 파라미터로, 감마 값이 높으면 국소적 특성을, 낮으면 전역적 특성을 반영한다.
📊 모델 평가와 성능 개선
SVM 모델의 성능은 정확도, 정밀도, 재현율, F1 스코어 등 다양한 평가 지표로 확인할 수 있다. 혼동 행렬을 통해 모델이 어떤 클래스에서 오분류되는지 살펴보고, 하이퍼파라미터인 C와 감마를 조정해 최적의 모델을 찾는 것이 중요하다.
그리드 서치(Grid Search)나 랜덤 서치(Random Search)를 사용하면, 다양한 파라미터 조합을 실험해 최상의 성능을 내는 모델을 선택할 수 있다. 또한, 데이터를 적절히 전처리(스케일링 등)하는 것이 SVM의 성능에 큰 영향을 미친다.
📌 실제 응용 분야와 전망
SVM과 커널 기법은 이미지 인식, 텍스트 분류, 생물정보학 등 다양한 분야에서 활용되고 있다. 특히, 데이터의 분포가 복잡해 선형 모델로 분류하기 어려운 문제에서 SVM은 강력한 성능을 발휘한다.
최근에는 딥러닝 기술이 주목받고 있지만, SVM은 여전히 소규모 데이터셋이나 고차원 특성 공간에서 뛰어난 성능을 보이며, 해석 가능한 모델이라는 장점을 가지고 있다. 앞으로도 SVM은 다른 모델과의 하이브리드 방식으로 발전할 가능성이 크며, 특히 특성 선택이나 전처리 단계에서 중요한 역할을 할 것이다.
📌 결론 및 요약
서포트 벡터 머신은 데이터 분류 문제에서 강력한 예측력을 제공하는 모델이며, 특히 커널 기법을 통해 선형 분리가 어려운 데이터를 고차원 공간으로 매핑해 분류 문제를 해결한다. 이 블로그에서는 SVM의 기본 개념, 커널 기법의 필요성 및 원리, 그리고 RBF 커널을 사용한 간단한 파이썬 코드 예제를 통해 모델의 작동 방식을 설명했다.
초보자들은 이 글을 통해 커널 함수의 역할과 하이퍼파라미터(C와 감마)의 중요성을 이해할 수 있으며, 비선형 데이터 분류 문제에서 SVM이 왜 유용한지 직접 확인할 수 있다. 앞으로 SVM은 다양한 분야에서의 적용과 함께, 데이터 전처리와 하이퍼파라미터 튜닝을 통해 더욱 발전할 가능성이 크다.
키워드: #서포트벡터머신 #커널기법 #머신러닝기초 #파이썬예제
'머신러닝' 카테고리의 다른 글
머신러닝 기초 - 나이브 베이즈 분류기 (Naive Bayes Classifiers)와 응용 (0) | 2025.02.20 |
---|---|
머신러닝 기초 - K-최근접 이웃 (K-Nearest Neighbors) : 거리 측정 방법 (0) | 2025.02.20 |
머신러닝 기초 - 그라디언트 부스팅 머신 (1) | 2025.02.20 |
머신러닝 기초 - 랜덤 포레스트: 앙상블 학습의 모든 것 (0) | 2025.02.20 |
머신러닝 기초 - 결정 트리: 구성과 가지치기 (1) | 2025.02.20 |