聚类算法(2):系统聚类/层次聚类算法

  • 层次聚类:自下而上法(bottom-up)和自上而下法(top-down)

       聚类算法(4)--Hierarchical clustering层次聚类

  • 系统聚类:相当于自下而上法,也就是层次聚类

目录

一、系统聚类      

1. 系统聚类实现的一般步骤

2. 常用的距离

3. 类间距离

二、手动实现过程

三、代码实现

1. R语言

2. Python代码


 一、系统聚类      

         系统聚类法是目前国内外使用比较多的一种聚类方法,其实现方式是:它首先将每个样本单独看成一类,在规定类间距离的条件下,选择距离最小的一对合并成一个新类,并计算新类与其他类之间的距离,再将距离最近的两类合并,这样每次会减少一个类,直到所有的样本合为一类为止。

1. 系统聚类实现的一般步骤

(1)将每个样品看成一类
(2)计算类间距离矩阵,并将距离最近的两类合并成为一个新类
(3)计算新类与当前各类之间的距离。若类的个数等于1,则进行下一步,否则转到第2步
(4)画聚类图
(5)决定聚类数目和类别

2. 常用的距离

        包括:绝对值距离、欧氏距离、明氏距离、切比雪夫距离、马氏距离、兰氏距离、余弦距离。

          聚类算法(2):系统聚类/层次聚类算法_第1张图片

            聚类算法(2):系统聚类/层次聚类算法_第2张图片

3. 类间距离

       类间距离也有很多定义方法,主要有:类平均法、可变类平均法、可变法、重心法、中间距离法、最长距离法、最短距离法、离差平方法。

             聚类算法(2):系统聚类/层次聚类算法_第3张图片      

                聚类算法(2):系统聚类/层次聚类算法_第4张图片

二、手动实现过程

       选择适当的样本距离和类间距离计算方法,便可从每样本作为单独类开始逐渐合并,最终合为一类。这里,使用表3-5-4的数据,以欧氏距离作为衡量样本间距离的标准,以最短距离法作为衡量类间距离的标准,来说明系统聚类的手动计算过程。

                            聚类算法(2):系统聚类/层次聚类算法_第5张图片 

    聚类算法(2):系统聚类/层次聚类算法_第6张图片

  聚类算法(2):系统聚类/层次聚类算法_第7张图片

三、代码实现

1. R语言

      在R语言中,通常使用hlst函数来做系统聚类,它的定义及参数说明如表3-5-6所示。

            聚类算法(2):系统聚类/层次聚类算法_第8张图片

   使用K-Means算法对AirPassagers的年度标准曲线进行聚类,旨在发现乘客数据的年度变化模式,代码如下:  

#重构数据
ap.data<-t(mapply(function(i){AirPassengers[(12*(i-1)+1):(i*12)]},1:12))

#标准化曲线
ap.data.std<-t(apply(ap.data,1,function(x){(x-min(x))/(max(x)-min(x))}))

#使用hclust函数进行聚类
hc<-hclust(dist(ap.data.std),method="ward.D2")
plot(hc)
rect.hclust(hc,k=2)  # 加上划分矩形框

#设置类标签
ap.data.std<-cbind(ap.data.std,cutree(hc,k=2))

#画出曲线图
plot(1:12,1:12,col='white',ylim=c(0,1))
for(i in 1:nrow(ap.data.std))
{
    lines(1:12,ap.data.std[i,1:12],col=ap.data.std[i,13]+2)
}

效果图如下: 

                     聚类算法(2):系统聚类/层次聚类算法_第9张图片 

                        聚类算法(2):系统聚类/层次聚类算法_第10张图片

2. Python代码

你可能感兴趣的:(机器学习)