소개
이 실습에서는 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.datasets의 make_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 클래스에서 제공하는 다양한 전략을 탐색했습니다. 세 개의 데이터셋을 생성하고 각 데이터셋에 세 가지 다른 전략을 적용했습니다. 그런 다음 이산화 결과를 시각화했습니다.