소개
이 실습에서는 불균형 클래스에 대한 서포트 벡터 머신 (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.pyplot의 scatter 함수를 사용하여 샘플을 시각화합니다.
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], alpha는 0.5, linestyles는 ["-"]로 설정합니다. 또한 ax를 plt.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.pyplot의 legend 함수를 사용하여 플롯에 범례를 추가합니다. 레이블은 각각 "non weighted"와 "weighted"로 설정합니다.
plt.legend(
[disp.surface_.collections[0], wdisp.surface_.collections[0]],
["non weighted", "weighted"],
loc="upper right",
)
플롯 표시
마지막으로 matplotlib.pyplot의 show 함수를 사용하여 플롯을 표시합니다.
plt.show()
요약
이 실험에서는 불균형 클래스에 대한 서포트 벡터 머신 (SVM) 사용법을 배웠습니다. make_blobs 함수를 사용하여 무작위 점의 두 클러스터를 생성하고, 일반 SVM 모델과 불균형 클래스 자동 보정 SVM 모델 두 가지를 만들었습니다. 두 분류기의 샘플과 결정 함수를 플롯하고 플롯에 범례를 추가했습니다.