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을 사용하여 머신러닝 작업을 진행해보세요.
참고 자료
- scikit-learn 공식 문서: https://scikit-learn.org/stable/index.html