KBinsDiscretizer 전략 실습

Beginner

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

소개

이 실습에서는 Python scikit-learn 라이브러리의 KBinsDiscretizer 클래스에서 제공하는 다양한 전략을 탐색합니다. KBinsDiscretizer는 연속적인 데이터를 구간화하여 연속적인 특징을 범주형 특징으로 이산화하는 클래스입니다. 다양한 데이터 세트에 적용하여 각 전략을 시각화해 보겠습니다.

VM 팁

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

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

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

라이브러리 가져오기

필요한 라이브러리를 가져오는 것으로 시작합니다. numpy, matplotlib.pyplot, make_blobs, 그리고 sklearn.preprocessing 모듈의 KBinsDiscretizer를 사용할 것입니다.

import numpy as np
import matplotlib.pyplot as plt
from sklearn.preprocessing import KBinsDiscretizer
from sklearn.datasets import make_blobs

데이터셋 생성

시각화를 위해 세 개의 데이터셋을 생성합니다. 첫 번째 데이터셋은 두 차원 모두에서 -3 과 3 사이의 균일 분포에서 랜덤하게 생성된 200 개의 샘플입니다. 두 번째 데이터셋은 sklearn.datasetsmake_blobs 함수를 사용하여 생성된 200 개의 샘플입니다. 세 번째 데이터셋 또한 make_blobs 함수를 사용하여 생성됩니다.

n_samples = 200
centers_0 = np.array([[0, 0], [0, 5], [2, 4], [8, 8]])
centers_1 = np.array([[0, 0], [3, 1]])

X_list = [
    np.random.RandomState(42).uniform(-3, 3, size=(n_samples, 2)),
    make_blobs(
        n_samples=[n_samples // 10, n_samples * 4 // 10, n_samples // 10, n_samples * 4 // 10],
        cluster_std=0.5,
        centers=centers_0,
        random_state=42,
    )[0],
    make_blobs(
        n_samples=[n_samples // 5, n_samples * 4 // 5],
        cluster_std=0.5,
        centers=centers_1,
        random_state=42,
    )[0],
]

다양한 전략 적용

이제 KBinsDiscretizer에서 사용 가능한 세 가지 다른 전략을 각 데이터셋에 적용할 것입니다. 전략은 다음과 같습니다.

  • 'uniform': 각 특징에 대해 균일한 이산화가 수행됩니다. 즉, 각 차원에서 구간 너비가 일정합니다.
  • 'quantile': 분위수 값에 대한 이산화가 수행됩니다. 즉, 각 구간에 대략 동일한 수의 샘플이 포함됩니다.
  • 'kmeans': KMeans 클러스터링 절차의 중심점을 기반으로 이산화가 수행됩니다.
strategies = ["uniform", "quantile", "kmeans"]

figure = plt.figure(figsize=(14, 9))
i = 1
for ds_cnt, X in enumerate(X_list):
    ax = plt.subplot(len(X_list), len(strategies) + 1, i)
    ax.scatter(X[:, 0], X[:, 1], edgecolors="k")
    if ds_cnt == 0:
        ax.set_title("Input data", size=14)

    xx, yy = np.meshgrid(
        np.linspace(X[:, 0].min(), X[:, 0].max(), 300),
        np.linspace(X[:, 1].min(), X[:, 1].max(), 300),
    )
    grid = np.c_[xx.ravel(), yy.ravel()]

    ax.set_xlim(xx.min(), xx.max())
    ax.set_ylim(yy.min(), yy.max())
    ax.set_xticks(())
    ax.set_yticks(())

    i += 1
    ## KBinsDiscretizer 로 데이터셋 변환
    for strategy in strategies:
        enc = KBinsDiscretizer(n_bins=4, encode="ordinal", strategy=strategy)
        enc.fit(X)
        grid_encoded = enc.transform(grid)

        ax = plt.subplot(len(X_list), len(strategies) + 1, i)

        ## 수평 줄무늬
        horizontal = grid_encoded[:, 0].reshape(xx.shape)
        ax.contourf(xx, yy, horizontal, alpha=0.5)
        ## 수직 줄무늬
        vertical = grid_encoded[:, 1].reshape(xx.shape)
        ax.contourf(xx, yy, vertical, alpha=0.5)

        ax.scatter(X[:, 0], X[:, 1], edgecolors="k")
        ax.set_xlim(xx.min(), xx.max())
        ax.set_ylim(yy.min(), yy.max())
        ax.set_xticks(())
        ax.set_yticks(())
        if ds_cnt == 0:
            ax.set_title("strategy='%s'" % (strategy,), size=14)

        i += 1

plt.tight_layout()
plt.show()

결과 시각화

이제 다양한 전략을 데이터셋에 적용한 결과를 시각화합니다. 플롯은 이산화된 인코딩이 일정한 영역을 보여줍니다.

요약

이 실습에서는 Python scikit-learn 라이브러리의 KBinsDiscretizer 클래스에서 제공하는 다양한 전략을 탐색했습니다. 세 개의 데이터셋을 생성하고 각 데이터셋에 세 가지 다른 전략을 적용했습니다. 그런 다음 이산화 결과를 시각화했습니다.