层次聚类之AGNES及Python实现

本文介绍了层次聚类中的AGNES算法,它采用自底向上的聚合策略,从每个样本作为单独的簇开始,逐步合并最近的簇。讨论了簇直接的距离计算方法,包括最小距离、最大距离和平均距离。并提供了AGNES算法的详细步骤和Python代码实现的简介。
摘要由CSDN通过智能技术生成

层次聚类

层次聚类,顾名思义,就是一层一层的进行聚类,它试图在不同层次对数据集进行划分,可以由上向下把大的类别分割,即“自顶向下”的分拆策略(见下面AGNES部分),也可以由下向上对小的类别进行聚合,即“自底向下”的聚合策略:开始把所有的样本都归为一类,然后逐步将他们划分为更小的单元,直到最后每个样本都成为一类。在这个迭代的过程中通过对划分过程中定义一个松散度,当松散度最小的那个类的结果都小于一个阈值,则认为划分可以终止。这种方法用的不普遍,在这里不予详细介绍。下面本文主要对采用自底向上聚合策略的AGNES(AGglomerative NESting)做一个介绍。

AGNES

AGNES,是一种采用自底向上聚合策略的层次聚类算法,是先将数据集中的每个样本看作一个初始聚类簇,然后在算法运行的每一步中找出距离最近的两个聚类簇进行合并,该过程不断重复,直至达到预设的聚类簇个数,这里的关键是如何计算聚类簇之间的距离。其实每个聚类簇就是一个样本集合,聚类簇之间的聚类就是集合之间的聚类。

簇直接的距离

最小距离,是由两个簇的最近样本决定。如果层次聚类的距离度量函数采用 dmin d m i n ,两个簇之间的相似度由两个簇中最近样本决定,这样容易造成Chaining的效果,即两个簇明明从“大局”上离得比较远,但是由于其中个别点的距离比较近就被合并了,并且这样合并之后Chaining效应会进一步扩大,最后会得到比较松散的簇。

dmin(Ci,Cj)=minxCi,zCjdist(x,z)(1.1) (1.1) d m i n ( C i , C j ) = m i n x ∈ C i , z ∈ C j d i s t ( x , z )

python代码实现:

#计算欧几里得距离,a,b分别为两个元组
def dist(a, b):
    return math.sqrt(math.pow(a[0]-b[0], 2)+math.pow(a[1]-b[1], 2))

#dist_min
def dist_min(Ci, Cj):
    return min(dist(i, j) for i in Ci for j in Cj)

最大距离,由两个簇的最远样本决定。这个则是最小距离 dmin d m i n 的反面极端,其效果也是刚好相反的,限制非常大,两个 cluster 即使已经很接近了,但是只要有不配合的点存在,就顽固到底,老死不相合并,也是不太好的办法。 dmin d m i n dmax d m a x 这两种相似度的定义方法的共同问题就是指考虑了某个有特点的数据,而没有考虑类内数据的整体特点。

dmax(Ci,C
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值