소개
이 실험은 합성 데이터셋에서 BIRCH 와 MiniBatchKMeans 라는 두 가지 클러스터링 알고리즘의 시간을 비교합니다. 두 알고리즘 모두 확장 가능하며 대규모 데이터셋을 효율적으로 클러스터링할 수 있습니다. 합성 데이터셋은 make_blobs 를 사용하여 생성된 25,000 개의 샘플과 두 개의 특징을 가지고 있습니다.
VM 팁
VM 시작이 완료되면 왼쪽 상단 모서리를 클릭하여 Notebook 탭으로 전환하여 연습을 위한 Jupyter Notebook에 접근할 수 있습니다.
때때로 Jupyter Notebook 이 완전히 로드되기까지 몇 초 정도 기다려야 할 수 있습니다. Jupyter Notebook 의 제한으로 인해 작업의 유효성 검사를 자동화할 수 없습니다.
학습 중 문제가 발생하면 Labby 에 문의하십시오. 세션 후 피드백을 제공하면 문제를 신속하게 해결해 드리겠습니다.
라이브러리 가져오기
첫 번째 단계는 필요한 라이브러리를 가져오는 것입니다. 다음 라이브러리를 가져올 것입니다:
- numpy
- matplotlib
- sklearn
from joblib import cpu_count
from itertools import cycle
from time import time
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.colors as colors
from sklearn.cluster import Birch, MiniBatchKMeans
from sklearn.datasets import make_blobs
Blob 생성
다음 단계는 MiniBatchKMeans 와 BIRCH 간의 비교를 위해 Blob 을 생성하는 것입니다. matplotlib 에서 기본적으로 제공하는 모든 색상을 사용할 것입니다.
## Blob 의 중심을 생성하여 10 x 10 그리드를 형성합니다.
xx = np.linspace(-22, 22, 10)
yy = np.linspace(-22, 22, 10)
xx, yy = np.meshgrid(xx, yy)
n_centers = np.hstack((np.ravel(xx)[:, np.newaxis], np.ravel(yy)[:, np.newaxis]))
## MiniBatchKMeans 와 BIRCH 간의 비교를 위해 Blob 을 생성합니다.
X, y = make_blobs(n_samples=25000, centers=n_centers, random_state=0)
## matplotlib 에서 기본적으로 제공하는 모든 색상을 사용합니다.
colors_ = cycle(colors.cnames.keys())
BIRCH 모델
세 번째 단계는 최종 클러스터링 단계를 포함하고 제외한 BIRCH 를 사용하여 클러스터링을 계산하고 플롯하는 것입니다. 전역 클러스터링 단계를 포함하지 않은 BIRCH 모델과 포함한 BIRCH 모델을 각각 생성합니다.
## 최종 클러스터링 단계를 포함하고 제외한 BIRCH 를 사용하여 클러스터링을 계산하고 플롯합니다.
birch_models = [
Birch(threshold=1.7, n_clusters=None),
Birch(threshold=1.7, n_clusters=100),
]
final_step = ["전역 클러스터링 없음", "전역 클러스터링 있음"]
for ind, (birch_model, info) in enumerate(zip(birch_models, final_step)):
t = time()
birch_model.fit(X)
print("BIRCH %s 최종 단계는 %0.2f 초가 걸렸습니다" % (info, (time() - t)))
## 결과 플롯
labels = birch_model.labels_
centroids = birch_model.subcluster_centers_
n_clusters = np.unique(labels).size
print("n_clusters : %d" % n_clusters)
ax = fig.add_subplot(1, 3, ind + 1)
for this_centroid, k, col in zip(centroids, range(n_clusters), colors_):
mask = labels == k
ax.scatter(X[mask, 0], X[mask, 1], c="w", edgecolor=col, marker=".", alpha=0.5)
if birch_model.n_clusters is None:
ax.scatter(this_centroid[0], this_centroid[1], marker="+", c="k", s=25)
ax.set_ylim([-25, 25])
ax.set_xlim([-25, 25])
ax.set_autoscaley_on(False)
ax.set_title("BIRCH %s" % info)
MiniBatchKMeans 모델
네 번째 단계는 MiniBatchKMeans 를 사용하여 클러스터링을 계산하는 것입니다. 모델을 데이터 세트에 맞추고 MiniBatchKMeans 실행 시간을 출력합니다.
## MiniBatchKMeans 를 사용하여 클러스터링을 계산합니다.
mbk = MiniBatchKMeans(
init="k-means++",
n_clusters=100,
batch_size=256 * cpu_count(),
n_init=10,
max_no_improvement=10,
verbose=0,
random_state=0,
)
t0 = time()
mbk.fit(X)
t_mini_batch = time() - t0
print("MiniBatchKMeans 실행 시간 %0.2f 초" % t_mini_batch)
mbk_means_labels_unique = np.unique(mbk.labels_)
ax = fig.add_subplot(1, 3, 3)
for this_centroid, k, col in zip(mbk.cluster_centers_, range(n_clusters), colors_):
mask = mbk.labels_ == k
ax.scatter(X[mask, 0], X[mask, 1], marker=".", c="w", edgecolor=col, alpha=0.5)
ax.scatter(this_centroid[0], this_centroid[1], marker="+", c="k", s=25)
ax.set_xlim([-25, 25])
ax.set_ylim([-25, 25])
ax.set_title("MiniBatchKMeans")
ax.set_autoscaley_on(False)
plt.show()
요약
이 실험에서는 합성 데이터 세트에서 두 가지 클러스터링 알고리즘, BIRCH 와 MiniBatchKMeans 의 처리 시간을 비교했습니다. BIRCH 는 계층적 클러스터링 알고리즘으로 대규모 데이터 세트를 효율적으로 클러스터링할 수 있습니다. MiniBatchKMeans 는 KMeans 알고리즘의 변형으로 대규모 데이터 세트를 효율적으로 클러스터링할 수 있습니다. 두 알고리즘 모두 데이터 세트를 적절한 시간 내에 클러스터링할 수 있었습니다.