【机器学习-11】 | Scikit-Learn工具包进阶指南:Scikit-Learn工具包之不同度量的聚集聚类、归纳聚类、光学聚类算法的演示以及BIRCH和MiniBatchKMeans的比较分析

🎩 欢迎来到技术探索的奇幻世界👨‍💻

📜 个人主页@一伦明悦-CSDN博客

✍🏻 作者简介: C++软件开发、Python机器学习爱好者

🗣️ 互动与支持💬评论      👍🏻点赞      📂收藏     👀关注+

如果文章有所帮助,欢迎留下您宝贵的评论,

点赞加收藏支持我,点击关注,一起进步!

引言                        

       Scikit-Learn工具包提供了多种聚类算法,涵盖了不同的聚类方法和应用场景。下面将对聚集聚类、归纳聚类、光学聚类算法进行简要介绍,并对BIRCH和MiniBatchKMeans进行比较分析。

聚集聚类(Agglomerative Clustering)

聚集聚类是一种基于层次的聚类方法,它通过迭代地将最为相似的样本或聚类合并来构建聚类的层次结构。具体步骤包括:

  1. 初始阶段:每个样本被视为一个单独的聚类。
  2. 迭代合并:根据某种相似性度量(如欧氏距离),合并最为相似的两个聚类,直到满足停止条件。

Scikit-Learn中的实现为AgglomerativeClustering,支持不同的链接类型(如单链接、完全链接、平均链接)和距离计算方法。

归纳聚类(DBSCAN)

归纳聚类(Density-Based Spatial Clustering of Applications with Noise)是一种基于密度的聚类算法,它能够发现任意形状的聚类,并能处理噪声点。主要特点包括:

  • 核心对象:周围存在足够密度的点被视为核心对象。
  • 直接密度可达:如果一个点可以通过核心对象的邻域达到另一个点,则认为它们在同一聚类中。

在Scikit-Learn中,DBSCAN是其实现,通过eps参数定义邻域大小,min_samples参数定义核心对象所需的最小样本数。

光学聚类(Optics)

光学聚类是另一种基于密度的聚类算法,与DBSCAN相似但提供了更大的灵活性,能够捕捉不同密度级别的聚类结构。主要特点包括:

  • 核心距离:类似于DBSCAN中的eps,定义了核心对象的邻域大小。
  • 最小样本数:定义形成聚类所需的最小核心对象数。

光学聚类能够生成聚类的层次结构,通过OPTICS类实现。

BIRCH和MiniBatchKMeans的比较分析

BIRCH(Balanced Iterative Reducing and Clustering using Hierarchies) 和 MiniBatchKMeans 是两种不同的聚类算法,适用于大规模数据集的聚类任务。

  • BIRCH

    • 特点:基于层次的聚类算法,通过聚类特征树(CF树)和层次的聚类结构有效处理大规模数据。
    • 优点:对大型数据集的处理效率高,能够在内存受限的情况下进行聚类。
    • 适用场景:适合于需要处理大量数据并且对聚类速度有较高要求的场景。
  • MiniBatchKMeans

    • 特点:是K均值聚类的一种变体,通过随机小批量(mini-batch)数据来更新聚类中心,从而加快收敛速度。
    • 优点:适合大规模数据集,尤其是在内存和计算资源有限的情况下能够快速进行聚类。
    • 适用场景:处理大规模数据并且要求较快的聚类速度时特别有效。

正文

01-不同度量的聚集聚类                         

       聚集聚类是一种基于层次的聚类方法,它从每个样本开始,逐步合并具有最小距离的一对聚类,直到达到预先指定的聚类数量或达到某个停止条件。在这段代码中,使用的是凝聚层次聚类(Agglomerative Clustering),其中的不同度量通常包括以下几种:

  1. Ward Linkage:
    Ward Linkage 是一种聚合准则,它选择合并两个聚类的标准是最小化合并后聚类的总内方差增加。这种方法在实践中通常表现良好,特别是对于球状簇的数据。

  2. Complete Linkage:
    Complete Linkage 选择合并两个聚类的标准是两个聚类中最远距离的样本之间的距离。这种方法更倾向于形成大小相等且密集的聚类。

  3. Single Linkage:
    Single Linkage 选择合并两个聚类的标准是两个聚类中最近距离的样本之间的距离。这种方法可能会形成长条状的聚类,对噪声和离群点敏感。

  4. Average Linkage:
    Average Linkage 选择合并两个聚类的标准是两个聚类中所有样本之间的平均距离。这种方法在大多数情况下都能产生较好的聚类效果。

在代码中,使用的是 Ward Linkage,它是 Agglomerative Clustering 默认的聚合准则。这种聚类方法在第一个子图中展示了数据的聚类结果,其中不同颜色代表不同的聚类簇。

这段代码展示了如何使用Python中的scikit-learn库进行凝聚层次聚类(Agglomerative Clustering)以及可视化聚类结果和距离矩阵。让我们逐步解释每个部分的功能和意图:

数据生成

# Generate waveform data
n_features = 2000
t = np.pi * np.linspace(0, 1, n_features)

def sqr(x):
    return np.sign(np.cos(x))

X = list()
y = list()
for i, (phi, a) in enumerate([(.5, .15), (.5, .6), (.3, .2)]):
    for _ in range(30):
        phase_noise = .01 * np.random.normal()
        amplitude_noise = .04 * np.random.normal()
        additional_noise = 1 - 2 * np.random.rand(n_features)
        additional_noise[np.abs(additional_noise) < .997] = 0

        X.append(12 * ((a + amplitude_noise)
                 * (sqr(6 * (t + phi + phase_noise)))
                 + additional_noise))
        y.append(i)

X = np.array(X)
y = np.array(y)
  • 这部分代码生成了包含三种波形的合成数据。每种波形重复生成30次,每次添加不同的噪声,最终得到包含三种波形数据的X和对应的标签y。

可视化 Ground Truth

plt.figure()
plt.axes([0, 0, 1, 1])
for l, c, n in zip(range(n_clusters), 'rgb',
                   labels):
    lines = plt.plot(X[y == l].T, c=c, alpha=.5)
    lines[0].set_label(n)

plt.legend(loc='best')

plt.axis('tight')
plt.axis('off')
plt.suptitle("Ground truth", size=20)
plt.savefig("../3.png", dpi=500)
  • 这部分代码绘制了数据的地面真实标签(Ground Truth),显示了每个波形的数据示例。每种波形用不同颜色表示,有助于理解数据的分布和真实标签。

距离矩阵的可视化

for index, metric in enumerate(["cosine", "euclidean", "cityblock"]):
    avg_dist = np.zeros((n_clusters, n_clusters))
    plt.figure(figsize=(5, 4.5))
    for i in range(n_clusters):
        for j in range(n_clusters):
            avg_dist[i, j] = pairwise_distances(X[y == i], X[y == j],
                                                metric=metric).mean()
    avg_dist /= avg_dist.max()
    for i in range(n_clusters):
        for j in range(n_clusters
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一伦明悦

感谢,您的支持是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值