다양한 전략 적용
이제 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()