파이썬에서 Support Vector Machine(SVM) 활용하기

안녕하세요, mj입니다!

오늘은 Support Vector Machine(SVM)을 활용하여 파이썬에서 분류 문제를 해결하는 방법에 대해 알아보겠습니다. SVM은 강력한 분류 알고리즘으로, 다양한 분야에서 활발히 사용되고 있습니다. 이 글에서는 SVM의 기본 개념과 함께 파이썬 코드 예제를 통해 실습해 보겠습니다.

SVM의 기본 개념

SVM은 데이터 포인트를 분리하는 최적의 경계를 찾는 분류 알고리즘입니다. 이 경계는 ‘하이퍼플레인’이라고 불리며, 가능한 한 많은 데이터 포인트를 올바르게 분류하는 방향으로 설정됩니다. SVM은 선형 분리뿐만 아니라 비선형 데이터도 처리할 수 있는 커널 기법을 사용합니다.

파이썬에서 SVM 사용하기

파이썬에서는 scikit-learn 라이브러리를 사용하여 SVM을 쉽게 구현할 수 있습니다. 아래의 예제 코드를 통해 SVM을 활용한 분류 문제를 해결해 보겠습니다.

예제 1: 기본 SVM 분류


import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn import svm

# 데이터셋 로드
iris = datasets.load_iris()
X = iris.data[:, :2]  # 앞의 두 개의 특성만 사용
y = iris.target

# SVM 모델 생성
model = svm.SVC(kernel='linear', C=1.0)
model.fit(X, y)

# 결과 시각화
plt.scatter(X[:, 0], X[:, 1], c=y, cmap='viridis')
plt.xlabel('특성 1')
plt.ylabel('특성 2')
plt.title('Iris 데이터셋 SVM 분류')
plt.show()
    

위 코드는 Iris 데이터셋을 사용하여 SVM 모델을 학습하고, 분류 결과를 시각화하는 예제입니다.

예제 2: 비선형 SVM 분류


from sklearn.datasets import make_moons

# 비선형 데이터셋 생성
X, y = make_moons(n_samples=100, noise=0.1)

# SVM 모델 생성
model = svm.SVC(kernel='rbf', C=1.0)
model.fit(X, y)

# 결과 시각화
plt.scatter(X[:, 0], X[:, 1], c=y, cmap='viridis')
plt.title('Make Moons 데이터셋 SVM 분류')
plt.show()
    

위 예제는 비선형 데이터셋을 사용하여 RBF 커널을 적용한 SVM 분류를 보여줍니다.

예제 3: SVM 하이퍼파라미터 조정


from sklearn.model_selection import GridSearchCV

# 하이퍼파라미터 조정
param_grid = {'C': [0.1, 1, 10], 'kernel': ['linear', 'rbf']}
grid = GridSearchCV(svm.SVC(), param_grid, cv=5)
grid.fit(X, y)

print("최적의 파라미터:", grid.best_params_)
    

이 예제는 Grid Search를 사용하여 SVM의 최적 하이퍼파라미터를 찾는 방법을 보여줍니다.

예제 4: SVM을 이용한 이미지 분류


from sklearn.datasets import load_digits

# 데이터셋 로드
digits = load_digits()
X = digits.data
y = digits.target

# SVM 모델 생성
model = svm.SVC(gamma=0.001, C=100.)
model.fit(X, y)

# 예측 및 정확도 평가
predicted = model.predict(X)
print("정확도:", np.mean(predicted == y))
    

위 코드는 손글씨 숫자 데이터셋을 사용하여 SVM 모델을 학습하고, 정확도를 평가하는 예제입니다.

예제 5: 다중 클래스 분류


from sklearn.multiclass import OneVsRestClassifier

# SVM을 이용한 다중 클래스 분류
model = OneVsRestClassifier(svm.SVC())
model.fit(X, y)
predicted = model.predict(X)
print("정확도:", np.mean(predicted == y))
    

이 예제는 One-vs-Rest 방식을 사용하여 다중 클래스 문제를 해결하는 방법을 설명합니다.

결론

SVM은 다양한 데이터셋에서 효과적으로 작동하는 강력한 분류 알고리즘입니다. 파이썬의 scikit-learn 라이브러리를 사용하면 SVM을 쉽게 구현할 수 있으며, 다양한 커널과 하이퍼파라미터 조정을 통해 최적의 성능을 이끌어낼 수 있습니다.

이 글이 SVM을 이해하는 데 도움이 되었기를 바랍니다. 질문이 있으면 언제든지 댓글로 남겨 주세요!

감사합니다!