python笔记:使用数据结构的凝聚分层聚类

news/2024/5/20 5:59:27 标签: python, 聚类, 机器学习
  • 这个blog显示了使用连接图来捕获数据中的局部结构。在有局部结构的情况下凝聚分层聚类的结果

1 使用数据结构后,凝聚分层聚类的特点

  • 使用数据结构后,会有以下的特点:
    • 首先,没有连接矩阵的聚类比有连接矩阵的聚类要快。
    • 其次,当使用连接矩阵时,single linkage,average linkage, complete linkage的结果是不均衡的,往往会创建一些非常大的簇。
      • 在没有连接矩阵时:
        • single linkage仅考虑簇之间的最短距离,这可能导致两个不相近的簇因为极端点的相近,而被合并在一起
        • average linkage, complete linkage通过在合并时考虑两个簇之间的所有距离来对抗这种不合理的合并行为。
        •  
      •  使用了连接矩阵后:
        • 连接矩阵打破了average linkage和complete linkage的这种对抗机制,使它们类似于更脆弱的单一链接。
          • 尤其是对于非常稀疏的图(减少 kneighbors_graph 中的邻居数量,这种效果更为明显。
            • 图中的邻居数量非常少,会强加一个接近于single linkage的几何形状.
            • ——>使得average linkage和complete linkage退化成了single linkage

         

2 举例

2.1 数据集

python">import time
import matplotlib.pyplot as plt
import numpy as np
from sklearn.cluster import AgglomerativeClustering
from sklearn.neighbors import kneighbors_graph

# Generate sample data
n_samples = 1500
np.random.seed(0)
t = 1.5 * np.pi * (1 + 3 * np.random.rand(1, n_samples))
x = t * np.cos(t)
y = t * np.sin(t)

x.shape,y.shape
#((1, 1500), (1, 1500))
X = np.concatenate((x, y))
X.shape
#(2,1500)
X += 0.7 * np.random.randn(2, n_samples)
#加上一点噪声
X = X.T
plt.scatter(X[:,0],X[:,1])

2.2 创建联通图

python">knn_graph = kneighbors_graph(X, 30, include_self=False)
#每个点只和30个邻居连接

 2.3 凝聚型分层聚类

2.3.1 20个cluster,有无数据结构的对比

python">plt.figure(figsize=(10, 4))
for connectivity in (None, knn_graph):
    plt.figure(figsize=(10, 4))
    for index, linkage in enumerate(("average", "complete", "ward", "single")):
            plt.subplot(1, 4, index + 1)
            model = AgglomerativeClustering(
                linkage=linkage, 
                connectivity=connectivity, 
                n_clusters=30
            )
            t0 = time.time()
            model.fit(X)
            elapsed_time = time.time() - t0
            plt.scatter(X[:, 0], X[:, 1], c=model.labels_)
            plt.title(
                "linkage=%s\n(time %.2fs)" % (linkage, elapsed_time),
                fontdict=dict(verticalalignment="top"),
            )
            plt.axis("equal")
            #x,y坐标等长
            plt.axis("off")
            #不显示x,y坐标
            plt.subplots_adjust(bottom=0, top=0.83, wspace=0, left=0, right=1)
            plt.suptitle(
                "n_cluster=%i, connectivity=%r"
                % (n_clusters, connectivity is not None),
                size=17,
            )


​​​​​​​

 有数据结构后,average linkage和complete linkage效果都变差了

 2.3.2 3个cluster

参考内容:Agglomerative clustering with and without structure — scikit-learn 1.2.2 documentation 


http://www.niftyadmin.cn/n/183276.html

相关文章

【OpenCV技能树】——OpenCV中的深度学习

前言: 😊😊😊欢迎来到本博客😊😊😊 目前正在进行 OpenCV技能树的学习,OpenCV是学习图像处理理论知识比较好的一个途径,至少比看书本来得实在。本专栏文章主要记录学习Op…

人工智能交互革命:探索ChatGPT的无限可能 第13章ChatGPT的应用场景和创新应用

第13章ChatGPT的应用场景和创新应用 13.1ChatGPT在多语言交互中的应用 ChatGPT在多语言交互中也具有很大的应用潜力。随着全球化的发展,人们之间的交流和合作已经越来越频繁,这也导致了跨语言交流的需求不断增加。ChatGPT在这个领域中可以发挥重要的作用,它可以帮助人们跨…

云原生周刊:K8s 在 v1.27 中移除的特性和主要变更

文章推荐 K8s 在 v1.27 中移除的特性和主要变更 随着 Kubernetes 发展和成熟,为了此项目的整体健康,某些特性可能会被弃用、移除或替换为优化过的特性。基于目前在 v1.27 发布流程中获得的信息,本文将列举并描述一些计划在 Kubernetes v1.2…

【1092. 最短公共超序列】

来源:力扣(LeetCode) 描述: 给出两个字符串 str1 和 str2,返回同时以 str1 和 str2 作为子序列的最短字符串。如果答案不止一个,则可以返回满足条件的任意一个答案。 (如果从字符串 T 中删除…

记录一次索引未建立、继而引发一系列的问题、包含索引创建失败、虚拟机中JVM虚拟机内存满的情况

文章目录前言1、错误开始2、创建索引的过程需要使用分词器3、elasticsearch 内存溢出4、创建gulimall_product索引5、使用postman测试接口6、后语前言 项目是分布式微服务类型的,各种中间件跑在Centos7 虚拟机中。在进行商品服务检索的接口测试中,发现接…

2023年2月天猫平台面膜品牌销量排行榜(天猫销售数据分析)

随着居民经济收入的不断增加,人们对美的追求也不断提高,因此,人们也更加注重对皮肤的护理。面膜则是其中的一块大蛋糕。 根据鲸参谋平台数据显示,2023年2月在天猫平台上,面膜相关产品的月销量超过一千万件,…

Appium - 自动化测试框架 - 工作原理、环境搭建

在这里,我还给大家推荐一套app自动化测试的视频,比文字内容更容易理解! pythonAppium自动化测试框架【项目实战合集】,轻松掌握app高级自动化测试_哔哩哔哩_bilibilipythonAppium自动化测试框架【项目实战合集】,轻松…

脉诊(切脉、诊脉、按脉、持脉)之法——入门篇

认识脉诊何谓脉诊?脉诊的渊源脉诊重要吗?脉诊确有其事,还是故弄玄虚?中医科学吗?如何脉诊?寸口脉诊法何谓脉诊? 所谓脉诊,就是通过把脉来诊断身体健康状况的一种必要手段。 …