当前位置:

首页 > 编程开发 > 使用树状图可视化聚类

使用树状图可视化聚类

一般情况下,我们都是使用散点图进行聚类可视化,但是某些的聚类算法可视化时散点图并不理想,所以在这篇文章中,我们介绍如何使用树状图(Dendrograms)对我们的聚类结果进行可视化。树状图树状图是显示对象、组或变量之间的层次关系的图表。树状图由在节点或簇处连接的分支组成,它们代表具有相似特征的观察组。分支的高度或节点之间的距离表示组之间的不同或相似程度。也就是说分支越长或节点之间的距离越大,组就越不相似。分支越短或节点之间的距离越小,组越相似。树状图对于可视化复杂的数据结构和识别具有相似特征的数据子组或簇

本文目录

    一般情况下,我们都是使用散点图进行聚类可视化,但是某些的聚类算法可视化时散点图并不理想,所以在这篇文章中,我们介绍如何使用树状图(Dendrograms)对我们的聚类结果进行可视化。

    树状图

    树状图是显示对象、组或变量之间的层次关系的图表。树状图由在节点或簇处连接的分支组成,它们代表具有相似特征的观察组。分支的高度或节点之间的距离表示组之间的不同或相似程度。也就是说分支越长或节点之间的距离越大,组就越不相似。分支越短或节点之间的距离越小,组越相似。

    树状图对于可视化复杂的数据结构和识别具有相似特征的数据子组或簇很有用。它们通常用于生物学、遗传学、生态学、社会科学和其他可以根据相似性或相关性对数据进行分组的领域。

    背景知识:

    “树状图”一词来自希腊语“dendron”(树)和“gramma”(绘图)。1901年,英国数学家和统计学家卡尔皮尔逊用树状图来显示不同植物种类之间的关系。他称这个图为“聚类图”。这可以被认为是树状图的首次使用。

    数据准备

    我们将使用几家公司的真实股价来进行聚类。为了方便获取,所以使用 Alpha Vantage 提供的免费 API 来收集数据。Alpha Vantage同时提供免费 API 和高级 API,通过API访问需要密钥,请参考他的网站。

    import pandas as pd
     import requests
     
     companies={'Apple':'AAPL','Amazon':'AMZN','Facebook':'META','Tesla':'TSLA','Alphabet (Google)':'GOOGL','Shell':'SHEL','Suncor Energy':'SU',
    'Exxon Mobil Corp':'XOM','Lululemon':'LULU','Walmart':'WMT','Carters':'CRI','Childrens Place':'PLCE','TJX Companies':'TJX',
    'Victorias Secret':'VSCO','MACYs':'M','Wayfair':'W','Dollar Tree':'DLTR','CVS Caremark':'CVS','Walgreen':'WBA','Curaleaf':'CURLF'}

    科技、零售、石油和天然气以及其他行业中挑选了 20 家公司。

    import time
     
     all_data={}
     for key,value in companies.items():
     # Replace YOUR_API_KEY with your Alpha Vantage API key
     url = f'https://www.alphavantage.co/query?function=TIME_SERIES_DAILY_ADJUSTED&symbol={value}&apikey=&outputsize=full'
     response = requests.get(url)
     data = response.json()
     time.sleep(15)
     if 'Time Series (Daily)' in data and data['Time Series (Daily)']:
     df = pd.DataFrame.from_dict(data['Time Series (Daily)'], orient='index')
     print(f'Received data for {key}')
     else:
     print("Time series data is empty or not available.")
     df.rename(columns = {'1. open':key}, inplace = True)
     all_data[key]=df[key]

    在上面的代码在 API 调用之间设置了 15 秒的暂停,这样可以保证不会因为太频繁被封掉。

    # find common dates among all data frames
     common_dates = None
     for df_key, df in all_data.items():
     if common_dates is None:
     common_dates = set(df.index)
     else:
     common_dates = common_dates.intersection(df.index)
     
     common_dates = sorted(list(common_dates))
     
     # create new data frame with common dates as index
     df_combined = pd.DataFrame(index=common_dates)
     
     # reindex each data frame with common dates and concatenate horizontally
     for df_key, df in all_data.items():
     df_combined = pd.concat([df_combined, df.reindex(common_dates)], axis=1)

    将上面的数据整合成我们需要的DF,下面就可以直接使用了

    层次聚类

    层次聚类(Hierarchical clustering)是一种用于机器学习和数据分析的聚类算法。它使用嵌套簇的层次结构,根据相似性将相似对象分组到簇中。该算法可以是聚集性的可以从单个对象开始并将它们合并成簇,也可以是分裂的,从一个大簇开始并递归地将其分成较小的簇。

    需要注意的是并非所有聚类方法都是层次聚类方法,只能在少数聚类算法上使用树状图。

    聚类算法我们将使用 scipy 模块中提供的层次聚类。

    1、自上而下聚类

    import numpy as np
     import scipy.cluster.hierarchy as sch
     import matplotlib.pyplot as plt
     
     # Convert correlation matrix to distance matrix
     dist_mat = 1 - df_combined.corr()
     
     # Perform top-down clustering
     clustering = sch.linkage(dist_mat, method='complete')
     cuts = sch.cut_tree(clustering, n_clusters=[3, 4])
     
     # Plot dendrogram
     plt.figure(figsize=(10, 5))
     sch.dendrogram(clustering, labels=list(df_combined.columns), leaf_rotation=90)
     plt.title('Dendrogram of Company Correlations (Top-Down Clustering)')
     plt.xlabel('Companies')
     plt.ylabel('Distance')
     plt.show()

    使用树状图可视化聚类

    如何根据树状图确定最佳簇数

    找到最佳簇数的最简单方法是查看生成的树状图中使用的颜色数。最佳簇的数量比颜色的数量少一个就可以了。所以根据上面这个树状图,最佳聚类的数量是两个。

    另一种找到最佳簇数的方法是识别簇间距离突然变化的点。这称为“拐点”或“肘点”,可用于确定最能捕捉数据变化的聚类数量。上面图中我们可以看到,不同数量的簇之间的最大距离变化发生在 1 和 2 个簇之间。因此,再一次说明最佳簇数是两个。

    从树状图中获取任意数量的簇

    使用树状图的一个优点是可以通过查看树状图将对象聚类到任意数量的簇中。例如,需要找到两个聚类,可以查看树状图上最顶部的垂直线并决定聚类。比如在这个例子中,如果需要两个簇,那么第一个簇中有四家公司,第二个集群中有 16 个公司。如果我们需要三个簇就可以将第二个簇进一步拆分为 11 个和 5 个公司。如果需要的更多可以依次类推。

    2、自下而上聚类

    import numpy as np
     import scipy.cluster.hierarchy as sch
     import matplotlib.pyplot as plt
     
     # Convert correlation matrix to distance matrix
     dist_mat = 1 - df_combined.corr()
     
     # Perform bottom-up clustering
     clustering = sch.linkage(dist_mat, method='ward')
     
     # Plot dendrogram
     plt.figure(figsize=(10, 5))
     sch.dendrogram(clustering, labels=list(df_combined.columns), leaf_rotation=90)
     plt.title('Dendrogram of Company Correlations (Bottom-Up Clustering)')
     plt.xlabel('Companies')
     plt.ylabel('Distance')
     plt.show()

    使用树状图可视化聚类

    我们为自下而上的聚类获得的树状图类似于自上而下的聚类。最佳簇数仍然是两个(基于颜色数和“拐点”方法)。但是如果我们需要更多的集群,就会观察到一些细微的差异。这也很正常,因为使用的方法不一样,导致结果会有一些细微的差异。

    总结

    树状图是可视化复杂数据结构和识别具有相似特征的数据子组或簇的有用工具。在本文中,我们使用层次聚类方法来演示如何创建树状图以及如何确定最佳聚类数。对于我们的数据树状图有助于理解不同公司之间的关系,但它们也可以用于其他各种领域,以理解数据的层次结构。

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    编程开发
    相关文章 更多
    腾讯智能体开源升级,关键科技全面开放
    腾讯智能体开源升级,关键科技全面开放

    不谈智能体,客户都不见你。腾讯云副总裁、腾讯云智能负责人、腾讯优图实验室负责人吴运声在采访中坦言。这意味着,如今提供云服务,若没有智能体相关的硬核能力,已难以打动客户。在2025腾讯全球数字生态大会上,腾讯云给出了自己的回应:正式发布智能体开发平台3.0(ADP3.0),并宣布腾讯优图实验室的关键智能体技术将逐步开源。据悉,该版本历经近三个月集中迭代,累计上线近600项功能,在RAG能力、Workflow流程、多智能体协作、应用评测及插件生态等方面实现全面升级。更值得关注的是,腾讯云透露未来数月将持续开源

    使用golang框架提升软件工程效率
    使用golang框架提升软件工程效率

    使用Go框架可以极大地提升软件工程效率,主要通过提供可重复使用的组件、提高可测试性、增强安全性以及提高可维护性来实现这些好处。流行的Go框架包括Gin、GORM和Echo,可用于快速开发和部署应用程序。

    PHP与MariaDB数据库开发
    PHP与MariaDB数据库开发

    PHP语言及MariaDB数据库开发是现代Web开发中最为流行的技术之一。PHP语言是一个开源的服务器端脚本语言,MariaDB是一个开源关系型数据库管理系统,二者的结合可以帮助开发者构建高效且功能完善的Web应用程序。在本文中,我们将详细介绍PHP与MariaDB数据库的开发,同时探讨它们的优势与适用场景。PHP语言PHP语言是一种服务器端脚本语言,可嵌入

    Go语言Web框架盘点:选择最适合你的开发利器
    Go语言Web框架盘点:选择最适合你的开发利器

    Go语言在近几年的发展势头迅猛,成为众多开发者钟爱的编程语言之一。在Go语言的生态系统中,Web开发领域也有着丰富的选择。不同的Web框架针对不同的需求和场景,本文将带您盘点几款主流的Go语言Web框架,帮助您选择最适合自己的开发利器。1.GinGin是目前最受欢迎的Go语言Web框架之一,它的设计简洁高效,拥有强大的路由功能和中间件支持。以下是一个简单的

    PHP中的智能交通系统的开发
    PHP中的智能交通系统的开发

    随着城市化进程的不断加速以及机动车数量的不断增加,交通拥堵已经成为了城市化进程中一个值得注意的问题。为了缓解这一现象,智能交通系统得以应运而生。随着物联网技术、云计算技术、大数据技术等先进技术的发展,智能交通系统正在不断地加强和完善。本文将讨论智能交通系统中PHP开发的应用。一、智能交通系统概述智能交通系统是一个集信息、通信、控制、管理等多种技术于一体的智能

    异常处理如何通过简化 C++ 代码的调试过程来提高开发效率?
    异常处理如何通过简化 C++ 代码的调试过程来提高开发效率?

    异常处理允许C++程序处理错误,例如文件打开失败或内存分配失败。它通过抛出异常对象来报告错误,并在代码中使用try-catch块来捕获和处理这些异常。异常处理使错误处理更加清晰、代码更健壮并简化了调试。

    PHP开发技巧:正确处理代码末尾分号的情况
    PHP开发技巧:正确处理代码末尾分号的情况

    PHP开发技巧:正确处理代码末尾分号的情况在PHP开发过程中,分号是每行代码的结束符号,它的存在对代码的正确性至关重要。在编写PHP代码时,经常会遇到一些情况需要注意代码末尾分号的处理,否则可能会导致语法错误或程序运行异常。本文将介绍一些常见的情况,并提供具体的代码示例,帮助开发者正确处理代码末尾分号,确保代码的稳定性和可靠性。情况一:条件语句和循环语句在P

    PHP开发实战:快速实现月份转换为中文
    PHP开发实战:快速实现月份转换为中文

    PHP开发实战:快速实现月份转换为中文在日常的PHP开发中,经常会遇到将月份从数字转换为中文的需求,特别是在一些日期相关的功能中。为了简化开发流程,我们可以编写一个小型的函数来快速实现月份的中文转换,让代码更易读且提高可维护性。在PHP中,我们可以使用数组来存储月份的中文表示,然后根据数字索引来获取对应的中文月份。下面是一个示例代码,演示了如何实现月份转换为

    PHP开发商城中的商品规格弹窗选择功能实现步骤
    PHP开发商城中的商品规格弹窗选择功能实现步骤

    PHP开发商城中的商品规格弹窗选择功能实现步骤摘要:本文将介绍如何使用PHP开发商城中的商品规格弹窗选择功能。首先,我们需要建立一个商品规格表,然后通过AJAX和JavaScript实现弹窗选择功能。最后,我们需要在后台代码中处理规格选择相关的数据以实现完整的功能。本文将详细描述这些步骤。一、建立商品规格表在数据库中建立一个商品规格表,包含规格ID、规格名称

    PHP开发商城中的地址自动补全功能实现方法
    PHP开发商城中的地址自动补全功能实现方法

    PHP开发商城中的地址自动补全功能实现方法作为一种常用的开发语言,PHP广泛应用于商城网站的开发中。在一个商城网站中,地址是一个非常重要的信息,用户在填写收货地址的时候,经常会因为繁琐的填写而感到不便,而且很容易出错。为了提升用户的体验,可以在地址填写的过程中提供地址自动补全的功能,使用户只需要输入部分地址信息,系统就能智能地为其补全相关的地址选项,极大地提

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程
    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    Mac软件 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    Aperty macOS版
    Aperty macOS版
    macOS

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    WINDOWS 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    PixTV 网页版
    PixTV 网页版
    Windows

    PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。