가중치 데이터셋 결정 함수 시각화

Beginner

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

소개

이 튜토리얼에서는 scikit-learn 을 사용하여 가중치가 부여된 데이터셋의 결정 함수를 시각화하는 방법을 배웁니다. 또한, 데이터셋의 샘플에 서로 다른 가중치를 할당하여 가중치가 결정 함수에 미치는 영향을 살펴봅니다.

VM 팁

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

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

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

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

프로젝트를 시작하기 위해 필요한 라이브러리를 가져옵니다.

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

가중치가 부여된 데이터셋 생성

NumPy 라이브러리를 사용하여 가중치가 부여된 데이터셋을 생성합니다. 랜덤 값을 가진 20 개의 점을 생성하고 마지막 10 개의 샘플에 더 큰 가중치를 할당합니다.

np.random.seed(0)
X = np.r_[np.random.randn(10, 2) + [1, 1], np.random.randn(10, 2)]
y = [1] * 10 + [-1] * 10
sample_weight = 100 * np.abs(np.random.randn(20))
sample_weight[:10] *= 10

가중치가 부여된 데이터셋 시각화

Matplotlib 라이브러리를 사용하여 가중치가 부여된 데이터셋을 시각화합니다. 점의 크기는 해당 점의 가중치에 비례합니다.

xx, yy = np.meshgrid(np.linspace(-4, 5, 500), np.linspace(-4, 5, 500))
fig, ax = plt.subplots()
ax.scatter(
    X[:, 0],
    X[:, 1],
    c=y,
    s=sample_weight,
    alpha=0.9,
    cmap=plt.cm.bone,
    edgecolor="black",
)

가중치 없는 모델 학습

scikit-learn 라이브러리의 SGDClassifier 알고리즘을 사용하여 가중치 없는 모델을 학습합니다. 그런 다음 가중치 없는 모델의 결정 함수를 시각화합니다.

clf = linear_model.SGDClassifier(alpha=0.01, max_iter=100)
clf.fit(X, y)
Z = clf.decision_function(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
no_weights = ax.contour(xx, yy, Z, levels=[0], linestyles=["solid"])

가중치가 부여된 모델 학습

4 단계와 동일한 알고리즘을 사용하여 가중치가 부여된 모델을 학습합니다. 이번에는 fit 메서드에 sample_weight 인수를 전달합니다. 그런 다음 가중치가 부여된 모델의 결정 함수를 시각화합니다.

clf = linear_model.SGDClassifier(alpha=0.01, max_iter=100)
clf.fit(X, y, sample_weight=sample_weight)
Z = clf.decision_function(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
samples_weights = ax.contour(xx, yy, Z, levels=[0], linestyles=["dashed"])

범례 추가 및 플롯 표시

가중치 없는 모델과 가중치가 부여된 모델을 구분하기 위해 플롯에 범례를 추가합니다. 그런 다음 플롯을 표시합니다.

no_weights_handles, _ = no_weights.legend_elements()
weights_handles, _ = samples_weights.legend_elements()
ax.legend(
    [no_weights_handles[0], weights_handles[0]],
    ["no weights", "with weights"],
    loc="lower left",
)

ax.set(xticks=(), yticks=())
plt.show()

요약

이 튜토리얼에서는 scikit-learn 을 사용하여 가중치가 부여된 데이터셋의 결정 함수를 시각화하는 방법을 배웠습니다. 또한 데이터셋의 샘플에 서로 다른 가중치를 할당하여 가중치가 결정 함수에 미치는 영향을 보여주는 방법을 학습했습니다.