聚类算法:ISODATA算法

1. 与K-均值算法的比较

–K-均值算法通常适合于分类数目已知的聚类,而ISODATA算法则更加灵活;

–从算法角度看, ISODATA算法与K-均值算法相似,聚类中心都是通过样本均值的迭代运算来决定的;

–ISODATA算法加入了一些试探步骤,并且可以结合成人机交互的结构,使其能利用中间结果所取得的经验更好地进行分类。

2. ISODATA算法基本步骤和思路

(1)  选择某些初始值。可选不同的参数指标,也可在迭代过程中人为修改,以将N个模式样本按指标分配到各个聚类中心中去。

(2)  计算各类中诸样本的距离指标函数。

(3)~(5)按给定的要求,将前一次获得的聚类集进行分裂和合并处理((4)为分裂处理,(5)为合并处理),从而获得新的聚类中心。

(6)  重新进行迭代运算,计算各项指标,判断聚类结果是否符合要求。经过多次迭代后,若结果收敛,则运算结束。

3. ISODATA算法流程图:

4.ISODATA算法

第一步:输入$N$个模式样本$\{x_i, i = 1, 2, …, N\}$

预选$N_c$个初始聚类中心$\{ z_1 ,z_2 , \ldots z_{N_c } \} $,它可以不等于所要求的聚类中心的数目,其初始位置可以从样本中任意选取。

预选:$K$  = 预期的聚类中心数目;

$\theta_N$ = 每一聚类域中最少的样本数目,若少于此数即不作为一个独立的聚类;

$\theta_S$ = 一个聚类域中样本距离分布的标准差;

$\theta_c$= 两个聚类中心间的最小距离,若小于此数,两个聚类需进行合并;

$L$= 在一次迭代运算中可以合并的聚类中心的最多对数;

$ I$  = 迭代运算的次数。

第二步:将$N$个模式样本分给最近的聚类$S_j$,假若$D_j = \min \{ \left\| {x - z_i } \right\|,i = 1,2, \cdots N_c \} $

,即$||x-z_j||$的距离最小,则$x \in S_j $。

第三步:如果$S_j$中的样本数目SjN,则取消该样本子集,此时Nc减去1。

(以上各步对应基本步骤(1))

第四步:修正各聚类中心

\[
\begin{array}{*{20}c}
{z_j = \frac{1}{{N_j }}\sum\limits_{x \in S_j } x ,} & {j = 1,2, \cdots ,N_c } \\
\end{array}
\]

第五步:计算各聚类域Sj中模式样本与各聚类中心间的平均距离

\[
\begin{array}{*{20}c}
{\bar D_j = \frac{1}{{N_j }}\sum\limits_{x \in S_j } {\left\| {x - z_j } \right\|} ,} & {j = 1,2, \cdots ,N_c } \\
\end{array}
\]

第六步:计算全部模式样本和其对应聚类中心的总平均距离

\[
\bar D = \frac{1}{N}\sum\limits_{j = 1}^N {N_j \bar D_j } 
\]

(以上各步对应基本步骤(2))

第七步:判别分裂、合并及迭代运算

  1. 若迭代运算次数已达到I次,即最后一次迭代,则置θc =0,转至第十一步。
  2. 若$N_c \le \frac{K}{2}$
    ,即聚类中心的数目小于或等于规定值的一半,则转至第八步,对已有聚类进行分裂处理。
  3. 若迭代运算的次数是偶数次,或$N_c \ge 2K$
    ,不进行分裂处理,转至第十一步;否则(即既不是偶数次迭代,又不满足$N_c \ge 2K$),转至第八步,进行分裂处理。

(以上对应基本步骤(3))

第八步:计算每个聚类中样本距离的标准差向量

\[
\sigma _j = (\sigma _{1j} ,\sigma _{2j} , \ldots ,\sigma _{nj} )^T 
\]

其中向量的各个分量为

\[
\sigma _{ij} = \sqrt {\frac{1}{{N_j }}\sum\limits_{k = 1}^{N_j } {(x_{ik} - z_{ij} )^2 } } 
\]

式中,i = 1, 2, …, n为样本特征向量的维数,j = 1, 2, …, Nc为聚类数,Nj为Sj中的样本个数。

第九步:求每一标准差向量{σj, j = 1, 2, …, Nc}中的最大分量,以{σjmax, j = 1, 2, …, Nc}代表。

第十步:在任一最大分量集{σjmax, j = 1, 2, …, Nc}中,若有σjmaxS ,同时又满足如下两个条件之一:

  1. $\bar D_j > \bar D$和Nj > 2(θN + 1),即Sj中样本总数超过规定值一倍以上,
  2. $N_c \le \frac{K}{2}$

则将zj 分裂为两个新的聚类中心和,且Nc加1。 中对应于σjmax的分量加上kσjmax,其中;中对应于σjmax的分量减去kσjmax

如果本步骤完成了分裂运算,则转至第二步,否则继续。

(以上对应基本步骤(4)进行分裂处理)

第十一步:计算全部聚类中心的距离

\[D_{ij} = || z_i - z_j ||,i = 1, 2, …, N_c-1 ,j =i+1, …, N_c\]

第十二步:比较Dij 与θc 的值,将Dij <θc 的值按最小距离次序递增排列,即

\[
\{ D_{i_1 j_1 } ,D_{i_2 j_2 } , \ldots ,D_{i_L j_L } \} 
\]

式中$D_{i_1 j_1 } < D_{i_2 j_2 } < \ldots < D_{i_L j_L } $。

第十三步:将距离为$D_{i_kj_k}$的两个聚类中心$Z_{i_k}$和$Z_{j_k}$合并,得新的中心为:

\[z_k^\ast= \frac{1}{{N_{i_k } + N_{j_k } }}[N_{i_k } z_{i_k } + N_{j_k } z_{j_k } ],k = 1,2, \cdots ,L\]

式中,被合并的两个聚类中心向量分别以其聚类域内的样本数加权,使$Z_k^\ast$为真正的平均向量。

(以上对应基本步骤(5)进行合并处理)

第十四步:如果是最后一次迭代运算(即第I次),则算法结束;否则,若需要操作者改变输入参数,转至第一步;若输入参数不变,转至第二步。

在本步运算中,迭代运算的次数每次应加1。

[算法结束]

5.例子:试用ISODATA算法对如下模式分布进行聚类分析:

\[\{x_1(0,0),x_2(3,8),x_3(2,2),x_4(1,1),x_5(5,3),x_6(4,8),x_7(6,3),x_8(5,4),x_9(6,4),x_{10}(7,5)\}\]

我们可以知道,N=10,n=2。假设取初始值$N_c=1$,z1=x1=(0 0)T,则运算步骤如下:

(1)   设置控制参数

取K=3,θN=1,θS=1,θc=4,L=1,I=4

(2)   按最小距离原则将模式集(xi)中每个模式分到某一类中。

由于此时只有一个聚类中心,因此S1={x1, x2, …, x10},N1=10

(3)   因N1N ,无子集可抛

(4)   修改聚类中心

\[
z_1 = \frac{1}{{N_1 }}\sum\limits_{x \in S_1 } {x = \left( {\begin{array}{*{20}c}
{3.9} \\
{3.8} \\
\end{array}} \right)} 
\]

(5)   计算模式样本与聚类中心间的平均距离$\bar D_1 $

\[
{\bar D_1 = \frac{1}{{N_1 }}\sum\limits_{x \in S_1 } {\left\| {x - z_1 } \right\|} = 3.0749}
\]

(6)   计算全部模式样本和其对应聚类中心的总平均距离

\[
\bar D = \bar D_1 = 3.0749
\]

(7)   因不是最后一次迭代,且$N_c<K/2$,进入(8)

(8)   计算S1中的标准差向量

\[
\sigma _1 = \left( {\begin{array}{*{20}c}
{2.2113} \\
{2.5219} \\
\end{array}} \right)
\]

(9) $\sigma_{1\max}$  中的最大分量是2.5219,因此 $\sigma_{1\max}= 2.5219$。

(10)因$\sigma_{1\max}>\theta_s$ 且$N_c<\frac{K}{2}$,可将z1分裂成两个新的聚          类。设$r_j = 0.5\sigma _{1\max } \approx 1.261$.则

\[
z_1^ + = \left( {\begin{array}{*{20}c}
{3.9} \\
{5.061} \\
\end{array}} \right),z_1^ - = \left( {\begin{array}{*{20}c}
{3.9} \\
{2.539} \\
\end{array}} \right)
\]

为方便起见,将$z_1^+$和$z_1^-$表示为z1和z2,Nc加1 ,$N_c=2$.

(11)   重新进行分类


样本点


特征值


到z1的距离


到z2的距离


聚类结果


X1


0


0


6.3893


4.6537


S2


X2


3


8


3.0737


5.5347


S1


X3


2


2


3.6027


1.975


S2


X4


1


1


4.9902


3.2831


S2


X5


5


3


2.3362


1.1927


S2


X6


4


8


2.9407


5.4619


S1


X7


6


3


2.9424


2.15


S2


X8


5


4


1.5283


1.8288


S1


X9


6


4


2.3528


2.5582


S1


X10


7


5


3.1006


3.9581


S1

\[
{\rm{S}}1 = \{ {\rm{x2,x6,x8,x9,x10\} ,N}}_1 = 5
\]

\[
{\rm{S2 = \{ x1,x3,x4,x5,x7\} ,N}}_2 = 5
\]

(12)   因N1N 且N2N,无子集可抛。

(13)   修改聚类中心

\[
{z_1 = \frac{1}{{N_1 }}\sum\limits_{x \in S_1 } {x = \left( {\begin{array}{*{20}c}
5 \\
{5.8} \\
\end{array}} \right)} }
\]

\[
{z_2 = \frac{1}{{N_2 }}\sum\limits_{x \in S_2 } {x = \left( {\begin{array}{*{20}c}
{2.8} \\
{1.8} \\
\end{array}} \right)} }
\]

(14)   计算模式样本与聚类中心间的平均距离$\bar D_j ,j=1,2$

\[
{\bar D_1 = \frac{1}{{N_1 }}\sum\limits_{x \in S_1 } {\left\| {x - z_1 } \right\|} = {\rm{ 2}}{\rm{.2806}}}
\]

\[
{\bar D_2 = \frac{1}{{N_2 }}\sum\limits_{x \in S_2 } {\left\| {x - z_2 } \right\|} = {\rm{2}}{\rm{.4093}}}
\]

(15)   计算全部模式样本和其对应聚类中心的总平均距离$\bar D$

\[
\bar D = \frac{1}{N}\sum\limits_{j = 1}^N {N_j \bar D_j } = \frac{1}{{10}}\sum\limits_{j = 1}^2 {N_j \bar D_j = {\rm{2}}{\rm{.345}}} 
\]

(16)   因是偶数次迭代,所以进行合并

(17)   计算聚类对之间的距离

\[
{D_{12} = \left\| {z_1 - z_2 } \right\| = {\rm{4}}{\rm{.5651}}}
\]

(18)   比较$D_{12}$ 与θc ,$D_{12}$>θc,所以聚类中心不发生合并

(19)   没有达到所需的聚类数,所以继续进行,重新分类


样本点


特征值


到z1的距离


到z2的距离


聚类结果


X1


0


0


7.6577


3.3287


S2


X2


3


8


2.9732


6.2032


S1


X3


2


2


4.8415


0.82462


S2


X4


1


1


6.2482


1.9698


S2


X5


5


3


2.8


2.506


S2


X6


4


8


2.4166


6.3151


S1


X7


6


3


2.9732


3.4176


S1


X8


5


4


1.8


3.1113


S1


X9


6


4


2.0591


3.8833


S1


X10


7


5


2.1541


5.2802


S1

\[
{\rm{S}}1 = \{ {\rm{x2,x6,x7,x8,x9,x10\} ,N}}_1 = 6
\]

\[
{\rm{S2 = \{ x1,x3,x4,x5\} ,N}}_2 = 4
\]

(20)   因N1N 且N2N,无子集可抛。

(21)   修改聚类中心

\[
{z_1 = \frac{1}{{N_1 }}\sum\limits_{x \in S_1 } {x = \left( {\begin{array}{*{20}c}
{{\rm{5}}{\rm{.1667}}} \\
{{\rm{5}}{\rm{.3333}}} \\
\end{array}} \right)} }
\]

\[
{z_2 = \frac{1}{{N_2 }}\sum\limits_{x \in S_2 } {x = \left( {\begin{array}{*{20}c}
2 \\
{1.5} \\
\end{array}} \right)} }
\]

(22)   计算模式样本与聚类中心间的平均距离,$\bar D_1,j=1,2$

\[
{\bar D_1 = \frac{1}{{N_1 }}\sum\limits_{x \in S_1 } {\left\| {x - z_1 } \right\|} = {\rm{2}}{\rm{.2673}}}
\]

\[
{\bar D_2 = \frac{1}{{N_2 }}\sum\limits_{x \in S_2 } {\left\| {x - z_2 } \right\|} = {\rm{1}}{\rm{.868}}}
\]

(23)   计算全部模式样本和其对应聚类中心的总平均距离$\bar D$

\[
\bar D = \frac{1}{N}\sum\limits_{j = 1}^N {N_j \bar D_j } = \frac{1}{{10}}\sum\limits_{j = 1}^2 {N_j \bar D_j = {\rm{ 2}}{\rm{.1076}}} 
\]

(24)   此次是奇数次迭代,并且$N_c>\frac{K}{2}$,所以进行分裂操作

(25)   计算${\rm{S}}1 = \{ {\rm{x2,x6,x7,x8,x9,x10\} }}$

和$S21 = \{ x1,x3,x4,x5\} $

的标准差

\[
\sigma _1 = \left( {\begin{array}{*{20}c}
{1.3437} \\
{1.972} \\
\end{array}} \right),\sigma _2 = \left( {\begin{array}{*{20}c}
{1.8708} \\
{1.118} \\
\end{array}} \right)
\]

(26)${\rm{\sigma }}_{{\rm{1max}}} {\rm{ = 1}}{\rm{.972,\sigma }}_{{\rm{2max}}} {\rm{ = 1}}{\rm{.8708}}$

(27)此时,$\sigma_{1\max}=1.972>\theta_s,N_1=6>2(\theta_N+1)=4$且$\bar D_1>\bar D $,所以满足分裂的条件,将S1进行分裂。

设$\r_j=0.5\sigma_{1\max}\approx 0.986$,则

\[
{z_1^ + = \left( {\begin{array}{*{20}c}
{{\rm{5}}{\rm{.1667}}} \\
{{\rm{6}}{\rm{.3193}}} \\
\end{array}} \right),z_1^ - = \left( {\begin{array}{*{20}c}
{{\rm{5}}{\rm{.1667}}} \\
{{\rm{4}}{\rm{.3473}}} \\
\end{array}} \right)}
\]

为方便起见,将$Z_1^+$和$Z_^-$表示为$Z_{11}$和$Z_{12}$,$N_c$加1,$N_c=3$.

(28)重新进行分类


样本点


特征值


到的距离


到的距离


到的距离


聚类结果


X1


0


0


8.1626


6.7523


2.5


S2


X2


3


8


2.7421


4.247


6.5765


S11


X3


2


2


5.3558


3.9418


0.5


S2


X4


1


1


6.7569


5.3447


1.118


S2


X5


5


3


3.3235


1.3576


3.3541


S12


X6


4


8


2.046


3.8345


6.8007


S11


X7


6


3


3.4223


1.5842


4.272


S12


X8


5


4


2.3253


0.38524


3.9051


S12


X9


6


4


2.4645


0.90278


4.717


S12


X10


7


5


2.2587


1.946


6.1033


S12

\[S11=\{x2,x6\},N_{11}=2\]

\[S12=\{x5,x7,x8,x9,10\},N_{12}=5\]

(29)   因N11N 且N12N且N2N,无子集可抛

(30)   修改聚类中心

\[S2=\{x1,x3,x4\},N_2=3\]

\[
{z_{11} = \frac{1}{{N_{11} }}\sum\limits_{x \in S_{11} } {x = \left( {\begin{array}{*{20}c}
{3.5} \\
8 \\
\end{array}} \right)} }
\]

\[
{z_{12} = \frac{1}{{N_{12} }}\sum\limits_{x \in S_{12} } {x = \left( {\begin{array}{*{20}c}
{5.8} \\
{3.8} \\
\end{array}} \right)} }
\]

\[
{z_2 = \frac{1}{{N_2 }}\sum\limits_{x \in S_2 } {x = \left( {\begin{array}{*{20}c}
1 \\
1 \\
\end{array}} \right)} }
\]

(31)   计算模式样本与聚类中心间的平均距离$\bar D_j$

\[
{\bar D_{11} = \frac{1}{{N_{11} }}\sum\limits_{x \in S_{11} } {\left\| {x - z_{11} } \right\|} = {\rm{ 0}}{\rm{.5}}}
\]

\[
{\bar D_{12} = \frac{1}{{N_{12} }}\sum\limits_{x \in S_{12} } {\left\| {x - z_{12} } \right\|} = {\rm{ 0}}{\rm{.9521}}}
\]

\[
{\bar D_2 = \frac{1}{{N_2 }}\sum\limits_{x \in S_2 } {\left\| {x - z_2 } \right\|} = {\rm{0}}{\rm{.94281}}}
\]

(32)   计算全部模式样本和其对应聚类中心的总平均距离$\bar D$

\[
\bar D = \frac{1}{N}\sum\limits_{}^{} {N_j \bar D_j } = \frac{1}{{10}}\sum\limits_{}^{} {N_j \bar D_j = {\rm{0}}{\rm{.85889}}} 
\]

(33)   因是偶数次迭代,所以进行合并

(34)   计算聚类对之间的距离

 Z11 Z12  Z13 
 Z11
0


4.7885


7.433

Z12 
4.7885


0


5.557

Z2 
7.433


5.557


0

所以

\[
{D_{1112} = \left\| {z_{11} - z_{12} } \right\| = {\rm{4}}{\rm{.7885 > }}\theta _c = 4}
\]

\[
{D_{112} = \left\| {z_{11} - z_2 } \right\| = 7.433{\rm{ > }}\theta _c = 4}
\]

\[
{D_{122} = \left\| {z_{12} - z_2 } \right\| = 5.557{\rm{ > }}\theta _c = 4}
\]

故没有可以合并的类

(35)   最后一次迭代,算法结束。

最终的聚类结果是

\[
S_1 = \{ x_2 ,x_6 \} ,S_2 = \{ x_5 ,x_7 ,x_8 ,x_9 ,x_{10} \} ,S_3 = \{ x_1 ,x_3 ,x_4 \} ,N_2 = 3
\]

6 .聚类结果的评价

迅速评价聚类结果,在上述迭代运算中是很重要的,特别是具有高维特征向量的模式,不能直接看清聚类效果,因此,可考虑用以下几个指标来评价聚类效果:

–聚类中心之间的距离

•距离值大,通常可考虑分为不同类

–聚类域中的样本数目

•样本数目少且聚类中心距离远,可考虑是否为噪声

–聚类域内样本的距离方差

•方差过大的样本可考虑是否属于这一类

模式聚类目前还没有一种通用的放之四海而皆准的准则,往往需要根据实际应用来选择合适的方法。

该资料整理于国科大《模式识别》讲稿和作业。

时间: 2024-10-06 00:53:49

聚类算法:ISODATA算法的相关文章

Matlab实现模糊聚类之IsoData算法

查资料发现于清华模式识别课程 一.模式识别学习目标 模式识别是针对计算机专业的本科生开设的课程,也可作为工程硕士研究生学习使用. 模式识别是研究让计算机识别事物的一门科学,如语音识别.印刷体识别.手写汉字识别等都是计算机识别事物的典型例子.计算机自动识别事物的需求已越来越广泛,因此模式识别是一门重要的专业基础课. 通过此门课的学习可以使学生了解用计算机识别事物的基本原理.方法.了解模式识别中最基本的概念,了解计算机分类识别事物(监督学习)和计算机分析数据(非监督学习)的概念及基本方法,了解人工神

聚类--K均值算法

聚类--K均值算法:自主实现与sklearn.cluster.KMeans调用    1.用python实现K均值算法 K-means是一个反复迭代的过程,算法分为四个步骤:(x,k,y) import numpy as np x = np.random.randint(1,50,[20,1]) y = np.zeros(20) k = 3 # 选取数据空间中的K个对象作为初始中心,每个对象代表一个聚类中心:def initcenter(x, k): kc def initcenter(x,k)

转:机器学习sklearn19.0聚类算法——Kmeans算法

https://blog.csdn.net/loveliuzz/article/details/78783773 机器学习sklearn19.0聚类算法--Kmeans算法 原文地址:https://www.cnblogs.com/ruogu2019/p/10291656.html

聚类之K均值聚类和EM算法

这篇博客整理K均值聚类的内容,包括: 1.K均值聚类的原理: 2.初始类中心的选择和类别数K的确定: 3.K均值聚类和EM算法.高斯混合模型的关系. 一.K均值聚类的原理 K均值聚类(K-means)是一种基于中心的聚类算法,通过迭代,将样本分到K个类中,使得每个样本与其所属类的中心或均值的距离之和最小. 1.定义损失函数 假设我们有一个数据集{x1, x2,..., xN},每个样本的特征维度是m维,我们的目标是将数据集划分为K个类别.假定K的值已经给定,那么第k个类别的中心定义为μk,k=1

处理聚类问题常用算法-----算法岗面试题

● 什么是DBSCAN 参考回答: DBSCAN是一种基于密度的空间聚类算法,它不需要定义簇的个数,而是将具有足够高密度的区域划分为簇,并在有噪声的数据中发现任意形状的簇,在此算法中将簇定义为密度相连的点的最大集合. ● k-means算法流程 参考回答: 从数据集中随机选择k个聚类样本作为初始的聚类中心,然后计算数据集中每个样本到这k个聚类中心的距离,并将此样本分到距离最小的聚类中心所对应的类中.将所有样本归类后,对于每个类别重新计算每个类别的聚类中心即每个类中所有样本的质心,重复以上操作直到

机器学习---算法---k-means算法

转自:https://blog.csdn.net/zhihua_oba/article/details/73832614 k-means算法详解主要内容 k-means算法简介k-means算法详解k-means算法优缺点分析k-means算法改进算法k-means++1.k-means算法简介 ??k-means算法是一种聚类算法,所谓聚类,即根据相似性原则,将具有较高相似度的数据对象划分至同一类簇,将具有较高相异度的数据对象划分至不同类簇.聚类与分类最大的区别在于,聚类过程为无监督过程,即待

【啊哈!算法】算法7:Dijkstra最短路算法

上周我们介绍了神奇的只有五行的Floyd最短路算法,它可以方便的求得任意两点的最短路径,这称为“多源最短路”.本周来来介绍指定一个点(源点)到其余各个顶点的最短路径,也叫做“单源最短路径”.例如求下图中的1号顶点到2.3.4.5.6号顶点的最短路径. <ignore_js_op> 与Floyd-Warshall算法一样这里仍然使用二维数组e来存储顶点之间边的关系,初始值如下. <ignore_js_op> 我们还需要用一个一维数组dis来存储1号顶点到其余各个顶点的初始路程,如下.

【啊哈!算法】算法9:开启树之旅

这是什么?是一个图?不对,确切的说这是一棵树.这哪里像树呢?不要着急我们来变换一下. 是不是很像一棵倒挂的树,也就是说它是根朝上,而叶子朝下的.不像?哈哈,看完下面这幅图你就会觉得像啦. 你可能会问:树和图有什么区别?这个称之为树的东西貌似和无向图差不多嘛.不要着急,继续往下看.树其实就是不包含回路的连通无向图.你可能还是无法理解这其中的差异,举个例子,如下.          上面这个例子中左边的是一棵树,而右边的是一个图.因为左边的没有回路,而右边的存在1->2->5->3->

【啊哈!算法】算法10:二叉树

二叉树是一种特殊的树.二叉树的特点是每个结点最多有两个儿子,左边的叫做左儿子,右边的叫做右儿子,或者说每个结点最多有两棵子树.更加严格的递归定义是:二叉树要么为空,要么由根结点.左子树和右子树组成,而左子树和右子树分别是一棵二叉树. 下面这棵树就是一棵二叉树. 二叉树的使用范围最广,一棵多叉树也可以转化为二叉树,因此我们将着重讲解二叉树. 二叉树中还有连两种特殊的二叉树叫做满二叉树和完全二叉树.如果二叉树中每个内部结点都有两个儿子,这样的二叉树叫做满二叉树.或者说满二叉树所有的叶结点都有同样的深