SGD 를 이용한 분류 초평면 플롯

Beginner

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

소개

이 실습에서는 확률적 경사 하강법 (Stochastic Gradient Descent, SGD) 을 사용하여 서포트 벡터 머신 (Support Vector Machine, SVM) 을 활용하여 데이터를 분류하는 방법을 배웁니다. SVM 은 분류 및 회귀 분석에 널리 사용되는 강력한 분류 알고리즘입니다. SVM 의 핵심 아이디어는 가능한 가장 큰 마진을 가지는 데이터를 클래스로 분리하는 최적의 초평면을 찾는 것입니다. 마진은 초평면과 각 클래스의 가장 가까운 데이터 포인트 사이의 거리입니다. 확률적 경사 하강법 (SGD) 은 SVM 알고리즘에 대한 최적의 매개변수를 찾는 데 사용되는 최적화 알고리즘입니다.

VM 팁

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

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

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

필요한 라이브러리 가져오기 및 데이터 생성

먼저, 분류에 적합한 데이터 세트를 가져오고 생성해야 합니다. 이 예제에서는 Scikit-learn 의 make_blobs 함수를 사용하여 50 개의 분리 가능한 점을 생성합니다.

import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import SGDClassifier
from sklearn.datasets import make_blobs

## 50 개의 분리 가능한 점을 생성합니다.
X, Y = make_blobs(n_samples=50, centers=2, random_state=0, cluster_std=0.60)

SGD 를 사용한 SVM 모델 학습

다음으로, SGD 를 사용하여 SVM 모델을 학습해야 합니다. Scikit-learn 의 SGDClassifier 클래스를 사용하여 모델을 학습합니다. SVM 알고리즘을 사용하기 위해 loss 매개변수를 "hinge"로 설정하고 정규화 강도를 제어하기 위해 alpha 매개변수를 0.01 로 설정합니다. 또한 반복 횟수를 제한하기 위해 max_iter 매개변수를 200 으로 설정합니다.

## 모델 학습
clf = SGDClassifier(loss="hinge", alpha=0.01, max_iter=200)
clf.fit(X, Y)

최대 마진 분류 초평면 플롯

마지막으로, SGD 를 사용한 SVM 알고리즘으로 얻은 최대 마진 분류 초평면을 플롯할 수 있습니다. np.meshgrid를 사용하여 점 그리드를 생성한 다음, SVM 모델의 decision_function 메서드를 사용하여 그리드의 각 점에 대한 결정 함수를 계산합니다. 그런 다음 plt.contour를 사용하여 결정 경계를 플롯하고 plt.scatter를 사용하여 데이터 점을 플롯합니다.

## 선, 점 및 평면에 가장 가까운 벡터를 플롯합니다.
xx = np.linspace(-1, 5, 10)
yy = np.linspace(-1, 5, 10)

X1, X2 = np.meshgrid(xx, yy)
Z = np.empty(X1.shape)
for (i, j), val in np.ndenumerate(X1):
    x1 = val
    x2 = X2[i, j]
    p = clf.decision_function([[x1, x2]])
    Z[i, j] = p[0]
levels = [-1.0, 0.0, 1.0]
linestyles = ["dashed", "solid", "dashed"]
colors = "k"
plt.contour(X1, X2, Z, levels, colors=colors, linestyles=linestyles)
plt.scatter(X[:, 0], X[:, 1], c=Y, cmap=plt.cm.Paired, edgecolor="black", s=20)

plt.axis("tight")
plt.show()

요약

이 실험에서는 확률적 경사 하강법 (SGD) 을 사용하여 데이터를 분류하는 서포트 벡터 머신 (SVM) 을 사용하는 방법을 배웠습니다. 분류에 적합한 데이터 세트를 생성하고 SGD 를 사용하여 SVM 모델을 학습하고 최대 마진 분류 초평면을 플롯했습니다. SVM 은 분류 및 회귀 분석을 위한 머신 러닝에서 널리 사용되는 강력한 분류 알고리즘입니다. SVM 의 핵심 아이디어는 데이터를 가능한 가장 큰 마진으로 클래스로 분리하는 최상의 초평면을 찾는 것입니다. 확률적 경사 하강법 (SGD) 은 SVM 알고리즘에 대한 최상의 매개변수를 찾는 데 사용되는 최적화 알고리즘입니다.