BIRCH 와 MiniBatchKMeans 비교

Beginner

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

소개

이 실험은 합성 데이터셋에서 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 알고리즘의 변형으로 대규모 데이터 세트를 효율적으로 클러스터링할 수 있습니다. 두 알고리즘 모두 데이터 세트를 적절한 시간 내에 클러스터링할 수 있었습니다.