불균형 클래스를 위한 SVM

Beginner

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

소개

이 실습에서는 불균형 클래스에 대한 서포트 벡터 머신 (SVM) 사용법을 배웁니다. 먼저 일반 SVM 으로 분리 평면을 찾은 후, 불균형 클래스를 자동으로 보정하여 분리 초평면 (점선) 을 플롯합니다. make_blobs 함수를 사용하여 무작위 점의 두 클러스터를 생성합니다.

VM 팁

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

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

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

라이브러리 가져오기

이 실습에서는 필요한 라이브러리를 가져옵니다: matplotlib.pyplot, svm, make_blobs, 그리고 DecisionBoundaryDisplay.

import matplotlib.pyplot as plt
from sklearn import svm
from sklearn.datasets import make_blobs
from sklearn.inspection import DecisionBoundaryDisplay

데이터 생성

make_blobs 함수를 사용하여 무작위 점의 두 개 클러스터를 생성합니다. 첫 번째 클러스터는 1000 개의 점으로, 두 번째 클러스터는 100 개의 점으로 생성합니다. 클러스터의 중심은 각각 [0.0, 0.0][2.0, 2.0]입니다. clusters_std 매개변수는 클러스터의 표준 편차를 제어합니다.

n_samples_1 = 1000
n_samples_2 = 100
centers = [[0.0, 0.0], [2.0, 2.0]]
clusters_std = [1.5, 0.5]
X, y = make_blobs(
    n_samples=[n_samples_1, n_samples_2],
    centers=centers,
    cluster_std=clusters_std,
    random_state=0,
    shuffle=False,
)

모델 학습

svm 라이브러리의 SVC 함수를 사용하여 모델을 학습하고 분리 초평면을 구합니다. 선형 커널을 사용하고 C를 1.0 으로 설정합니다.

clf = svm.SVC(kernel="linear", C=1.0)
clf.fit(X, y)

가중치 클래스로 모델 학습

svm 라이브러리의 SVC 함수를 사용하여 모델을 학습하고 분리 초평면을 구합니다. 선형 커널을 사용하고 class_weight{1: 10}으로 설정합니다. 이렇게 하면 작은 클래스에 더 많은 가중치를 부여합니다.

wclf = svm.SVC(kernel="linear", class_weight={1: 10})
wclf.fit(X, y)

샘플 시각화

matplotlib.pyplotscatter 함수를 사용하여 샘플을 시각화합니다.

plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.Paired, edgecolors="k")

두 분류기의 결정 함수 플롯

sklearn.inspection 라이브러리의 DecisionBoundaryDisplay 함수를 사용하여 두 분류기의 결정 함수를 플롯합니다. 일반 SVM 에는 plot_method"contour", colors"k", 가중치 SVM 에는 colors"r"로 설정합니다. levels[0], alpha0.5, linestyles["-"]로 설정합니다. 또한 axplt.gca()로 설정합니다.

ax = plt.gca()
disp = DecisionBoundaryDisplay.from_estimator(
    clf,
    X,
    plot_method="contour",
    colors="k",
    levels=[0],
    alpha=0.5,
    linestyles=["-"],
    ax=ax,
)

wdisp = DecisionBoundaryDisplay.from_estimator(
    wclf,
    X,
    plot_method="contour",
    colors="r",
    levels=[0],
    alpha=0.5,
    linestyles=["-"],
    ax=ax,
)

범례 추가

matplotlib.pyplotlegend 함수를 사용하여 플롯에 범례를 추가합니다. 레이블은 각각 "non weighted""weighted"로 설정합니다.

plt.legend(
    [disp.surface_.collections[0], wdisp.surface_.collections[0]],
    ["non weighted", "weighted"],
    loc="upper right",
)

플롯 표시

마지막으로 matplotlib.pyplotshow 함수를 사용하여 플롯을 표시합니다.

plt.show()

요약

이 실험에서는 불균형 클래스에 대한 서포트 벡터 머신 (SVM) 사용법을 배웠습니다. make_blobs 함수를 사용하여 무작위 점의 두 클러스터를 생성하고, 일반 SVM 모델과 불균형 클래스 자동 보정 SVM 모델 두 가지를 만들었습니다. 두 분류기의 샘플과 결정 함수를 플롯하고 플롯에 범례를 추가했습니다.