数字二维嵌入上的各种凝聚聚类#

此示例说明了在数字数据集的二维嵌入上,各种链接选项用于凝聚聚类的直观效果。

此示例的目标是直观地展示指标的行为方式,而不是为数字找到良好的聚类。这就是该示例在二维嵌入上运行的原因。

此示例向我们展示了凝聚聚类的“富者愈富”行为,这种行为倾向于创建不均匀的聚类大小。

这种行为对于平均链接策略来说更为明显,最终会导致几个聚类只有很少的数据点。

单链接的情况更加特殊,一个非常大的聚类覆盖了大多数数字,一个中等大小(干净)的聚类包含了大多数零数字,所有其他聚类都来自边缘周围的噪声点。

其他链接策略会导致更均匀分布的聚类,因此对数据集的随机重采样不太敏感。

  • ward linkage
  • average linkage
  • complete linkage
  • single linkage
Computing embedding
Done.
ward :  0.05s
average :       0.05s
complete :      0.05s
single :        0.02s

# Authors: Gael Varoquaux
# License: BSD 3 clause (C) INRIA 2014

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.578 秒)

相关示例

比较玩具数据集上不同的层次链接方法

比较玩具数据集上不同的层次链接方法

有结构和无结构的凝聚聚类

有结构和无结构的凝聚聚类

手写数字的流形学习:局部线性嵌入、等距映射…

手写数字的流形学习:局部线性嵌入、等距映射...

数字数据集

数字数据集

由 Sphinx-Gallery 生成的图库