层次聚类之DIANA算法

层次聚类的分类

  1. 凝聚的层次聚类:自底向上;把每个对象都看成一个簇,自下而上,把相似的簇合并在一起直到合并成一个簇
  2. 分类的层次聚类:自顶向下;从包含所有点的簇开始,每一次分裂一个簇,直到仅剩下单点的簇

簇之间的凝聚性

单链:
定义:两个簇的邻近度为两个簇中的任意两个点之间的最短距离
计算公式:dist({m1,m2},{m3,m4})=min(dist{m1,m3},dist{m1,m4},dist{m2,m3},dist{m2,m4})
特点:单链技术擅长处理非椭圆形的簇,但对噪音和离群点很敏感。
全链:
定义:两个簇的邻近度为两个簇中的任意两个点之间的最长距离
计算公式:dist({m1,m2},{m3,m4})=max(dist{m1,m3},dist{m1,m4},dist{m2,m3},dist{m2,m4})
特点:全链技术擅长处理圆形的簇,但对噪音和离群点不太敏感。
组平均:
定义:两个簇的邻近度为两个簇中的任意两个点之间的平均距离
计算公式:dist({m1,m2},{m3,m4})=(dist{m1,m3}+dist{m1,m4}+dist{m2,m3}+dist{m2,m4}) ÷ \div 4

算法思想:

输入:n个对象,终止条件簇的数目k

输出:k个簇,达到终止条件规定簇数目

  1. 将所有对象当成一个初始簇
  2. for(i=1;i≠k;i++) do begin
  3. 在所有簇中挑选出具有最大直径的簇C
  4. 找出C中与其它点平均相异度最大的一个点P并把P放入splinter group,剩余的放在old party中
  5. repeat
  6. 在old party中找出到最近的splinter group中的点的距离不大于到old party中最近点的距离的点,并将该点加入splinter group
  7. until没有新的old party的点被分配给spilnter group
  8. spilnter group和old party为被选中的簇分裂成的2个簇与其它簇一起组成新的簇集合
  9. end
    分裂的层次聚类算法一般较少使用。
发布了6 篇原创文章 · 获赞 0 · 访问量 63

猜你喜欢

转载自blog.csdn.net/weixin_43984457/article/details/105253136