iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >怎么用Python进行系统聚类分析
  • 244
分享到

怎么用Python进行系统聚类分析

2023-06-16 09:06:25 244人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

怎么用python进行系统聚类分析,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。在进行机器学习时,我们往往要对数据进行聚类分析,聚类,说白了就是把相似的样品点/

怎么用python进行系统聚类分析,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

在进行机器学习时,我们往往要对数据进行聚类分析,聚类,说白了就是把相似的样品点/数据点进行归类,相似度高的样品点会放在一起,这样一个样本就会被分成几类。而聚类分析也有很多种方法,比如分解法、加入法、有序样品的聚类、模糊聚类法以及系统聚类法等。而本文要介绍的就是系统聚类法,以及如何用Python来进行系统聚类分析。

首先来看一下系统聚类法的定义。系统聚类法(hierarchical clustering method),又叫分层聚类法,是目前最常用的聚类分析方法。其基本步骤如下:假设样本中有n个样品,那么就先将这n个样品看作n类,也就是一个样品一个类,然后将性质最接近的两类合并为一个新的类,这样就得到n-1个类,接着从中再找出最接近的两个类,让其进行合并,这样就变为n-2个类,让此过程持续进行下去,最后所有的样品都归为一类,把上述过程绘制成一张图,这个图就称为聚类图,从图中再决定分为多少类。其大致过程如图1所示。

怎么用Python进行系统聚类分析

图1. 系统聚类分析示意图

而这里我们要确定各个样品的相似度,才能将其归类,那么如何确定其相似度呢?通常我们用的方法是计算各个样品点之间的距离,然后再根据距离来分类。这里我们根据距离来分类,同样也是有几种方法的,比如最短距离法、最长距离法、重心法、类平均法以及ward法。下面我们对这几种方法进行一个简单的介绍。

1. 最短距离法

最短距离法就是从两个类中找出距离最短的两个样品点,如图2所示。点3和点7是类G1和类G2中距离最短的两个点。计算公式如图4所示。

怎么用Python进行系统聚类分析

图2. 最短距离法示意图

2. 最长距离法

最长距离法就是从两个类中找出距离最长的两个样品点,如图3所示。点1和点6是类G1和类G2中距离最长的两个点。计算公式如图4所示。

怎么用Python进行系统聚类分析

图3. 最长距离法示意图

3. 重心法

从物理的观点看,一个类用它的重心,也就是类样品的均值,来做代表比较合理,类之间的距离也就是重心之间的距离。若样品之间用欧氏距离,设某一步将类G1与G2合并成G3,它们各有n1、n2、n3个样品,其中n3=n1+n2,它们的重心用X1、X2和X3表示,则X3=1/n3(n1X1+n2X2)。重心法的计算公式参考图4。

4. 类平均法

这个顾名思义,就是取两个类之间所有点的距离的平均值。计算公式如图4所示。

怎么用Python进行系统聚类分析

图4. 常用的距离计算方法

5. 离差平方和法

离差平方和法又叫Ward法,其思想源于方差分析,即如果类分得正确,同类样品的离差平方和应当较小,类与类之间的离差平方和应该较大。计算公式如图4所示。

在了解了系统聚类法的基本知识以后,我们就用python代码来展示一下系统聚类法的具体使用。

首先还是导入各种库。

import numpy as np  from matplotlib import pyplot as plt  from scipy.cluster.hierarchy import dendrogram, linkage

接下来是生成数据集。我们这次用的数据集是随机生成的,数量也不多,一共15个数据点,分为两个数据簇,一个有7个数据点,另一个有8个。之所以把数据点数量设置这么少,是因为便于看清数据分布,以及后面画图时容易看清图片的分类。代码如下。

state = np.random.RandomState(99) #设置随机状态  a = state.multivariate_nORMal([10, 10], [[1, 3], [3, 11]], size=7)  #生成多元正态变量  b = state.multivariate_normal([-10, -10], [[1, 3], [3, 11]], size=8)  data = np.concatenate((a, b)) #把数据进行拼接

这里我们设置一个随机状态,便于重复试验。然后利用这个随机状态生成两个变量a和b,这两个变量就是前面说过的数据簇,a有7个数据点,b有8个,a和b都是多元正态变量,其中a的均值向量是[10, 10],b的均值向量是[-10, -10],两者协方差矩阵是[[1, 3], [3, 11]]。这里要注意的是协方差矩阵要是正定矩阵或半正定矩阵。然后对a与b进行拼接,得到变量data。

接下来要绘制数据点的分布。代码如下。

fig, ax = plt.subplots(figsize=(8,8)) #设置图片大小  ax.set_aspect('equal') #把两坐标轴的比例设为相等  plt.scatter(data[:,0], data[:,1])  plt.ylim([-30,30]) #设置Y轴数值范围  plt.xlim([-30,30])  plt.show()

这里代码比较简单,不再赘述,主要说一下ax.set_aspect('equal')这行代码,因为matplotlib默认情况下x轴和y轴的比例是不同的,也就是相同单位长度的线段,在显示时长度是不一样的,所以要把二者的比例设为一样,这样图片看起来更协调更准确。所绘制图片如图5所示,从图中可以明显看到两个数据簇,上面那个数据簇大概集中在坐标点[10, 10]附近,而下面那个大概集中在[-10, -10]附近,这和我们设置的是一样的。从图中可以很明显看出,这个数据集大概可以分为两类,即上面的数据簇分为一类,下面的数据簇分为另一类,但我们还要通过算法来计算一下。

怎么用Python进行系统聚类分析

图5. 所用数据分布图

然后是数据处理,代码如下。

z = linkage(data, "average") #用average算法,即类平均法

数据处理只有这一行代码,非常简单,但难点也就在这。首先我们来看一下z的结果,如图6所示。

怎么用Python进行系统聚类分析

图6. 聚类计算结果

很多人第一次看到这个结果都是一脸懵逼,甚至是n脸懵逼,但其实里面的道理很简单。scipy官方对此有一些设定,比如该结果中第一行有4个数字,即11、13、0.14740505、2,前两个数字就是指“类”,刚开始每个点就是一个类,所以11和13这两个点就是两个类,第三个数字0.14740505就是这两个点的距离,这两个点被合并成一个类,所以这个新的类包含两个点(11和13),这也就是第四个点的数值2,而这个新的类就被算为类15。注意这里是类15,不是第15个类,因为我们原来的数据集中有15个点,按照顺序就是类0、类1、类2...类14,因为python是从0开始,所以这里类15就是指第16个类。z的第二行数据里,前两个数字是2和5,就是原来类2和类5,距离是0.3131184,包含2个点,这行数据和第一行类似。然后再看第三行数据,前两个数字是10和15,就是类10与类15,类15就是前面第一行合并成的新类,其包含11和13这两个点,类15与类10的距离是0.39165998,这个数字是类11和13与类10的平均距离,因为我们这里用的算法是average,类10、11和13合并为了一个新类,其包含3个点,所以第四个数字就是3。z中其他行的数据按照此规律以此类推。最后一行数据中,类26和27合并成一个新类,这个类包含了全部15个点,也就是这15个点最终划为了一个类,算法终止。

接下来就是画图,代码如下,其结果如图7所示。

fig, ax = plt.subplots(figsize=(8,8))  dendrogram(z, leaf_font_size=14) #画图 plt.title("Hierachial Clustering Dendrogram")  plt.xlabel("Cluster label")  plt.ylabel("Distance")  plt.axhline(y=10) #画一条分类线  plt.show()

怎么用Python进行系统聚类分析

图7. 聚类结果图

从图中可以看出,这15个点可以分为两类,前面绿色的线连接的点代表一类,即点0到点6这7个点,后面红色的线连接的点代表第二类,即点7到点14这8个点。我们可以看到这个划分结果是非常正确的,和我们当时的设定是一样的。

系统聚类法的算法比较简单,实用性非常高,是目前使用最广泛的聚类方法,但该方法在处理极大数据量时会有所不足,所以最好配合其他算法来使用,同时使用者在使用时要根据自己的情况,来选择合适的距离计算方法。本文主要用类平均法来进行聚类操作,因为这个数据集非常简单,所以用其他距离计算方法得到的结果和这个是一样的。如果数据量比较大时,最终不同距离计算方法得到的结果可能不同,所以使用者要根据自己的情况来进行选择。

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注编程网Python频道,感谢您对编程网的支持。

--结束END--

本文标题: 怎么用Python进行系统聚类分析

本文链接: https://www.lsjlt.com/news/282949.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 怎么用Python进行系统聚类分析
    怎么用Python进行系统聚类分析,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。在进行机器学习时,我们往往要对数据进行聚类分析,聚类,说白了就是把相似的样品点/...
    99+
    2023-06-16
  • python聚类分析是什么
    这篇文章主要讲解了“python聚类分析是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“python聚类分析是什么”吧!何为聚类分析聚类分析或聚类是对一组对象进行分组的任务,使得同一组(...
    99+
    2023-06-25
  • 如何在PHP中进行自动分类和聚类分析?
    随着数据量逐渐增加,如何在PHP中进行自动分类和聚类分析成为了许多企业和个人用户的关注点。本文将介绍PHP中的分类和聚类分析技术,以帮助开发者更好地处理大量数据。一、 什么是自动分类和聚类分析?自动分类和聚类分析是一种常见的数据分析技术,可...
    99+
    2023-05-25
    PHP聚类分析 自动分类PHP PHP数据聚类
  • matlab聚类分析怎么实现
    在MATLAB中实现聚类分析,可以使用内建的`kmeans`函数。该函数接受一个输入数据集和一个指定的聚类数目作为输入,并返回数据点...
    99+
    2023-09-14
    matlab
  • spss聚类分析怎么操作
    SPSS的聚类分析可以通过以下步骤进行操作:1. 导入数据:打开SPSS软件,导入需要进行聚类分析的数据文件。可以通过菜单栏的“文件...
    99+
    2023-05-22
    spss聚类分析 spss
  • spss聚类分析怎么实现
    SPSS实现聚类分析的步骤如下:1. 打开SPSS软件并加载数据集。2. 在菜单栏中选择“分析”>“分类数据”>“K均值聚类”。3....
    99+
    2023-09-14
    spss
  • 怎么进行Linux系统内核架构分析
    这期内容当中小编将会给大家带来有关怎么进行Linux系统内核架构分析,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Linux系统中内核是一个非常重要的一部分,那么Linux内核具体是什么样子呢?下面本篇文...
    99+
    2023-06-28
  • 怎么用Python进行数据分析
    这篇文章主要讲解了“怎么用Python进行数据分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用Python进行数据分析”吧!评论情感倾向先调用百度AI来分析微博和b站的评论情感倾向。...
    99+
    2023-06-01
  • win10怎么进行系统分区
    这篇文章将为大家详细讲解有关win10怎么进行系统分区,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。我们将鼠标放在桌面左下角的开始图标上然后单击右键,在弹出的菜单中选择“磁盘管理”。在磁盘管理界面右键单击...
    99+
    2023-06-26
  • 如何进行Linux系统syslog分析
    如何进行Linux系统syslog分析,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一、日志系统之syslogsyslog是Linux系统中默认的日志守护进程,RHEL5上...
    99+
    2023-06-28
  • 怎么利用python进行数值分析
    小编给大家分享一下怎么利用python进行数值分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!一、准备噪声是在拟合过程中常用的干扰手段,常用的噪声:统一分布 U(a,b)f ( x ) = { 1 i f a ≤ x &...
    99+
    2023-06-15
  • 怎么用Python进行帕累托分析
    这篇文章主要介绍“怎么用Python进行帕累托分析”,在日常操作中,相信很多人在怎么用Python进行帕累托分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用Python进行帕累托分析”的疑惑有所帮助!...
    99+
    2023-06-15
  • 怎么使用Python进行数据分析
    使用Python进行数据分析可以通过以下几个步骤:1. 安装Python和相关库:首先需要安装Python解释器,推荐使用Anaco...
    99+
    2023-08-23
    Python
  • 怎么利用Python进行客户分群分析
    这篇文章主要讲解了“怎么利用Python进行客户分群分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么利用Python进行客户分群分析”吧!导入数据和python库import ...
    99+
    2023-07-05
  • python怎么使用tensorflow进行图像分类
    本文小编为大家详细介绍“python怎么使用tensorflow进行图像分类”,内容详细,步骤清晰,细节处理妥当,希望这篇“python怎么使用tensorflow进行图像分类”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习...
    99+
    2023-07-02
  • Python使用OpenCV和K-Means聚类对毕业照进行图像分割
    图像分割是将图像分割成多个不同区域(或片段)的过程。目标是将图像的表示变成更容易和更有意义的图像。 在这篇博客中,我们将看到一种图像分割方法,即K-Means Clustering。...
    99+
    2024-04-02
  • Linux系统要怎么进行分区
    Linux系统要怎么进行分区,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。linux分区方法,不同的人有不同的方法,反正没有统一的方法。在分区方面,我觉得根据自...
    99+
    2023-06-05
  • 如何进行java的io系统分析
    这篇文章将为大家详细讲解有关如何进行java的io系统分析,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一. Input和Output1. stream代表的是任何有能力产出数据的数据源,或...
    99+
    2023-06-03
  • 怎么使用Python进行同期群分析
    本篇内容主要讲解“怎么使用Python进行同期群分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么使用Python进行同期群分析”吧!同期群分析同期群分析概念同期群(Cohort)的字面意思...
    99+
    2023-07-05
  • Python怎么使用Pandas进行数据分析
    首先,确保您已经安装了Pandas库。如果没有,请使用以下命令安装:pip install pandas一. 导入Pandas库import pandas as pd二. 读取数据使用Pandas,可以方便地读取多种数据格式,包括CSV、E...
    99+
    2023-05-16
    Python Pandas
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作