비선형 SVM 이진 분류

Beginner

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

소개

이 실습에서는 비선형 서포트 벡터 머신 (SVM) 과 방사 기저 함수 (RBF) 커널을 사용하여 이진 분류를 수행하는 과정을 안내합니다. 예측 대상은 입력값의 XOR 입니다. 색상 맵은 SVM 이 학습한 결정 함수를 보여줍니다. 이 작업을 위해 Python scikit-learn 라이브러리를 사용합니다.

VM 팁

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

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

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

필요한 라이브러리 가져오기

이 단계에서는 이 작업에 필요한 라이브러리를 가져옵니다. 데이터 시각화를 위해 numpy 와 matplotlib 를, SVM 분류를 위해 scikit-learn 을 사용합니다.

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

데이터 생성

이 단계에서는 SVM 분류기를 학습 및 테스트하기 위한 데이터를 생성합니다. 두 개의 특징을 가진 300 개의 랜덤 데이터 포인트를 생성합니다. 예측 대상은 입력값의 XOR 입니다.

np.random.seed(0)
X = np.random.randn(300, 2)
Y = np.logical_xor(X[:, 0] > 0, X[:, 1] > 0)

모델 학습

이 단계에서는 생성된 데이터를 사용하여 RBF 커널을 가진 SVM 분류기를 학습합니다.

clf = svm.NuSVC(gamma="auto")
clf.fit(X, Y)

결정 함수 시각화

이 단계에서는 SVM 이 학습한 결정 함수를 시각화합니다. 점들의 메쉬 그리드를 생성하고 SVM 분류기를 사용하여 각 점의 클래스를 예측합니다. 그런 다음 각 점의 클래스와 SVM 이 학습한 결정 경계를 플롯합니다.

xx, yy = np.meshgrid(np.linspace(-3, 3, 500), np.linspace(-3, 3, 500))
Z = clf.decision_function(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)

plt.imshow(
    Z,
    interpolation="nearest",
    extent=(xx.min(), xx.max(), yy.min(), yy.max()),
    aspect="auto",
    origin="lower",
    cmap=plt.cm.PuOr_r,
)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2, linestyles="dashed")
plt.scatter(X[:, 0], X[:, 1], s=30, c=Y, cmap=plt.cm.Paired, edgecolors="k")
plt.xticks(())
plt.yticks(())
plt.axis([-3, 3, -3, 3])
plt.show()

요약

이 실험에서는 RBF 커널을 사용한 비선형 SVM 을 이용하여 이진 분류를 수행하는 방법을 배웠습니다. 두 개의 특징과 XOR 타겟을 갖는 데이터를 생성하여 예측했습니다. 생성된 데이터를 사용하여 SVM 분류기를 학습하고, SVM 이 학습한 결정 함수를 시각화했습니다.