Spec-Zone.ru › scikit-learn

Примечание

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

Иерархическое кластерирование: структурированное против неструктурированного метода Уорда

Пример создаёт набор данных «швейцарский рулон» и выполняет иерархическое кластерирование по их положению.

Для получения дополнительной информации см. Иерархическое кластерирование.

На первом шаге иерархическое кластерирование выполняется без ограничений связности на структуру и основано только на расстоянии, а на втором шаге кластеризация ограничена графом k-ближайших соседей: это иерархическое кластерирование со структурированным приоритетом.

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

# Authors: The scikit-learn developers
# SPDX-License-Identifier: BSD-3-Clause

import time as time

# The following import is required
# for 3D projection to work with matplotlib < 3.2
import mpl_toolkits.mplot3d  # noqa: F401
import numpy as np

Генерация данных

Мы начинаем с генерации набора данных «швейцарский рулон».

from sklearn.datasets import make_swiss_roll

n_samples = 1500
noise = 0.05
X, _ = make_swiss_roll(n_samples, noise=noise)
# Make it thinner
X[:, 1] *= 0.5

Вычисление кластеризации

Мы выполняем AgglomerativeClustering, которое относится к иерархическому кластерированию без каких-либо ограничений связности.

from sklearn.cluster import AgglomerativeClustering

print("Compute unstructured hierarchical clustering...")
st = time.time()
ward = AgglomerativeClustering(n_clusters=6, linkage="ward").fit(X)
elapsed_time = time.time() - st
label = ward.labels_
print(f"Elapsed time: {elapsed_time:.2f}s")
print(f"Number of points: {label.size}")
Compute unstructured hierarchical clustering...
Elapsed time: 0.04s
Number of points: 1500

Вывод результата

Отображение неструктурированных иерархических кластеров.

import matplotlib.pyplot as plt

fig1 = plt.figure()
ax1 = fig1.add_subplot(111, projection="3d", elev=7, azim=-80)
ax1.set_position([0, 0, 0.95, 1])
for l in np.unique(label):
    ax1.scatter(
        X[label == l, 0],
        X[label == l, 1],
        X[label == l, 2],
        color=plt.cm.jet(float(l) / np.max(label + 1)),
        s=20,
        edgecolor="k",
    )
_ = fig1.suptitle(f"Without connectivity constraints (time {elapsed_time:.2f}s)")
Without connectivity constraints (time 0.04s)

Определяем k-ближайших соседей с 10 соседями

from sklearn.neighbors import kneighbors_graph

connectivity = kneighbors_graph(X, n_neighbors=10, include_self=False)

Вычисление кластеризации

Мы снова выполняем AgglomerativeClustering с ограничениями связности.

print("Compute structured hierarchical clustering...")
st = time.time()
ward = AgglomerativeClustering(
    n_clusters=6, connectivity=connectivity, linkage="ward"
).fit(X)
elapsed_time = time.time() - st
label = ward.labels_
print(f"Elapsed time: {elapsed_time:.2f}s")
print(f"Number of points: {label.size}")
Compute structured hierarchical clustering...
Elapsed time: 0.06s
Number of points: 1500

Вывод результата

Отображение структурированных иерархических кластеров.

fig2 = plt.figure()
ax2 = fig2.add_subplot(121, projection="3d", elev=7, azim=-80)
ax2.set_position([0, 0, 0.95, 1])
for l in np.unique(label):
    ax2.scatter(
        X[label == l, 0],
        X[label == l, 1],
        X[label == l, 2],
        color=plt.cm.jet(float(l) / np.max(label + 1)),
        s=20,
        edgecolor="k",
    )
fig2.suptitle(f"With connectivity constraints (time {elapsed_time:.2f}s)")

plt.show()
With connectivity constraints (time 0.06s)

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

Launch binder
Launch JupyterLite

Download Jupyter notebook: plot_ward_structured_vs_unstructured.ipynb

Download Python source code: plot_ward_structured_vs_unstructured.py

Download zipped: plot_ward_structured_vs_unstructured.zip

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

Демонстрация структурированного иерархического кластерирования Уорда на изображении монет

Иерархическое кластерирование с и без структуры

Диаграмма дендрограммы иерархического кластерирования

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

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

Spec-Zone.ru

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