Scikit-Learn 을 이용한 다중 레이블 데이터셋 생성

Beginner

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

소개

이 실습에서는 Scikit-Learn 라이브러리의 make_multilabel_classification 함수를 사용하여 다중 레이블 데이터셋을 생성하는 방법을 배웁니다. 이 함수는 각 샘플이 두 개의 특징의 개수를 가지며, 두 클래스 각각에서 서로 다른 분포를 보이는 다중 레이블 데이터의 랜덤 샘플을 생성합니다.

VM 팁

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

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

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

필요한 라이브러리 가져오기 및 상수 정의

먼저, 다중 레이블 데이터셋을 생성하기 위해 필요한 라이브러리를 가져오고 색상 및 랜덤 시드 상수를 정의해야 합니다.

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_multilabel_classification as make_ml_clf

COLORS = np.array(
    [
        "!",
        "#FF3333",  ## 빨강
        "#0198E1",  ## 파랑
        "#BF5FFF",  ## 보라
        "#FCD116",  ## 노랑
        "#FF7216",  ## 주황
        "#4DBD33",  ## 초록
        "#87421F",  ## 갈색
    ]
)

## make_multilabel_classification 함수를 여러 번 호출할 때 동일한 랜덤 시드를 사용하여
## 동일한 분포를 보장합니다.
RANDOM_SEED = np.random.randint(2**10)

플롯 함수 정의

다음으로, 랜덤으로 생성된 다중 레이블 데이터셋을 플롯하는 함수 plot_2d를 정의합니다. 이 함수는 세 개의 인수 n_labels, n_classes, 그리고 length를 받습니다.

def plot_2d(ax, n_labels=1, n_classes=3, length=50):
    X, Y, p_c, p_w_c = make_ml_clf(
        n_samples=150,
        n_features=2,
        n_classes=n_classes,
        n_labels=n_labels,
        length=length,
        allow_unlabeled=False,
        return_distributions=True,
        random_state=RANDOM_SEED,
    )

    ax.scatter(
        X[:, 0], X[:, 1], color=COLORS.take((Y * [1, 2, 4]).sum(axis=1)), marker="."
    )
    ax.scatter(
        p_w_c[0] * length,
        p_w_c[1] * length,
        marker="*",
        linewidth=0.5,
        edgecolor="black",
        s=20 + 1500 * p_c**2,
        color=COLORS.take([1, 2, 4]),
    )
    ax.set_xlabel("Feature 0 count")
    return p_c, p_w_c

이 함수는 지정된 매개변수로 make_multilabel_classification 함수를 사용하여 데이터셋을 생성합니다. 그런 다음 Matplotlib 라이브러리의 scatter 함수를 사용하여 데이터셋을 플롯합니다. 이 함수는 클래스 확률과 특징 확률을 반환합니다.

데이터셋 플롯

이제 plot_2d 함수를 사용하여 랜덤으로 생성된 다중 레이블 데이터셋을 플롯합니다. 두 개의 서브플롯이 있는 그림을 만들고, 다른 매개변수 값으로 각 서브플롯에 plot_2d 함수를 호출합니다.

_, (ax1, ax2) = plt.subplots(1, 2, sharex="row", sharey="row", figsize=(8, 4))
plt.subplots_adjust(bottom=0.15)

p_c, p_w_c = plot_2d(ax1, n_labels=1)
ax1.set_title("n_labels=1, length=50")
ax1.set_ylabel("Feature 1 count")

plot_2d(ax2, n_labels=3)
ax2.set_title("n_labels=3, length=50")
ax2.set_xlim(left=0, auto=True)
ax2.set_ylim(bottom=0, auto=True)

plt.show()

클래스 및 특징 확률 출력

마지막으로, plot_2d 함수에서 반환된 클래스 확률과 특징 확률을 사용하여 각 클래스에 대한 클래스 및 특징 확률을 출력합니다.

print("The data was generated from (random_state=%d):" % RANDOM_SEED)
print("Class", "P(C)", "P(w0|C)", "P(w1|C)", sep="\t")
for k, p, p_w in zip(["red", "blue", "yellow"], p_c, p_w_c.T):
    print("%s\t%0.2f\t%0.2f\t%0.2f" % (k, p, p_w[0], p_w[1]))

요약

이 실습에서는 Scikit-Learn 라이브러리의 make_multilabel_classification 함수를 사용하여 다중 레이블 데이터셋을 생성하는 방법을 배웠습니다. 또한 데이터셋을 플롯하고 클래스 및 특징 확률을 출력하는 방법도 학습했습니다.