聚类算法_kmeans_层次聚类

层次聚类

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

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

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

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

K K K均值聚类

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

算法:
输入: n n n个样本的集合 X X X
输出:样本集合的聚类 C C C

  1. 初始化。令 t = 0 t=0 t=0,随机选择 K K K个样本点作为初始聚类中心 m ( 0 ) = ( m 1 ( 0 ) , . . . , m l ( 0 ) , . . . , m k ( 0 ) ) m^{(0)}=(m_1^{(0)},...,m_l^{(0)},...,m_k^{(0)}) m(0)=(m1(0),...,ml(0),...,mk(0))
  2. 对样本进行聚类。对固定的类中心 m ( t ) = ( m 1 ( t ) , . . . , m l ( t ) , . . . , m k ( t ) ) m^{(t)}=(m_1^{(t)},...,m_l^{(t)},...,m_k^{(t)}) m(t)=(m1(t),...,ml(t),...,mk(t)),其中 m l ( t ) m_l^{(t)} ml(t)是类 G l G_l Gl的中心,计算每个样本到类中心的距离,将每个样本指派到与其最近的中心的类中,构成聚类结果 C ( t ) C^{(t)} C(t)
  3. 计算新的类中心,对聚类结果 C ( t ) C^{(t)} C(t),计算当前各个类中的样本的均值,作为新的类中心 m ( t + 1 ) = ( m 1 ( t + 1 ) , . . . , m l ( t + 1 ) , . . . , m k ( 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 + 1 t=t+1 t=t+1,返回步2。

算法复杂度 O ( m n k ) O(mnk) O(mnk),其中 m m m是样本维数, n n n是样本个数, k k k是类别个数。

  • 11
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值