基于isodata算法的Iris数据分类
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一.
基于isodata 算法的Iris 数据分类
通过对Iris data 采纳Isodata 算法进行聚类,把握Isodata 算法的原理以及具体实施步骤。
二.实验原理
C 均值算法比较简单,但它的自我调整能力也比较差。
这要紧表现在类别数不能改变,受代表点初始选择的阻碍也比较大。
ISODATA 算法的功能与C 均值算法相比,在以下几方面有改进。
1.考虑了类别的合并与分裂,因而有了自我调整类别数的能力。
合并要紧发生在某一类内样本个数太少的情形,或两类聚类中心之间距离太小的情形。
为此设有最小类内样本数限制N θ,以及类间中心距离参数C θ。
假设显现两类聚类中心距离小于C θ的情形,可考虑将此两类合并。
分裂那么要紧发生在某一类别的某重量显现类内方差过大的现象,因而宜分裂成两个类别,以坚持合理的类内方差。
给出一个对类内重量方差的限制参数S θ,用以决定是否需要将某一类分裂成两类。
2.由于算法有自我调整的能力,因而需要设置假设干个操纵用参数,如聚类数期望值K ,每次迭代承诺合并的最大聚类对数L 、及承诺迭代次数I 等。
下面我们将ISODATA 算法的步骤列出: 步骤1(确定操纵参数及设置代表点)
需确定的操纵参数为,聚类期望数K ,一个聚类中的最少样本数N θ,标准偏差操纵参数,用于操纵分裂S θ,类间距离操纵参数,用于操纵合并C θ,每次迭代承诺合并的最大聚类对数L ,承诺迭代的次数I 。
设初始聚类数为c 及聚类中心,1,2...,i m i c =。
步骤2(分类)
对所有样本,按给定的c 个聚类中心,以最小距离进行分类,即假设
步骤3(撤消类内样本数过小类别)
假设有任何一个类j Γ,其样本数j N N θ<,那么舍去j Γ,令1c c =-,将j Γ原样本分配至其它类;
步骤4(更新均值向量)
按现有样本分类结果,调整均值参数
步骤5(运算类内平均距离)
每类中各样本离开均值的平均距离
步骤6(运算整个样本集偏离均值的平均距离)
步骤7(入口选择)
如这是最后一次迭代(取决于迭代上限I ),那么转步骤11,并设置0C θ=,防止合并发生。
假如/2c K ≤,那么转向步骤8,执行分裂步骤; 假如2c K ≥,那么转向步骤11,执行合并步骤。
步骤8(求各类内各分类标准偏差) 对每个聚类j ,求其标准偏差
式中ki y 是j 类中第k 个样本的第i 重量,ji m 是j m 的第i 个重量,
ij σ是第j 个聚类第i 个重量的标准偏差,D 是样本特点维数。
步骤9(求每类具有最大标准偏差的重量)
指每类具有最大标准偏差的重量。
步骤10(分裂运算步骤)
假设任一个max ,1,2,...,j j c σ=有max j s σθ>,同时有(a) j D D >且2(1)j N N θ>+,或有(b) /2c K ≤,那么把j Γ分裂成两个聚类,其中心相应为j m +
与j m -
,把原先的j m 取消,且令1c c =+,由于j m +
与j m -
值设置不当将会导致阻碍到其它类别,因此j m +
与j m -
可按以下步骤运算:
给定一k 值,01k <<;
其中k 值应使j Γ中的样本到j m +与j m -
的距离不同,
但又应使j Γ中的样本仍旧在分裂后的新样本类中。
步骤11(运算类间聚类中心距离) i 类与j 类的类间距离
步骤12(列出类间距离过近者)
比较ij D 与c θ并将小于c θ的ij D 按上升次序排列
该队列最大个数是操纵合并对数的参数L
步骤13(执行合并)
从类间距离最大的两类开始执行合并过程,现在需将j m 与i m 合并,得
且1c c =-,从第二个22i j D 开始,那么要检查其涉及类别是否已在前面合并过程中被合并,如两者并未被合并,那么执行合并过程。
步骤14(终止步骤)
如是最后一次迭代那么终止,否那么可依照需要转步骤1或步骤2,转步骤1是为了更换操纵数。
迭代计数要加1。
以上是整个ISODATA 算法的运算步骤。
能够看出ISODATA 算法与C 均值算法一样,差不多上以与代表点的最小距离作为样本聚类的依据,因此比较适合各类物体在特点空间以超球体分布的方式分布,关于分布形状较复杂的情形需要采纳别的度量。
ISODATA 算法与C 均值算法的要紧不同在于自我操纵与调整的能力不同。
它们的另一个不同点是,C 均值算法的类均值参数在每个样本归入时赶忙修改,因而称为逐个样本修正法,而ISODATA 算法的均值向量或聚类中心参数是在每一次迭代分类后修正的,因而称为成批样本修正法。
三.实验过程及结果分析
按照算法过程进行仿真,第一设置算法中所需要的操纵参数,操纵参数的选取有多种选择组合,那个地点,我们先设置一组操纵参数,对Iris data 进行聚类,说明算法的实施过程以及对得到的结果进行分析。
参数设置如以下图所示:
其中,确定初始聚类中心个数后,在150个原始数据中随机选择10个作为聚类中心,然后对原始150个数据以该10个聚类中心以最小距离进行聚类。
结果如下:
结果中的center 矩阵为聚类中心矩阵,每一列代表一聚类中心,每一列前4行为聚类中心的4个重量,第5行为隶属于该类的数据个数。
将类内个数过少〔小于10〕的聚类中心删除,并对所有数据依照调整后聚类中心重新进行聚类。
完成聚类后,运算每类的均值,作为该类新的聚类中心。
上图中的第二个center 矩阵即为差不多完成均值运算的每类的聚类中心。
完成聚类中心初始化后,开始进行迭代,在第一次迭代中(iterative=1),迭代次数为奇数,然而当前聚类个数72Nc K =>,因此直截了当进入聚类中心合并过程,结果如下所示:
上图中,sortofdis矩阵为两两聚类中心之间的距离矩阵,并按从大到小排列。
每一列代表2类之间的距离,第一行为距离,第2,3行为两类的类别。
值得注意的是类别号即对应为聚类中心在聚类中心矩阵center中的列数。
进入合并步骤不代表一定进行合并处理,当两类的距离小于合并阈值(thmerge=2.5)时,才进行合并处理。
且每次迭代,最多进行2次合并(mergenum=2),且必须是不同的4类。
由结果观看到,第3,4类进行合并,第6,7类进行合并。
合并后得到新的聚类中心矩阵newcenter,可看到,新的矩阵相关于之前的聚类中心矩阵,少了2列。
按照得到的新聚类中心,重新对原始数据进行聚类,得到center矩阵,并检验是否有类内样本个数过少的聚类中心,假设没有,对每类数据进行平均,得到更新后的聚类中心矩阵〔即上图中最后一center矩阵〕,第一次迭代完成。
在第2次迭代中(iterative=2),迭代次数为偶数,直截了当进入合并步骤。
由上图可看出,将3,4类进行了合并处理〔3,4类仅代表其聚类中心在当前聚类中心矩阵第3,4列,与第一次迭代的3,4类不是一样的〕。
之后的处理步骤与之前一致,得到平均后的聚类中心矩阵。
在第一次迭代中(iterative=3),迭代次数为奇数,当前聚类个数32Nc K =<,因此进入聚类中心分裂过程,结果如下所示:
进入分裂步骤,然而否进行分裂处理还需判定每个聚类中样本到聚类中心的标准差,
将每个聚类的标准差向量按列排列,即得到标准差矩阵stdofeach,其中列数代表聚类个数,每行代表聚类中心的一个重量。
因为Iris数据为4维数据,那么标准差矩阵即为4行。
因为3个聚类的标准差向量中的每个重量都小于分裂阈值(thsplit=0.6),因此不进行分裂处理,进入合并过程。
3个聚类中心的两两距离也都大于合并阈值,因此也不进行合并处理。
该次迭代后,按相同的方法得到平均后的聚类中心矩阵。
在第4次迭代中(iterative=4),迭代次数为偶数,直截了当进入合并步骤。
能够看到,第4次迭代中没有进行合并处理,只是对数据按照第3次迭代得到的新聚类中心重新进行聚类,并对聚类后的每类样本进行平均,得到新的聚类中心矩阵。
值得注意的是,在第4次迭代时,进行平均后的聚类中心与为平均之前完全一致,说明第3次聚类结果与第4次聚类结果是完全一致的。
说明算法在第4次迭代时即已收敛,完成了分类。
以后迭代次数结果如下:
能够看到,第5次结果与第4次也完全一致,且可不能再对现有类别进行分裂。
之后迭代结果再无变化,就不将其贴出。
最后得到的聚类中心如下所示:
按照该聚类中心,对数据进行聚类,结果如下:
以上是对150个原始数据分类的结果,前4列为每个数据的4个特点,第5列为该数据的序号,第6列为该数据聚类结果。
类别数1,2,3对应于聚类中心向量在聚类矩阵中的列数,例如类别为1,那么说明该数据隶属于聚类中心矩阵中第1列的聚类中心。
能够看到,前50个数据应分为一类,实验结果显示对前50个数据分类完全正确。
第51到100号数据应属于一类,但聚类结果显示有2个数据被分为了第3类。
第101到150号数据应属于一类,聚类结果显示其中有14个数据被聚到了第2类。
这也与之前的实验结果相近,即1到50号数据与其他可完全分开,后两组数据互相之间不能够完全区分。
改变初始聚类中心个数,再进行聚类,结果如下:
能够看到,第3个重量大于分裂阈值,因此进行分裂处理,分裂处理按照如下公式进行
其中k选为0.4。
注意,只对第3各重量进行修正。
能够看到,在迭代到第8次时,结果已收敛,聚类完成。
最终的聚类中心矩阵为:
对原始数据的分类结果如下:
由聚类结果可得,第一组数据完全分类正确,第二组数据有3个数据分类错误,第三组数据有14个数据分类错误。
由以上两组实验结果可得,Isodata算法能够对Iris数据得到较为理想的分类结果,实验结果不依靠于初始聚类中心个数,但与各操纵参数关系较大,实验时应反复调整,已得到最正确结果。