聚类算法_kmeans_层次聚类

本文介绍了层次聚类(包括聚合和分裂两种方式)和K均值聚类这两种常见的硬聚类算法,阐述了它们如何通过计算样本间的距离和类中心来实现数据分组,以及各自的算法流程和复杂度O(n^3m)。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

层次聚类

层次聚类假设类别之间存在层次结构,将样本聚到层次化的类中。分为聚合(agglomerative)聚类(自下而上)、分裂(divisive)聚类(自上而下),每个样本只属于一个类,所以层次聚类属于硬聚类。

聚合聚类算法:
输入:nnn个样本组成的样本集合及样本之间的距离;
输出:对样本集合的一个层次化聚类。

  1. 计算nnn个样本两两之间的欧氏距离{dij}\{d_{ij}\}{dij},记作矩阵D=[dij]n∗nD={[d_{ij}]}_{n*n}D=[dij]nn
  2. 构造nnn个类,每个类只包含一个样本。
  3. 合并类间距离最小的两个类,其中最短距离为类间距离,构建一个新类。
  4. 计算新类与当前各类的距离。若类的个数为1,终止计算,否则回到步3。

算法复杂度O(n3m)O(n^3m)O(n3m),其中mmm是样本的维数,nnn是样本个数。

KKK均值聚类

KKK均值聚类是基于样本集合划分的聚类算法。KKK均值聚类将样本集合划分为KKK个子集,构成KKK个类,将nnn个样本分到KKK个类中,每个样本到其所属类的中心的距离最小。每个样本只属于一个类,因此KKK聚类也是硬聚类。

算法:
输入:nnn个样本的集合XXX
输出:样本集合的聚类CCC

  1. 初始化。令t=0t=0t=0,随机选择KKK个样本点作为初始聚类中心m(0)=(m1(0),...,ml(0),...,mk(0))m^{(0)}=(m_1^{(0)},...,m_l^{(0)},...,m_k^{(0)})m(0)=(m1(0),...,ml(0),...,mk(0))
  2. 对样本进行聚类。对固定的类中心m(t)=(m1(t),...,ml(t),...,mk(t))m^{(t)}=(m_1^{(t)},...,m_l^{(t)},...,m_k^{(t)})m(t)=(m1(t),...,ml(t),...,mk(t)),其中ml(t)m_l^{(t)}ml(t)是类GlG_lGl的中心,计算每个样本到类中心的距离,将每个样本指派到与其最近的中心的类中,构成聚类结果C(t)C^{(t)}C(t)
  3. 计算新的类中心,对聚类结果C(t)C^{(t)}C(t),计算当前各个类中的样本的均值,作为新的类中心m(t+1)=(m1(t+1),...,ml(t+1),...,mk(t+1))m^{(t+1)}=(m_1^{(t+1)},...,m_l^{(t+1)},...,m_k^{(t+1)})m(t+1)=(m1(t+1),...,ml(t+1),...,mk(t+1))
  4. 如果迭代收敛或符合停止条件,输出C∗=C(t)C^*=C^{(t)}C=C(t),否则,令t=t+1t=t+1t=t+1,返回步2。

算法复杂度O(mnk)O(mnk)O(mnk),其中mmm是样本维数,nnn是样本个数,kkk是类别个数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值