-
2020-02-07 14:08:40
这篇文章主要介绍了Python聚类算法之凝聚层次聚类的原理与具体使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
本文实例讲述了Python聚类算法之凝聚层次聚类。分享给大家供大家参考,具体如下:凝聚层次聚类:所谓凝聚的,指的是该算法初始时,将每个点作为一个簇,每一步合并两个最接近的簇。另外即使到最后,对于噪音点或是离群点也往往还是各占一簇的,除非过度合并。对于这里的“最接近”,有下面三种定义。我在实现是使用了MIN,该方法在合并时,只要依次取当前最近的点对,如果这个点对当前不在一个簇中,将所在的两个簇合并就行:
单链(MIN):定义簇的邻近度为不同两个簇的两个最近的点之间的距离。
全链(MAX):定义簇的邻近度为不同两个簇的两个最远的点之间的距离。
组平均:定义簇的邻近度为取自两个不同簇的所有点对邻近度的平均值。scoding=utf-8 # Agglomerative Hierarchical Clustering(AHC) import pylab as pl from operator import itemgetter from collections import OrderedDict,Counter points = [[int(eachpoint.split('#')[0]), int(eachpoint.split('#')[1])] for eachpoint in open("points","r")] # 初始时每个点指派为单独一簇 groups = [idx for idx in range(len(points))] # 计算每个点对之间的距离 disP2P = {} for idx1,point1 in enumerate(points): for idx2,point2 in enumerate(points): if (idx1 < idx2): distance = pow(abs(point1[0]-point2[0]),2) + pow(abs(point1[1]-point2[1]),2) disP2P[str(idx1)+"#"+str(idx2)] = distance # 按距离降序将各个点对排序 disP2P = OrderedDict(sorted(disP2P.iteritems(), key=itemgetter(1), reverse=True)) # 当前有的簇个数 groupNum = len(groups) # 过分合并会带入噪音点的影响,当簇数减为finalGroupNum时,停止合并 finalGroupNum = int(groupNum*0.1) while groupNum > finalGroupNum: # 选取下一个距离最近的点对 twopoins,distance = disP2P.popitem() pointA = int(twopoins.split('#')[0]) pointB = int(twopoins.split('#')[1]) pointAGroup = groups[pointA] pointBGroup = groups[pointB] # 当前距离最近两点若不在同一簇中,将点B所在的簇中的所有点合并到点A所在的簇中,此时当前簇数减1 if(pointAGroup != pointBGroup): for idx in range(len(groups)): if groups[idx] == pointBGroup: groups[idx] = pointAGroup groupNum -= 1 # 选取规模最大的3个簇,其他簇归为噪音点 wantGroupNum = 3 finalGroup = Counter(groups).most_common(wantGroupNum) finalGroup = [onecount[0] for onecount in finalGroup] dropPoints = [points[idx] for idx in range(len(points)) if groups[idx] not in finalGroup] # 打印规模最大的3个簇中的点 group1 = [points[idx] for idx in xrange(len(points)) if groups[idx]==finalGroup[0]] group2 = [points[idx] for idx in xrange(len(points)) if groups[idx]==finalGroup[1]] group3 = [points[idx] for idx in xrange(len(points)) if groups[idx]==finalGroup[2]] pl.plot([eachpoint[0] for eachpoint in group1], [eachpoint[1] for eachpoint in group1], 'or') pl.plot([eachpoint[0] for eachpoint in group2], [eachpoint[1] for eachpoint in group2], 'oy') pl.plot([eachpoint[0] for eachpoint in group3], [eachpoint[1] for eachpoint in group3], 'og') # 打印噪音点,黑色 pl.plot([eachpoint[0] for eachpoint in dropPoints], [eachpoint[1] for eachpoint in dropPoints], 'ok') pl.show()
运行效果截图如下:
推荐我们的Python学习扣qun:913066266 ,看看前辈们是如何学习的!从基础的python脚本到web开发、爬虫、django、数据挖掘等【PDF,实战源码】,零基础到项目实战的资料都有整理。送给每一位python的小伙伴!每天都有大牛定时讲解Python技术,分享一些学习的方法和需要注意的小细节,点击加入我们的 python学习者聚集地
更多相关内容 -
Python聚类算法之凝聚层次聚类实例分析
2020-09-21 19:13:18主要介绍了Python聚类算法之凝聚层次聚类的原理与具体使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下 -
Python中的凝聚层次聚类示例
2019-01-02 09:19:07层次聚类算法将相似的对象分组到称为聚类的组中。层次聚类算法有两种: 凝聚(Agglomerative )-自下而上的方法。从许多小聚类开始,然后将它们合并到一起,创建更大的聚类。 分裂 (Divisive )- 自上而下的方法...https://www.toutiao.com/a6641489713536434695/
2019-01-01 19:32:04
层次聚类算法将相似的对象分组到称为聚类的组中。层次聚类算法有两种:
- 凝聚(Agglomerative )-自下而上的方法。从许多小聚类开始,然后将它们合并到一起,创建更大的聚类。
- 分裂 (Divisive )- 自上而下的方法。从单个聚类开始,而不是将其拆分为更小的聚类。
层次聚类的一些优缺点
优点
- 不假设特定数量的聚类(即k均值)
- 可能对应于有意义的层次关系
缺点
- 一旦决定组合两个聚类,它就无法撤消
- 遇到大机器学习数据集时太慢,O(2log())
它时如何运作的
1.使每个数据点成为一个聚类
2.取两个最接近的聚类并使它们成为一个聚类
3.重复步骤2,直到只有一个聚类
树形图
我们可以使用树形图来显示分组的历史,并找出最佳的聚类数。
- 确定不与任何其他聚类相交的最大垂直距离
- 在两个末端画一条水平线
- 最佳聚类数等于通过水平线的垂直线数
例如,在下面的例子中,没有的最佳选择。集群将是4。
连接标准(Linkage Criteria)
与梯度下降类似,您可以调整某些参数以获得截然不同的结果。
连接标准指的是如何计算聚类之间的距离
Single Linkage
两个聚类之间的距离是每个聚类中两点之间的最短距离
Complete Linkage
两个聚类之间的距离是每个聚类中两点之间的最长距离
Average Linkage
簇之间的距离是一个聚类中每个点与另一个聚类中每个点之间的平均距离
Ward Linkage
聚类之间的距离是所有聚类内的平方差的总和
距离度量
用于计算数据点之间距离的方法将影响最终结果。
欧几里德距离
两点之间的最短距离。例如,如果x =(a,b)和y =(c,d),则x和y之间的欧几里德距离为√((a-c)²+(b-d)²)
曼哈顿距离
想象一下,你在一个大城市的市中心,你想要从A点到达B点。你将无法跨越建筑物,而是你必须沿着各条街道行走。例如,如果x =(a,b)和y =(c,d),则x和y之间的曼哈顿距离是| a-c | + | b-d |。
python中的示例
让我们看看如何使用层次凝聚聚类来标记机器学习数据的具体示例。
import pandas as pd import numpy as np from matplotlib import pyplot as plt from sklearn.cluster import AgglomerativeClustering import scipy.cluster.hierarchy as sch
在本教程中,我们使用包含客户列表的csv文件及其gender, age, annual income 和 spending score。机器学习数据库的下载地址:http://www.kankanyun.com/data/Mall_Customers.csv
为了在以后的图表上显示我们的数据,我们只能采用两个变量(annual income 和spending score)。
dataset = pd.read_csv('./data.csv') X = dataset.iloc[:, [3, 4]].values
观察树状图,与任何聚类不相交的最高垂直距离是中间的绿色。假设5条垂直线超过阈值,则最佳聚类数为5。
dendrogram = sch.dendrogram(sch.linkage(X, method='ward'))
我们利用欧几里得距离来创建AgglomerativeClustering的实例,其中该欧几里得距离是指点之间的距离和用于计算聚类的接近度的距离。
model = AgglomerativeClustering(n_clusters=5, affinity='euclidean', linkage='ward') model.fit(X) labels = model.labels_
该labels_属性返回一个整数数组,其中值对应于不同的类。
我们可以使用简写表示法将属于某个类的所有样本显示为特定颜色。
plt.scatter(X[labels==0, 0], X[labels==0, 1], s=50, marker='o', color='red') plt.scatter(X[labels==1, 0], X[labels==1, 1], s=50, marker='o', color='blue') plt.scatter(X[labels==2, 0], X[labels==2, 1], s=50, marker='o', color='green') plt.scatter(X[labels==3, 0], X[labels==3, 1], s=50, marker='o', color='purple') plt.scatter(X[labels==4, 0], X[labels==4, 1], s=50, marker='o', color='orange') plt.show()
-
聚类分析 之 凝聚层次聚类
2019-12-17 19:46:59old , but useful . 两种产生层次聚类的基本方法: 凝聚的: 从点作为个体簇开始,每一步合并两个最近的簇, 需要定义簇的邻近性概念(开始每个点都是一个... 下面将先介绍凝聚层次聚类技术。 2. 层次聚类 层...old , but useful .
两种产生层次聚类的基本方法:
-
凝聚的: 从点作为个体簇开始,每一步合并两个最近的簇,
需要定义簇的邻近性概念(开始每个点都是一个簇,然后不断合并减少簇的数量)。 -
分裂的; 从包含所有点的某个簇开始,每一步分裂一个簇,直到仅剩下单点簇。
在这种情况下,我们需要确定每一步分裂哪个簇,以及如何分裂?下面将先介绍凝聚层次聚类技术。
2. 层次聚类
层次聚类常常使用称作树状图(dendrogram)的类似树的图显示,该图显示簇-子簇联系和簇合并(凝聚)或分裂的次序。度域二维点的集合,层次聚类也可以使用嵌套簇图(nested cluster diagram)表示,
2.1 基本凝聚层次聚类算法
许多凝聚层次聚类技术都是这个方法的变种,从个体点作为簇开始,相继合并两个最接近的簇,直到剩下一个簇。
2.1.1 如何定义簇之间的邻近性——簇之间满足什么条件才可以认为是邻近的?
簇的邻近性通常用特定的簇类型定义,如许多凝聚层次聚类技术都源于簇的基于图的观点。
- MIN / 单链(single link) 定义簇的邻近度为不同簇的两个最近的点之间的邻近度,(或者使用图的术语:不同的结点子集中两个结点之间的最短边)
- MAX / 全链(complete link) 取不同簇中两个最远的点之间的邻近度作为簇的邻近度(或者使用图的术语: 不同的结点子集中两个结点之间的最长边。)
- 组平均(group average)技术 它定义簇邻近度为取自不同簇的所有点对邻近度的平均值(平均边长)。
- 矩心之间的距离:
- 由目标函数驱动的其他方法,如 Ward 的方法使用平方误差
2.1.2 时间和空间复杂性
基本凝聚层次聚类算法使用邻近度矩阵,这需要存储 m 2 / 2 个邻近度(假定邻近度矩阵是对称的),其中 m 是数据点的个数。 记录簇所需要的空间正比于簇的个数为 m-1,不包括单点簇,因此总的空间复杂度为 O (m2)。总的时间复杂度为 O(m2log m)。
不够详细,实践中总结凝聚层次聚类过程
- 从单个点的簇和邻近矩阵开始:
- 在一些合并步骤后,我们有一些聚类:
- 我们想合并两个最近的聚类(C2 和 C5)并更新邻近矩阵
聚类相似性——MIN 或单链
两个簇的相似性基于不同簇中的两个最相似(最接近)点。
- 由一对点确定,即由邻近图中的一个链接确定。如果从所有点作为单点簇开始,每次在点之间加上一条链,最短的链先加,则这些链将点合并成簇。
- 单链 擅长处理非椭圆形状的簇,但对噪声和离群点很敏感(可以从下面的演示过程看出)
- 下图中显示了 6 个点的坐标以及他们之间的欧几里得距离矩阵。树状图中两个簇合并出的高度反映了两个簇的距离。如 点 3 和 点 6 的距离是 0.11,这就是他们在树状图里合并处的高度。
- 一开始坐标中的 6 个点都作为单点簇。
- 由于点 3 和 点 6 的距离最小,所以先合并点 3 和 点 6 作为一个簇,现在有 5 个簇。
-
之后 点 2 和 点 5 合并成一个簇。
-
之前的新簇(点 3 和 点 6 合并)与刚才形成的簇(点 2 和 点 5 合并) 继续合并成新簇。
6.最终形成如图的一个簇。
聚类相似性——全链或MAX或团
- 对于层次聚类的全链或 MAX版本,两个簇的邻近度定义为两个不同簇中任意两个之间的最长距离(最小相似度)。
- 如果所有点作为单点簇开始,每次在点之间加上一条链,最短的链先加,则一组点直到其中所有的点都完全被连接(即形成团)才形成一个簇。挑选两簇(两簇中之间最长的链与其他簇的最长相比链最短)
- 完全连接对噪声和离群点不太敏感,但是它可能使大的簇破裂,并且偏好球形。
聚类相似性——组平均
对于层次聚类的组平均版本,两个簇的邻近度定义为不同簇的所有点对邻近度的平均值。这是一种界于单链和全链之间的折中办法。对于组平均,簇 C i 和 Cj 的邻近度 proximity(Ci,Cj)由下式定义:
mi ,mj 为簇的点个数,分子为两个簇点与点的链距离之和。聚类相似性分析——Ward方法和质心方法
对于 Ward 方法,两个簇的邻近度定义为两个簇合并时导致的平方误差的增量。,这样一来,该方法使用的目标函数和K均值相同,好像这一特点让Ward 方法不同与其他层次聚类技术,但是可以从数学上证明,当两个点之间的邻近度取它们之间距离的平方是, Ward 方法与组平均非常相似。
质心方法通过计算簇质心之间的距离来计算两个簇之间的邻近度。看起来和 K 均值类似,但是只有 Ward 方法才真正与它类似。
质心方法还具有一种我们讨论过的其他层次聚类技术所不具备的特性(常被认为是坏的):倒置(inversion)的可能性。合并的两个簇可能比前一步合并的簇对更相似。对于其他方法,被合并的簇之间的距离随层次聚类进展单调地增加(或者,在最坏的情况下不增加)。
簇邻近度的 Lance-Williams公式
本节讨论的任何簇邻近度都可以看做簇 Q 和 R 之间邻近度的不同参数(Lance-Williams公式)的一种选择,其中 R 是合并簇 A 和 簇 B 形成的。
任何可以使用 Lance-Williams 公式表示的层次聚类技术都不需要保留原来的数据点。层次聚类——时间和空间要求
- O(n)空间复杂度,因为它使用邻近矩阵。n 是点数。
- O(n3)在多数情况下的时间复杂度,有 n 个步骤,并且每个步骤,必须更新和搜索大小 n2 ,邻近矩阵。
- 对于一些方法,时间复杂度可以减少到 O(n2log n)。
层次聚类的主要问题
- 一旦决定组合两个集群,无法退回。
- 没有目标函数被直接最小化。
凝聚层次聚类不能被视为全局优化目标函数,凝聚层次聚类技术使用各种标准,在每一步局部地确定哪些簇应当合并(或分裂),这种方法产生的聚类算法避开了解决困难的组合优化问题,这样的方法没有局部极小问题或很难选择初始点的问题。 - 不同的方案具有以下一个或多个问题:
- 对噪声和异常值的敏感性
- 难以处理不同大小的簇和凸形
- 分离大集群
就计算量和存储需求而言,凝聚层次算法是昂贵的,所有合并都是最终的,对于噪声、高维数据,这也可能造成问题,先使用其他技术进行部分聚类,这两个问题都可以在某种程度上解决。
-
-
层次聚类和实例分析
2022-02-16 10:31:29层次聚类 层次聚类(Hierarchical Clustering)是聚类算法的一种,通过计算不同类别数据点间的相似度来创建一棵有层次的嵌套聚类树。在聚类树中,不同类别的原始数据点是树的最低层,树的顶层是一个聚类的根节点。...层次聚类
层次聚类(Hierarchical Clustering)是聚类算法的一种,通过计算不同类别数据点间的相似度来创建一棵有层次的嵌套聚类树。在聚类树中,不同类别的原始数据点是树的最低层,树的顶层是一个聚类的根节点。创建聚类树有自下而上合并和自上而下分裂两种方法。
作为一家公司的人力资源部经理,你可以把所有的雇员组织成较大的簇,如主管、经理和职员;然后你可以进一步划分为较小的簇,例如,职员簇可以进一步划分为子簇:高级职员,一般职员和实习人员。所有的这些簇形成了层次结构,可以很容易地对各层次上的数据进行汇总或者特征化。
如何划分才是合适的呢?
直观来看,上图中展示的数据划分为2个簇或4个簇都是合理的,甚至,如果上面每一个圈的内部包含的是大量数据形成的数据集,那么也许分成16个簇才是所需要的。
论数据集应该聚类成多少个簇,通常是在讨论我们在什么尺度上关注这个数据集。层次聚类算法相比划分聚类算法的优点之一是可以在不同的尺度上(层次)展示数据集的聚类情况。
基于层次的聚类算法(Hierarchical Clustering)可以是凝聚的(Agglomerative)或者分裂的(Divisive),取决于层次的划分是“自底向上”还是“自顶向下”。
自底向上的合并算法
层次聚类的合并算法通过计算两类数据点间的相似性,对所有数据点中最为相似的两个数据点进行组合,并反复迭代这一过程。简单的说层次聚类的合并算法是通过计算每一个类别的数据点与所有数据点之间的距离来确定它们之间的相似性,距离越小,相似度越高。并将距离最近的两个数据点或类别进行组合,生成聚类树。
相似度的计算
层次聚类使用欧式距离来计算不同类别数据点间的距离(相似度)。
实例:数据点如下
分别计算欧式距离值(矩阵)
将数据点B与数据点C进行组合后,重新计算各类别数据点间的距离矩阵。数据点间的距离计算方式与之前的方法一样。这里需要说明的是组合数据点(B,C)与其他数据点间的计算方法。当我们计算(B,C)到A的距离时,需要分别计算B到A和C到A的距离均值。
经过计算数据点D到数据点E的距离在所有的距离值中最小,为1.20。这表示在当前的所有数据点中(包含组合数据点),D和E的相似度最高。因此我们将数据点D和数据点E进行组合。并再次计算其他数据点间的距离。
后面的工作就是不断的重复计算数据点与数据点,数据点与组合数据点间的距离。这个步骤应该由程序来完成。这里由于数据量较小,我们手工计算并列出每一步的距离计算和数据点组合的结果。
两个组合数据点间的距离
计算两个组合数据点间距离的方法有三种,分别为Single Linkage,Complete Linkage和Average Linkage。在开始计算之前,我们先来介绍下这三种计算方法以及各自的优缺点。
-
Single Linkage:方法是将两个组合数据点中距离最近的两个数据点间的距离作为这两个组合数据点的距离。这种方法容易受到极端值的影响。两个很相似的组合数据点可能由于其中的某个极端的数据点距离较近而组合在一起。
-
Complete Linkage:Complete Linkage的计算方法与Single Linkage相反,将两个组合数据点中距离最远的两个数据点间的距离作为这两个组合数据点的距离。Complete Linkage的问题也与Single Linkage相反,两个不相似的组合数据点可能由于其中的极端值距离较远而无法组合在一起。
-
Average Linkage:Average Linkage的计算方法是计算两个组合数据点中的每个数据点与其他所有数据点的距离。将所有距离的均值作为两个组合数据点间的距离。这种方法计算量比较大,但结果比前两种方法更合理。
我们使用Average Linkage计算组合数据点间的距离。下面是计算组合数据点(A,F)到(B,C)的距离,这里分别计算了(A,F)和(B,C)两两间距离的均值。
树状图
层次聚类python
import pandas as pd seeds_df = pd.read_csv('./datasets/seeds-less-rows.csv') seeds_df.head()
seeds_df.grain_variety.value_counts()
Kama wheat 14 Rosa wheat 14 Canadian wheat 14 Name: grain_variety, dtype: int64
varieties = list(seeds_df.pop('grain_variety')) samples = seeds_df.values
samples
array([[14.88 , 14.57 , 0.8811, 5.554 , 3.333 , 1.018 , 4.956 ], [14.69 , 14.49 , 0.8799, 5.563 , 3.259 , 3.586 , 5.219 ], [14.03 , 14.16 , 0.8796, 5.438 , 3.201 , 1.717 , 5.001 ], [13.99 , 13.83 , 0.9183, 5.119 , 3.383 , 5.234 , 4.781 ], [14.11 , 14.26 , 0.8722, 5.52 , 3.168 , 2.688 , 5.219 ], [13.02 , 13.76 , 0.8641, 5.395 , 3.026 , 3.373 , 4.825 ], [15.49 , 14.94 , 0.8724, 5.757 , 3.371 , 3.412 , 5.228 ], [16.2 , 15.27 , 0.8734, 5.826 , 3.464 , 2.823 , 5.527 ], [13.5 , 13.85 , 0.8852, 5.351 , 3.158 , 2.249 , 5.176 ], [15.36 , 14.76 , 0.8861, 5.701 , 3.393 , 1.367 , 5.132 ], [15.78 , 14.91 , 0.8923, 5.674 , 3.434 , 5.593 , 5.136 ], [14.46 , 14.35 , 0.8818, 5.388 , 3.377 , 2.802 , 5.044 ], [11.23 , 12.63 , 0.884 , 4.902 , 2.879 , 2.269 , 4.703 ], [14.34 , 14.37 , 0.8726, 5.63 , 3.19 , 1.313 , 5.15 ], [16.84 , 15.67 , 0.8623, 5.998 , 3.484 , 4.675 , 5.877 ], [17.32 , 15.91 , 0.8599, 6.064 , 3.403 , 3.824 , 5.922 ], [18.72 , 16.19 , 0.8977, 6.006 , 3.857 , 5.324 , 5.879 ], [18.88 , 16.26 , 0.8969, 6.084 , 3.764 , 1.649 , 6.109 ], [18.76 , 16.2 , 0.8984, 6.172 , 3.796 , 3.12 , 6.053 ], [19.31 , 16.59 , 0.8815, 6.341 , 3.81 , 3.477 , 6.238 ], [17.99 , 15.86 , 0.8992, 5.89 , 3.694 , 2.068 , 5.837 ], [18.85 , 16.17 , 0.9056, 6.152 , 3.806 , 2.843 , 6.2 ], [19.38 , 16.72 , 0.8716, 6.303 , 3.791 , 3.678 , 5.965 ], [18.96 , 16.2 , 0.9077, 6.051 , 3.897 , 4.334 , 5.75 ], [18.14 , 16.12 , 0.8772, 6.059 , 3.563 , 3.619 , 6.011 ], [18.65 , 16.41 , 0.8698, 6.285 , 3.594 , 4.391 , 6.102 ], [18.94 , 16.32 , 0.8942, 6.144 , 3.825 , 2.908 , 5.949 ], [17.36 , 15.76 , 0.8785, 6.145 , 3.574 , 3.526 , 5.971 ], [13.32 , 13.94 , 0.8613, 5.541 , 3.073 , 7.035 , 5.44 ], [11.43 , 13.13 , 0.8335, 5.176 , 2.719 , 2.221 , 5.132 ], [12.01 , 13.52 , 0.8249, 5.405 , 2.776 , 6.992 , 5.27 ], [11.34 , 12.87 , 0.8596, 5.053 , 2.849 , 3.347 , 5.003 ], [12.02 , 13.33 , 0.8503, 5.35 , 2.81 , 4.271 , 5.308 ], [12.44 , 13.59 , 0.8462, 5.319 , 2.897 , 4.924 , 5.27 ], [11.55 , 13.1 , 0.8455, 5.167 , 2.845 , 6.715 , 4.956 ], [11.26 , 13.01 , 0.8355, 5.186 , 2.71 , 5.335 , 5.092 ], [12.46 , 13.41 , 0.8706, 5.236 , 3.017 , 4.987 , 5.147 ], [11.81 , 13.45 , 0.8198, 5.413 , 2.716 , 4.898 , 5.352 ], [11.27 , 12.86 , 0.8563, 5.091 , 2.804 , 3.985 , 5.001 ], [12.79 , 13.53 , 0.8786, 5.224 , 3.054 , 5.483 , 4.958 ], [12.67 , 13.32 , 0.8977, 4.984 , 3.135 , 2.3 , 4.745 ], [11.23 , 12.88 , 0.8511, 5.14 , 2.795 , 4.325 , 5.003 ]])
#距离计算的linkage 还有树状图dendrogram from scipy.cluster.hierarchy import linkage, dendrogram import matplotlib.pyplot as plt
#进行层次聚类 mergings = linkage(samples, method='complete')
#树状图结果 fig = plt.figure(figsize=(10,6)) dendrogram(mergings, labels=varieties, leaf_rotation=90, leaf_font_size=6, ) plt.show()
#得到标签结果 #maximum height自己指定 from scipy.cluster.hierarchy import fcluster labels = fcluster(mergings, 6, criterion='distance') df = pd.DataFrame({'labels': labels, 'varieties': varieties}) ct = pd.crosstab(df['labels'], df['varieties']) ct
不同距离的选择会产生不同的结果
import pandas as pd scores_df = pd.read_csv('./datasets/eurovision-2016-televoting.csv', index_col=0) country_names = list(scores_df.index) scores_df.head()
#缺失值填充,没有的就先按满分算吧 scores_df = scores_df.fillna(12)
#归一化 from sklearn.preprocessing import normalize samples = normalize(scores_df.values)
samples
array([[0.09449112, 0.56694671, 0. , ..., 0. , 0.28347335, 0. ], [0.49319696, 0. , 0.16439899, ..., 0. , 0.41099747, 0. ], [0. , 0.49319696, 0.12329924, ..., 0. , 0.32879797, 0.16439899], ..., [0.32879797, 0.20549873, 0.24659848, ..., 0.49319696, 0.28769823, 0. ], [0.28769823, 0.16439899, 0. , ..., 0. , 0.49319696, 0. ], [0. , 0.24659848, 0. , ..., 0. , 0.20549873, 0.49319696]])
from scipy.cluster.hierarchy import linkage, dendrogram import matplotlib.pyplot as plt mergings = linkage(samples, method='single') fig = plt.figure(figsize=(10,6)) dendrogram(mergings, labels=country_names, leaf_rotation=90, leaf_font_size=6, ) plt.show()
mergings = linkage(samples, method='complete') fig = plt.figure(figsize=(10,6)) dendrogram(mergings, labels=country_names, leaf_rotation=90, leaf_font_size=6, ) plt.show()
-
-
基本凝聚层次聚类算法
2017-01-13 15:02:14一、基本凝聚层次聚类算法 1:如果需要,计算近邻度矩阵 2:repeat 2.1:合并最接近的两个簇 2.2:更新近邻性矩阵,以反映新的簇与原来的簇之间的近邻性 3:until 仅剩下一个簇 存储近邻度个数... -
层次聚类算法
2021-03-14 09:47:52凝聚层次聚类:采用自底向上策略,首先将每个对象作为单独的一个原子簇,然后合并这些原子簇形成越来越大的簇,直到所有的对象都在一个簇中(层次的最上层),或者达到某个终止条件。绝大多数层次聚类方法属于这一类... -
(十七 层次聚类)
2021-02-01 11:46:04层次聚类 参考 什么是层次聚类 层次聚类(Hierarchical Clustering)是聚类算法的一种,顾名思义就是要一层一层地进行聚类,通过计算不同类别数据点间的相似度来创建一棵有层次的嵌套聚类树。在聚类树中,不同类别的... -
层次聚类算法实例分析
2022-04-06 10:04:08层次聚类算法 层次聚类算法又称为树聚类算法,它根据数据之间的距离,通过一种层次架构方式,反复将数据进行聚合,创建一个层次以分解给定的数据集。 在sklearn模块中,使用AgglomerativeClustering 函数进行层次... -
Python凝聚层次聚类实例
2018-06-05 21:02:05import numpy as np import matplotlib.pyplot as plt from sklearn.cluster import AgglomerativeClustering from sklearn.neighbors import kneighbors_graph class MyAgglomerative: def __init__(self,t=0,n... -
无监督学习——凝聚聚类
2021-08-12 16:31:57凝聚聚类指的是许多基于相同原则构建的聚类算法,这一原则是:算法首先声明每个点是自己的簇,然后合并两个最相似的簇,直到满足某种停止规则为止。scikit-learn中实现的停止规则是簇的个数,因此相似的簇被合并,... -
小白都能了解的聚类算法之三(层次聚类)
2020-03-29 12:07:22层次聚类(Hierarchical Clustering)通过计算各类别中数据之间的相似度,最终创建一棵有层次的嵌套聚类树。起核心思想是基于各"簇"之间的相似度,在不同层次上分析数据,得到最终的树形聚类结构。 2.agglomerative与... -
层次聚类算法的原理及实现Hierarchical Clustering
2016-12-07 21:41:48层次聚类算法的原理及实现Hierarchical Clustering 层次聚类(Hierarchical Clustering)是聚类算法的一种,通过计算不同类别数据点间的相似度来创建一棵有层次的嵌套聚类树。在聚类树中,不同类别的原始数据点是树的... -
机器学习课后题——聚类
2021-07-14 17:31:19层次聚类: 代表算法:HAC、BIRCH、DIANA 9.2 Kmeans初始类簇中心点的如何选取? 答: 理论上初始中心点可以随机选取,但为了提高效率,并获得更好的结果,我们希望选取初始的聚类中心之间的相互距离要尽... -
【机器学习】AGNES层次聚类算法
2021-11-12 13:34:01算法思想: 初始每个数据都是一个簇; 寻找每个簇之间的距离,获取距离列表; 合并距离最近的两个簇Ci,Cj,并删除Cj,更新距离列表,使簇个数减1; 重复第3步,直到簇个数等于所需个数k。 ...数据集来源:周志华... -
机器学习算法-层次聚类AGNES
2017-09-23 21:08:02层次凝聚的代表是AGNES(AGglomerative NESting)算法。AGNES 算法最初将每个对象作为一个簇,然后这些簇根据某些准则被一步步地合并。两个簇间的相似度有多种不同的计算方法。聚类的合并过程反复进行直到所有的对象... -
层次聚类算法(AGNES算法/DIANA算法)描述与解析
2015-12-18 11:07:26(1) 凝聚的层次聚类:自底向上的策略,首先将每个对象作为一个簇,然后合并这些原子簇为更大的簇,直到所有的对象都在同一个簇中,或者满足终止条件。 (2) 分类的层次聚类:自顶向下的策略。 AGNES算法 ... -
K-means聚类算法试题.ppt
2020-12-19 00:32:27聚类——K-means算法 聚类 聚类算法 K-means聚类算法 聚类的评价 聚类分析是一种重要的人类行为,早在孩提时代,一个人就通过不断改进下意识中的聚类模式来学会如何区分猫狗、动物植物。 聚类背景 什么是聚类分析 ... -
【大数据开发基础】第九章聚类分析
2021-05-24 19:13:032 距离和相似系数2.1 Q型聚类(对样本聚类)3 类的定义和类间距离4 基于划分的聚类方法5 基于层次的聚类方法6 基于密度的聚类方法 聚类和分类的区别: 聚类:无监督的,一种自然分组的方法 分类:有监督的,提前... -
聚类实例
2017-12-05 18:54:461. 有趣模式在数据挖掘和机器学习中,一次就算会产生大量的“模式”,所谓模式可以理解为一种数据规律。 如果一个模式具备以下的...从思考的角度来看有两种思路:一种是“凝聚的层次聚类方法”,一种是“分裂的层次 -
机器学习之聚类算法(一:聚类概述和相似度计算)
2021-10-30 20:56:51(1)基于层次的聚类 原理: 算法流程 代表算法:BIRCH、Chameleon、CURE等 BIRCH、Chameleon、CURE三种算法优缺点比较: (2)基于划分的聚类 原理: 基于划分的聚类代表方法有: k-me... -
聚类算法之层次法
2015-03-06 14:54:00层次法又分为凝聚的层次聚类和分裂的层次聚类。 凝聚的方法:也称自底向上的方法,首先将每个对象作为单独的一个聚类,然后根据性质和规则相继地合并相近的类,直到所有的对象都合并为一个聚类中,或者满足一定的... -
数据挖掘第八章——聚类分析
2021-12-26 09:15:32聚类方法Clustering 划分聚类:将数据划分为互不重叠的子集,一个点只属于某一类 层次聚类:将嵌套的类簇以层次树的形式构建 重叠聚类 模糊聚类 完全聚类 2.簇类型Clusters 明显分离的 基于中心的 基于近邻的 基于... -
聚类算法篇章总结
2019-03-07 18:20:44主要的距离计算方法包括: 最短距离法(通过样本数值之间的距离计算,... 类平均距离法(动态聚类法:利用类平均值法对数据进行聚类的方法属于动态聚类的方法,也称逐步聚类法) 常见的聚类算法: K-Means算法:初... -
数据挖掘笔记 —— 绪论、数据预处理、聚类分析
2020-03-24 17:46:025.层次聚类算法 凝聚的层次聚类:一种自底向上的策略,首先将每个对象作为一个簇,然后合并原子簇为越来越大的簇,直到某个终结条件被满足。代表算法是AGNES算法。 分裂的层次聚类:采用自顶向下的策略,首先将所有...