Spec-Zone.ru › scikit-learn

Примечание

Перейти к концу для загрузки полного примера кода. или для запуска этого примера в вашем браузере через JupyterLite или Binder

Различные методы агломеративного кластеризации на 2D вложении данных о цифрах

Иллюстрация различных вариантов связывания для агломеративной кластеризации на 2D вложении набора данных о цифрах.

Цель этого примера — наглядно показать, как ведут себя метрики, а не найти хорошие кластеры для цифр. Вот почему пример работает на 2D вложении.

Этот пример демонстрирует поведение «богатые становятся богаче» агломеративной кластеризации, которая имеет тенденцию создавать кластеры с неравномерными размерами.

Это поведение выражено для стратегии среднего связывания, которая приводит к нескольким кластерам с небольшим количеством точек данных.

Случай одиночного связывания ещё более патологичен с очень большим кластером, охватывающим большинство цифр, кластером промежуточного размера (чистым) с большинством нулей и всеми другими кластерами, сформированными из шумовых точек по краям.

Другие стратегии связывания приводят к более равномерно распределённым кластерам, поэтому они, вероятно, менее чувствительны к случайной передискретизации набора данных.

  • ward linkage
  • average linkage
  • complete linkage
  • single linkage
Computing embedding
Done.
ward :  0.05s
average :       0.05s
complete :      0.05s
single :        0.03s
# Authors: The scikit-learn developers
# SPDX-License-Identifier: BSD-3-Clause

from time import time

import numpy as np
from matplotlib import pyplot as plt

from sklearn import datasets, manifold

digits = datasets.load_digits()
X, y = digits.data, digits.target
n_samples, n_features = X.shape

np.random.seed(0)


# ----------------------------------------------------------------------
# Visualize the clustering
def plot_clustering(X_red, labels, title=None):
    x_min, x_max = np.min(X_red, axis=0), np.max(X_red, axis=0)
    X_red = (X_red - x_min) / (x_max - x_min)

    plt.figure(figsize=(6, 4))
    for digit in digits.target_names:
        plt.scatter(
            *X_red[y == digit].T,
            marker=f"${digit}$",
            s=50,
            c=plt.cm.nipy_spectral(labels[y == digit] / 10),
            alpha=0.5,
        )

    plt.xticks([])
    plt.yticks([])
    if title is not None:
        plt.title(title, size=17)
    plt.axis("off")
    plt.tight_layout(rect=[0, 0.03, 1, 0.95])


# ----------------------------------------------------------------------
# 2D embedding of the digits dataset
print("Computing embedding")
X_red = manifold.SpectralEmbedding(n_components=2).fit_transform(X)
print("Done.")

from sklearn.cluster import AgglomerativeClustering

for linkage in ("ward", "average", "complete", "single"):
    clustering = AgglomerativeClustering(linkage=linkage, n_clusters=10)
    t0 = time()
    clustering.fit(X_red)
    print("%s :\t%.2fs" % (linkage, time() - t0))

    plot_clustering(X_red, clustering.labels_, "%s linkage" % linkage)


plt.show()

Общее время выполнения скрипта: (0 минут 1,556 секунды)

Launch binder
Launch JupyterLite

Download Jupyter notebook: plot_digits_linkage.ipynb

Download Python source code: plot_digits_linkage.py

Download zipped: plot_digits_linkage.zip

Связанные примеры

Сравнение различных методов связывания иерархической кластеризации на наборах данных

Агломеративная кластеризация со структурой и без неё

Обучение на основе многообразия для рукописных цифр: Локально-линейное вложение, изомапа…

Визуализация структуры фондового рынка

© 2007–2025 The scikit-learn developers
Licensed under the 3-clause BSD License.
https://scikit-learn.org/1.6/auto_examples/cluster/plot_digits_linkage.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API