[python] scikit-learn을 활용한 SVM 시각화

scikit-learn은 파이썬의 머신러닝 라이브러리로서, 다양한 알고리즘과 모델을 지원하여 머신러닝 작업을 쉽게 수행할 수 있게 해줍니다. 이 중에서 SVM(Support Vector Machine)은 분류 및 회귀 작업에 널리 사용되는 강력한 알고리즘입니다.

SVM은 데이터를 분류하기 위해 최적의 결정 경계를 찾는 방법입니다. 이를 시각화하기 위해 scikit-learn의 SVM 모델을 사용해보겠습니다.

데이터 준비

먼저, 필요한 패키지와 샘플 데이터를 불러오는 코드를 작성합니다.

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

# 데이터 로드
iris = datasets.load_iris()
X = iris.data[:, :2]
y = iris.target

이 코드는 scikit-learn의 datasets 모듈을 사용하여 iris 데이터셋을 불러오고, 데이터를 X와 y로 나누는 부분입니다. 여기서는 iris 데이터셋의 첫 번째와 두 번째 특성만 사용하겠습니다.

SVM 모델 학습 및 시각화

이제 SVM 모델을 학습시키고 결정 경계를 시각화하는 코드를 작성합니다.

# SVM 모델 학습
clf = svm.SVC(kernel='linear', C=1)
clf.fit(X, y)

# 시각화를 위한 그리드 생성
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.02),
                     np.arange(y_min, y_max, 0.02))

# 결정 경계 시각화
Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
plt.contourf(xx, yy, Z, alpha=0.8)
plt.scatter(X[:, 0], X[:, 1], c=y, edgecolors='k')
plt.xlabel('Sepal length')
plt.ylabel('Sepal width')
plt.title('SVM Decision Boundary')
plt.show()

이 코드는 SVC 클래스를 사용하여 SVM 모델을 생성하고 선형 커널(kernel='linear')을 적용한 뒤, 모델을 학습시키는 부분입니다. 그리고 그리드를 생성하여 결정 경계를 시각화합니다.

결과적으로, iris 데이터셋의 Sepal length와 Sepal width 특성을 기반으로 분류한 결정 경계를 시각화할 수 있습니다.

결론

scikit-learn의 SVM 모델을 활용하여 데이터의 결정 경계를 시각화하는 방법을 알아보았습니다. SVM은 분류 작업에 유용한 알고리즘으로 다양한 데이터셋에 활용될 수 있습니다. scikit-learn의 다양한 기능과 함께 SVM을 사용하여 머신러닝 작업을 진행해보세요.

참고 자료