SVM: 최대 마진 분류 초평면

Beginner

This tutorial is from open-source community. Access the source code

소개

이 실습에서는 scikit-learn 을 사용하여 이진 분류가 가능한 데이터셋을 생성하고, 선형 커널을 사용하는 서포트 벡터 머신 (SVM) 분류기를 통해 최대 마진 분리 초평면을 플롯합니다. SVM 은 서로 다른 클래스로 데이터를 분리하는 최상의 경계 또는 초평면을 찾아 클래스 간의 마진을 최대화하는 강력한 분류 알고리즘입니다.

VM 팁

VM 시작이 완료되면 왼쪽 상단 모서리를 클릭하여 Notebook 탭으로 전환하여 연습용 Jupyter Notebook에 접근합니다.

때때로 Jupyter Notebook 이 완전히 로드되기까지 몇 초 정도 기다려야 할 수 있습니다. Jupyter Notebook 의 제약으로 인해 작업 검증을 자동화할 수 없습니다.

학습 중 문제가 발생하면 Labby 에게 문의하십시오. 세션 후 피드백을 제공하면 문제를 신속하게 해결해 드리겠습니다.

이진 분류 가능 데이터셋 생성

이진 분류가 가능한 데이터셋을 생성하기 위해 scikit-learn 의 make_blobs() 함수를 사용합니다. 이 함수는 클러스터링 및 분류를 위해 등방성 가우시안 덩어리 (blobs) 를 생성합니다. 2 개의 중심과 난수 시드 6 을 사용하여 40 개의 샘플을 생성합니다. 또한 matplotlib를 사용하여 데이터 포인트를 플롯합니다.

import matplotlib.pyplot as plt
from sklearn.datasets import make_blobs

## 이진 분류 가능 데이터셋 생성
X, y = make_blobs(n_samples=40, centers=2, random_state=6)

## 데이터 포인트 플롯
plt.scatter(X[:, 0], X[:, 1], c=y, s=30, cmap=plt.cm.Paired)
plt.show()

SVM 모델 학습

다음으로, 선형 커널과 규제 매개변수 1000 을 사용하여 SVM 모델을 데이터셋에 적합시킵니다. scikit-learn 의 svm.SVC() 함수를 사용하여 SVM 분류기를 생성합니다.

from sklearn import svm

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

최대 마진 분류 초평면 플롯

최대 마진 분류 초평면을 플롯하기 위해 scikit-learn 의 DecisionBoundaryDisplay.from_estimator() 함수를 사용합니다. 이 함수는 SVM 분류기의 결정 함수와 지원 벡터를 플롯합니다. 또한 지원 벡터를 채워지지 않은 원으로 플롯하고 검은색 테두리를 추가합니다.

from sklearn.inspection import DecisionBoundaryDisplay

## 결정 함수와 지원 벡터 플롯
ax = plt.gca()
DecisionBoundaryDisplay.from_estimator(
    clf,
    X,
    plot_method="contour",
    colors="k",
    levels=[-1, 0, 1],
    alpha=0.5,
    linestyles=["--", "-", "--"],
    ax=ax,
)
ax.scatter(
    clf.support_vectors_[:, 0],
    clf.support_vectors_[:, 1],
    s=100,
    linewidth=1,
    facecolors="none",
    edgecolors="k",
)
plt.show()

요약

이 실험에서는 두 클래스로 분리 가능한 데이터셋을 생성하고, 선형 커널을 사용하여 SVM 모델을 학습시키며, scikit-learn 을 이용하여 최대 마진 분류 초평면을 플롯하는 방법을 배웠습니다. SVM 은 이미지 분류, 텍스트 분류, 생물정보학 등 다양한 분야에 활용될 수 있는 강력한 분류 알고리즘입니다.