模式识别(Pattern Recognition)学习笔记(三十六)-- 动态聚类算法

如果不估计样本的概率分布,就无法从概率分布的角度来定义聚类,这时我们就需要有一种新的对聚类的定义,一般的,根据样本间的某种距离或某种相似性度量来定义聚类,即把相似的或距离近的样本聚为一类,而把不相似或距离远的样本聚在其他类,这种基于相似性度量的聚类方法在实际应用中非常常用,主要可以分为动态聚类法和分层聚类法,本篇博客我们主要来介绍常用动态聚类的方法。

动态聚类方法是一中普遍被采用的方法,具有以下三个要素:1)选定某种距离度量作为样本间的相似性度量;2)确定某种可以评价聚类结果质量的准则函数;3)给定某个初始分类,然后用迭代算法找出使得准则函数取极值的最好聚类结果。

一 K-Means聚类算法

   K-Means聚类又叫C均值聚类,其基本思想是,通过迭代找到k个聚类的一种划分方案,使得用这k个聚类的均值来表示相应各类样本时所得到的总体误差最小,所以K-Means是一种基于最小误差平方和准则的聚类算法。由于它在向量量化和图像分割上也有很广泛的应用,所以有时也被称为广义Glogd算法,简称GLA。

1.主要原理

 若Ni是第i个聚类《模式识别(Pattern Recognition)学习笔记(三十六)-- 动态聚类算法》的样本数目,样本均值为:《模式识别(Pattern Recognition)学习笔记(三十六)-- 动态聚类算法》       (1)

《模式识别(Pattern Recognition)学习笔记(三十六)-- 动态聚类算法》中各样本与均值间的误差平方和对所有类求和为:《模式识别(Pattern Recognition)学习笔记(三十六)-- 动态聚类算法》                (2)

为聚类结果的准则函数;对于不同的聚类,准则函数的值是不同的,但是能使其值极小的聚类才是误差平方和准则下的最优结果,这种类型的聚类通常被称为最小方差划分。

由于上述准则函数是样本集和聚类集合的函数,所以无法用解析的方法最小化,只能用迭代来解决,下面我们先来看看调整样本类别划分的方法。

假设已经有一个划分方案,它把样本y划分在《模式识别(Pattern Recognition)学习笔记(三十六)-- 动态聚类算法》中,接下来假设对它做如下调整:

如果把样本y从聚类《模式识别(Pattern Recognition)学习笔记(三十六)-- 动态聚类算法》中移到聚类《模式识别(Pattern Recognition)学习笔记(三十六)-- 动态聚类算法》中,这时两个聚类的均值变为:

《模式识别(Pattern Recognition)学习笔记(三十六)-- 动态聚类算法》

《模式识别(Pattern Recognition)学习笔记(三十六)-- 动态聚类算法》

同时,对应的误差平方和也变为:

《模式识别(Pattern Recognition)学习笔记(三十六)-- 动态聚类算法》

《模式识别(Pattern Recognition)学习笔记(三十六)-- 动态聚类算法》

由于其他聚类都没有发生变化,所以总体误差平方和的变化仅仅取决于上述两个公式的变化。显然,移出一样本会导致类的平方误差减小,而移入会导致增大,如果减小量大于增加量,则当前进行的样本移动就有利于总体误差平方和的减少,于是就进行这一移动操作,否则的话不操作。

2.核心思想

1)初始划分k个聚类《模式识别(Pattern Recognition)学习笔记(三十六)-- 动态聚类算法》,利用公式(1)和(2)分别计算出各聚类的均值和误差平方和;

2)任意取出一个样本y,假设《模式识别(Pattern Recognition)学习笔记(三十六)-- 动态聚类算法》;

3)如果样本数目《模式识别(Pattern Recognition)学习笔记(三十六)-- 动态聚类算法》等于1,则跳至2),否则继续;

4)计算增加量和减小量:

《模式识别(Pattern Recognition)学习笔记(三十六)-- 动态聚类算法》

《模式识别(Pattern Recognition)学习笔记(三十六)-- 动态聚类算法》

j≠i;

5)考察增加量《模式识别(Pattern Recognition)学习笔记(三十六)-- 动态聚类算法》中的最小量《模式识别(Pattern Recognition)学习笔记(三十六)-- 动态聚类算法》,如果《模式识别(Pattern Recognition)学习笔记(三十六)-- 动态聚类算法》《模式识别(Pattern Recognition)学习笔记(三十六)-- 动态聚类算法》,就把样本y从《模式识别(Pattern Recognition)学习笔记(三十六)-- 动态聚类算法》移到《模式识别(Pattern Recognition)学习笔记(三十六)-- 动态聚类算法》

6)重新计算各聚类的均值和误差平方和;

7)在连续n次迭代后,如果总的误差平方和不再改变,就停止迭代,否则跳至2);

不难看出,这是一个局部搜索算法,并不能保证收敛到全局最优解,且算法的结果收初始划分和样本调整顺序的影响。

初始划分的方法有很多,一般的做法是,先选择一些代表样本点作为初始聚类的核心,然后根据距离把其余的样本划分到各初始类中,代表点的选取有以下常用方法:

1)经验:利用经验确定聚类数,从数据中找出从直观上看来是比较适合的代表点;

2)随机:将全部数据随机分成k类,计算每类的质心,将这些质心点作为每类的代表点;

3)按照样本的自然排列顺序或者将样本随机排序后用前k个数据点作为代表点;

4)先把全体样本看做是一个大的聚类,代表点为其均值,然后确定两个聚类问题的代表点,就是一聚类划分的总均值和离它最远的点,以此类推,得到k个聚类问题的代表点;

另外关于聚类数目k的确定,通常来说数目越多,误差越小,当每一个样本都自成一类时,误差等于0,当然这是现实情况中不会发生的,实际应用中可以根据具体应用领域比较聚类结果,来决定那个聚类数目比较合理。

总结:K-Means算法中,每调整一个样本,就要重新计算一次均值和误差,这种更改均值的方法属于逐个样本的修正;

算法的难点:聚类数目的动态决定,类的合并与分裂;

二 ISODATA算法

1.与K-Means算法的不同

ISODATA算法,叫做迭代自组织数据分析技术,可以看做是K-Means的一种改进,他们之间主要有两点不同:1)ISODATA算法不是每调整一个样本的类别就更新一次各类的均值,而是在把全部样本调整完后才更新计算各类的均值,相比于K-Means的逐个样本修正,这种均值的更新方法叫做成批样本修正,可以提高计算效率;2)ISODATA算法在聚类过程中引入了对类别的评判准则,可以根据这些准则自动的将某些类别合并或分裂,从而得到更合理的聚类结果,也在一定程度上打破了事先给定类别数目的限制。

2.ISODATA算法的算法步骤

设有N个样本组成的样本集为《模式识别(Pattern Recognition)学习笔记(三十六)-- 动态聚类算法》,设定以下参数:

《模式识别(Pattern Recognition)学习笔记(三十六)-- 动态聚类算法》:期望得到的聚类数

《模式识别(Pattern Recognition)学习笔记(三十六)-- 动态聚类算法》:一个聚类中的最少样本数

《模式识别(Pattern Recognition)学习笔记(三十六)-- 动态聚类算法》:标准差参数

《模式识别(Pattern Recognition)学习笔记(三十六)-- 动态聚类算法》:合并参数

《模式识别(Pattern Recognition)学习笔记(三十六)-- 动态聚类算法》:每次迭代允许合并的最大聚类对数

《模式识别(Pattern Recognition)学习笔记(三十六)-- 动态聚类算法》:最大迭代次数

1)初始化,设置初始聚类数c(不一定等于K),利用与K-Means相同的办法确定c个初始中心《模式识别(Pattern Recognition)学习笔记(三十六)-- 动态聚类算法》

2)把所有样本分到距离初始中心最近的类《模式识别(Pattern Recognition)学习笔记(三十六)-- 动态聚类算法》

3)如果某个类《模式识别(Pattern Recognition)学习笔记(三十六)-- 动态聚类算法》中样本数目过少,即《模式识别(Pattern Recognition)学习笔记(三十六)-- 动态聚类算法》,则简介去掉该类:根据个样本到其他类中心的而距离分别合并入其他类,同时置c=c-1;

4)重新计算均值:

《模式识别(Pattern Recognition)学习笔记(三十六)-- 动态聚类算法》

5)计算第j类样本与其中心的平均距离和总平均距离:

《模式识别(Pattern Recognition)学习笔记(三十六)-- 动态聚类算法》

《模式识别(Pattern Recognition)学习笔记(三十六)-- 动态聚类算法》

6)如果达到最大迭代次数,停止;否则:

若当前聚类数c≤K/2,分裂转7);

若当前聚类数c≥2K,或是偶数次迭代,合并转8);

7)聚类的分裂

     a.对每各类,运用如下公式求出各维标准差《模式识别(Pattern Recognition)学习笔记(三十六)-- 动态聚类算法》:

《模式识别(Pattern Recognition)学习笔记(三十六)-- 动态聚类算法》

其中,《模式识别(Pattern Recognition)学习笔记(三十六)-- 动态聚类算法》是第k个样本的第i个分量;《模式识别(Pattern Recognition)学习笔记(三十六)-- 动态聚类算法》是当前第j个聚类中心的第i个分量;《模式识别(Pattern Recognition)学习笔记(三十六)-- 动态聚类算法》是第j类第i个分量的标准差;d为样本维数;

     b.对每个类,求出标准差最大的分量《模式识别(Pattern Recognition)学习笔记(三十六)-- 动态聚类算法》;

     c.对各类的《模式识别(Pattern Recognition)学习笔记(三十六)-- 动态聚类算法》,若存在某个类的《模式识别(Pattern Recognition)学习笔记(三十六)-- 动态聚类算法》> 《模式识别(Pattern Recognition)学习笔记(三十六)-- 动态聚类算法》《模式识别(Pattern Recognition)学习笔记(三十六)-- 动态聚类算法》《模式识别(Pattern Recognition)学习笔记(三十六)-- 动态聚类算法》,且《模式识别(Pattern Recognition)学习笔记(三十六)-- 动态聚类算法》,或c≤K/2,则将《模式识别(Pattern Recognition)学习笔记(三十六)-- 动态聚类算法》分裂为两类,置c=c+1,分裂的两类中心分别为:

《模式识别(Pattern Recognition)学习笔记(三十六)-- 动态聚类算法》

《模式识别(Pattern Recognition)学习笔记(三十六)-- 动态聚类算法》

其中,分裂项可以为《模式识别(Pattern Recognition)学习笔记(三十六)-- 动态聚类算法》,0<k≤1;也可以为《模式识别(Pattern Recognition)学习笔记(三十六)-- 动态聚类算法》,即只在《模式识别(Pattern Recognition)学习笔记(三十六)-- 动态聚类算法》对应的特征分量上把这一类分开。

8)聚类的合并

a.计算各类中心每两个之间的距离《模式识别(Pattern Recognition)学习笔记(三十六)-- 动态聚类算法》

b.比较《模式识别(Pattern Recognition)学习笔记(三十六)-- 动态聚类算法》《模式识别(Pattern Recognition)学习笔记(三十六)-- 动态聚类算法》,对小于《模式识别(Pattern Recognition)学习笔记(三十六)-- 动态聚类算法》者进行升序排列:《模式识别(Pattern Recognition)学习笔记(三十六)-- 动态聚类算法》

c.从最小的《模式识别(Pattern Recognition)学习笔记(三十六)-- 动态聚类算法》开始,把每个《模式识别(Pattern Recognition)学习笔记(三十六)-- 动态聚类算法》对应的《模式识别(Pattern Recognition)学习笔记(三十六)-- 动态聚类算法》《模式识别(Pattern Recognition)学习笔记(三十六)-- 动态聚类算法》合并,组成新类,新的中心为:《模式识别(Pattern Recognition)学习笔记(三十六)-- 动态聚类算法》,同时置c=c-1,注意每一次迭代中要避免同一类被合并两次;

9)若是最后一次迭代,终止;否则迭代次数加1,转2);

    原文作者:聚类算法
    原文地址: https://blog.csdn.net/eternity1118_/article/details/51980585
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞