SVM 이란?
- 서포트 벡터 머신 (Support Vector Machine, SVM) 은 주로 분류 문제에 사용되는 강력한 머신러닝 모델
- 데이터 포인트를 서로 다른 클래스로 분리하는 최적의 경계 (결정 경계, Decision Boundary)를 찾는데 사용
- SVM 은 고차원 데이터와 비선형 문제에 강력한 성능을 보임
SVM의 주요 개념
- 최적의 초평면(Optimal Hyperplane):
- SVM은 주어진 데이터를 분류할 수 있는 초평면(hyperplane)을 찾습니다. 초평면은 다차원 공간에서 데이터를 두 클래스로 나누는 평면입니다.
- 이 초평면은 가능한 한 두 클래스 간의 마진(margin)을 최대화하는 방식으로 선택됩니다. 마진은 초평면과 데이터 포인트 사이의 거리로, 이 거리의 크기를 최대화하는 초평면이 최적입니다.
- 서포트 벡터(Support Vectors):
- 서포트 벡터는 결정 경계를 형성하는 데 중요한 데이터 포인트입니다. 이 데이터 포인트들이 초평면에 가장 가까운 지점들로, 모델 학습에 중요한 역할을 합니다. 실제로 모델은 서포트 벡터를 기준으로 학습을 진행합니다.
- 마진을 최대화하는 것이 목표인데, 이 마진의 경계가 서포트 벡터를 기준으로 결정됩니다.
- 선형 SVM (Linear SVM):
- 데이터가 선형적으로 분리 가능한 경우, 즉 두 클래스가 직선(2D의 경우) 또는 평면(고차원 공간에서)에 의해 정확하게 나눠질 수 있는 경우, 선형 SVM을 사용합니다.
- 이 경우, SVM은 두 클래스 사이의 경계를 결정하는 직선 또는 평면을 찾습니다.
- 비선형 SVM (Non-linear SVM):
- 데이터가 선형적으로 분리되지 않는 경우, SVM은 커널 기법을 사용하여 데이터를 고차원 공간으로 변환하여 선형적으로 분리할 수 있는 공간으로 만들 수 있습니다.
- 커널 함수(Kernel function)는 원래의 데이터 공간을 더 높은 차원으로 변환하는 함수로, 대표적인 커널 함수는 다음과 같습니다:
- 다항 커널(Polynomial Kernel): 데이터를 다항식 함수로 변환하여 비선형 데이터를 선형적으로 분리 가능하게 만듭니다.
- 가우시안 RBF 커널(Radial Basis Function Kernel): 데이터 포인트 간의 거리를 기준으로 변환하여 비선형 문제를 해결합니다.
- 시그모이드 커널(Sigmoid Kernel): 신경망에서 사용하는 활성화 함수인 시그모이드 함수를 사용하여 변환합니다.
- 마진(Margin):
- 마진은 초평면과 가장 가까운 데이터 포인트들 사이의 거리입니다. SVM의 목표는 마진을 최대화하는 초평면을 찾는 것입니다. 마진이 클수록 모델이 새로운 데이터 포인트를 잘 분류할 확률이 높아집니다.
- 마진을 최대화하려는 이유는 일반화 성능을 높이기 위해서입니다. 마진이 클수록 학습 데이터에 과적합(overfitting)되는 위험이 줄어듭니다.
- 소프트 마진(Soft Margin):
- 실제 데이터는 완벽하게 선형적으로 분리되지 않을 수 있습니다. 이 경우, 일부 데이터 포인트가 초평면을 넘거나 잘못 분류될 수 있습니다. 소프트 마진 SVM은 일부 데이터 포인트가 잘못 분류되도록 허용하지만, 잘못 분류된 점수를 최소화하려고 합니다.
- 이를 위해 C라는 하이퍼파라미터를 사용하여 잘못 분류된 데이터에 대한 벌점을 조절합니다. C 값이 크면 모델은 더 정확한 분류를 목표로 하고, C 값이 작으면 좀 더 유연하게 분류합니다.
- SVM의 수학적 원리:
- SVM은 최적화 문제를 풀어 마진을 최대화하는 초평면을 찾습니다. 이를 위해 **라그랑지 승수법(Lagrange multipliers)**을 사용하여 최적화 문제를 해결합니다.
- 목표 함수: 마진을 최대화하는 초평면을 찾는 문제는 다음과 같은 목적 함수로 표현됩니다:
- 여기서 w는 초평면의 가중치 벡터입니다. SVM 은 이 목적 함수를 최대화 하면서, 동시에 각 데이터 포인트가 올바르게 분류되도록 제약을 설정합니다.
SVM의 특징:
- 강력한 분류 성능: SVM은 특히 고차원 데이터에 대해 매우 강력한 성능을 보입니다.
- 비선형 데이터 처리: 커널 기법을 통해 비선형 문제를 해결할 수 있습니다.
- 고차원 공간에서 잘 작동: 텍스트 분류, 이미지 분류 등 고차원 데이터에서 좋은 성능을 보입니다.
- 메모리 소모: 커널 트릭을 사용할 경우, 특히 데이터가 많을 때는 계산 비용이 많이 들 수 있습니다.
SVM의 단점:
- 대규모 데이터셋: SVM은 훈련 데이터가 매우 크면 시간이 오래 걸릴 수 있으며, 커널을 사용한 경우 메모리 소모가 커질 수 있습니다.
- 하이퍼파라미터 조정: C와 커널 파라미터(예: RBF 커널의 감마 값) 등을 잘 조정해야 최적의 성능을 발휘할 수 있습니다.
예시
- 데이터 로드 및 전처리
import numpy as np
import pandas as pd
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
# 데이터 로드
data = load_breast_cancer()
X = data.data
y = data.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)
- 모델 학습
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score, classification_report, confusion_matrix
# 모델 생성 및 학습
model = SVC(kernel='linear')
model.fit(X_train, y_train)
# 예측
y_pred = model.predict(X_test)
# 평가
print(f"Accuracy: {accuracy_score(y_test, y_pred)}")
print(f"Classification Report:\n{classification_report(y_test, y_pred)}")
print(f"Confusion Matrix:\n{confusion_matrix(y_test, y_pred)}")
'AI > ML' 카테고리의 다른 글
[ML] 지도학습 - 분류모델 (나이브 베이즈) (0) | 2024.12.29 |
---|---|
[ML] 지도학습 - 분류모델 (KNN) (0) | 2024.12.29 |
[ML] 지도학습 - 분류모델 (로지스틱 회귀) (3) | 2024.12.29 |
[ML] 지도학습 - 회귀 모델 (선형, 다항, 리지, 라쏘) (1) | 2024.12.28 |
[ML] 머신러닝 이란? ( Machine Learning ) (4) | 2024.12.28 |