系统聚类分析课程设计《空间分析》系统聚类算法及编程实现学院:地质工程与测绘学院专业:遥感科学与技术班级:2011260601 学号: 学生姓名:指导老师:目录第1章前言第2章算法设计背景2.1聚类要素的数据处2.2距离的计算第3章算法思想与编程实现3.1算法思3.2用Matlab编程实3.2.1程序代322编程操作结果4.1 K .均值聚类法的应用4.2 K.均值聚类法的优缺点 (14)第5章课程设计总结 (14)主要参考文献 (15)第一章前言本课题是根据李斌老师所教授的《空间分析》课程内容及要求而选定 的,是对于系统聚类算法的分析研究及利用相关软件的编程而实现系统聚 类。
研究的是系统聚类算法的分析及编程实现,空间聚类的目的是对空间 物体的集群性进行分析,将其分为几个不同的子群(类)。
子群的形成的 是地理系统运作的结果,根据此可以揭示某种地理机制。
此外,子群可以 作为其它分析的基础,例如,公共设施的建立一般地说是根据居民点群的 分布,而不是具体的居民住宅的分布来布置的,因此需要对居民点群进行 聚类分析以形成若干居民点子群,这样便于简化问题,突出重点。
空间聚类可以采用不同的算法过程。
在分析之初假定n 个点自成一类,然 后逐步合并,这样在聚类的过程中,分类将越来越少,宜至聚至一个适当的 分类数目,这一聚类过程称之为系统聚类。
常见的聚类分析方法有系统聚类 法、动态聚类法和模糊聚类法等。
下面主要介绍系统聚类算法,并基于Matlab 软件用K-means 算法(即k-均值算法)来实现系统聚类的算法编程。
第二章算法设计背景2. 1聚类要素的数据处理假设有m 个聚类的对象,每一个聚类对象都有个要素构成。
它们所对应 的要素数据可用表3.4.1给出。
在聚类分析中,常用的聚类要素的数据处 理方法有如下几种。
第4章K .均值算法应用与优缺点1313①总和标准化②标准差标准化③极大值标准化经过这种标准化所得的新数据,各要素的极大值为1,其余各数值小于L ④极差的标准化经过这种标准化所得的新数据,各要素的极大值为1,极小值为0,其余的数值均在。
与1之间。
2. 2距离的计算距离是事物之间差异性的测度,差异性越大,则相似性越小,所以距离是系统聚类分析的依据和基础。
选择不同的距离,聚类结果会有所差异。
在地理分区和分类研究中,往往采用几种距离进行计算、对比,选择一种较为合适的距离进行聚类。
第三章算法思想与编程实现3. 1算法思想我们己经指出系统聚类方法首先将n个空间点看做是n个子群,然后根据所选用的聚类统计量来计算n个子群之间的关系。
对于距离,计算n个子群两两之间的距离,首先选择距离最近的两个子群(点)归为一个新的子群,这样就得到n-1个子群两两之间的聚类统计量,继续选择距离最近的子群合并,再得到n-2个子群……,依此类推,直到所有的子群全部合并。
K^neans算法是硬聚类算法,是典型的局域原型的目标函数聚类方法的代表,它是数据点到原型的某种距离作为优化的目标函数,利用函数求极值的方法得到迭代运算的调整规则。
K-means算法以欧式距离作为相似度测度,它是求对应某一初始聚类中心向量V最有分类,使得评价指标J最小。
算法采用误差平方和准则函数作为聚类准则函数。
K-均值算法的聚类准则是使每一聚类中,多模式点到该类别的中心的距离的平方和最小。
其基本思想是:通过迭代,主次移动各类的中心,直到得到最好的聚类为止。
其算法框图如图所示。
具体的计算步骤如下:假设图像上的目标要分为m类,m为己知数。
第一步:适当地选取皿个类的初始中心・・・,Z炒,初始中心的选择对聚类结果有一定的影响,初始中心的选择一般有如下几种方法:1)根据问题的性质和经验确定类别数m,从数据中找出直观上看来比较适合的m个类的初始中心。
2)将全部数据随即地分为m个类型,计算每类的重心,将这些重心作为m个类的初始中心。
第二步:在第k次迭代中,对任一样本X按如下的方法把它调整到m个类别中的某一类别中去。
对于所有的i j, i = 1,2, ・・・,m,如果〃X-Z^/7 < 〃X-Z9〃,则XWS产其中S产是以Z严为中心的类。
第三步:由第二步得到类新的中心N j式中,N,为S产类中的样本数。
Z严)是按照使J最小的原则确定的,J的表达式为:j^Ejkzrii第四步:对于所有的i=l,2…,m,如果ZL*,则迭代结束,否则转到第二步继续迭代。
这种算法的结果受到所选聚类中心的数目和其初始位置以及模式分布的几何性质和读入次序等因素的影响,并且在迭代过程中又没有调整类数的措施,因此可能产生不同的初始分类得到不同的结果,这是这种方法的缺点。
可以通过其他的简单的聚类中心试探方法,如最大距离法,找出初始中心,提高分类效果。
3.2用Mat lab编程实现3. 2.1程序代码对于上述的K-mean算法用Matlab软件实现编程并调用数据小的图片进行聚类分析及编程是否正确性的检测。
具体程序代码如下:%%读取图片Imag = imread('hand, jpg。
;sample = rgb2gray (Imag);[m n] = size (sampIe);sample = reshape (sample, m*n f 1); 渊只能读取三个波段%%将彩色图片转换为灰度图片%我读取图片的维数%%将矩阵变换为m*n行1列的向量k = 4; %%分成4类t = 0;%%控制循环次数flag = 0;燧一个和samp I e等维数的标记向・ocentrel = 80;%%选取第1类聚类中心ocentre2 = 160;%%选取第2类聚类中心ocentre3 = 220;%%选取第3类聚类中心ocentre4 = 255;%%选取第4类聚类中心samp I e = doub I e (samp I e) ; %北将u i nt8 类型转换为doub I e 型wh iIe t = 0%fsample1 = 0;%fsamp Ie2 = 0;%fsamp Ie3 = 0;%fsamp Ie4 = 0;fsample = zeros (4,1);num = zeros (4t 1);dis = zeros(1,4);for i = 1:m*n%a = 5 - 2;%b = 2 - 5;dis(1) = abs(sample(i) - ocentrel); %%求到第 1 个聚类中心距离dis(2) = abs (sampled) - ocentre2); %%求到第 2 个聚类中心距离d i s (3) = abs (samp Ie (i) - ocentre3): %%求到第 3 个聚类中心距离dis(4) = abs(sample(i) - ocentre4); 求到第4个聚类中心距离mindis = min([dis(1) dis(2) dis(3) dis(4)]) ; %%求最小的距离则给dis2 %选取最小值,第一个值给dis1,第二个值给dis2,判断dis2<dis1f值于dis1,计算第三个距离给dis2,返回第三步,循环sw i tch mindiscase dis(1)%flag = cat(1,flag.1); %%将标记数组赋值1,该点属于第1类%fsampIe1 = cat(1, fsampIe1sample(i));rflag ⑴=1;fsample(1) = fsampIe(1) + sample(i):num (1) = num(1) + 1;case d i s (2)%flag = cat(1,flag, 2); %%将标记数组赋值2,该点属于第2类%fsamp Ie2 = cat(1, fsampI e2f samp Ie(i));flag(i) = 2;f samp I e (2) = f samp I e (2) + samp I e (i);num (2) = num (2) + 1:case d i s (3)%flag = cat (1, fl ag. 3); %%将标记数组赋值3,该点属于第3类%fsamp Ie3 = cat(1, fsamp Ie3y samp Ie (i));flag ⑴=3;f samp I e (3) = f samp I e (3) + sample (i);num (3) = num (3) + 1;case d i s (4)%flag = cat (1,fl ag, 4); %%将标记数组赋值4,该点属于第4类XfsampIe4 = cat (1 f fsampIe4, sample(i));flag(i) = 4;fsampIe(4) = fsampIe(4) + sample(i):num ⑷=num ⑷ + 1;endend%%重新计算聚类中心%[m1 n1] = size(fsamplel):%[m2 n2] = s i ze (fsampIe2);% [m3 n3] = s i ze (f samp I e3):%[m4 n4] = s i ze (f samp I e4):%ncentre1 = sum (fsample1)/(m1 - 1);%ncentre2 = sum(fsamp Ie2)/(m2 - 1);%ncentre3 = sum (fsamp Ie3)/(m3 - 1);%ncentre4 = sum(fsamp Ie4) /(m4 -1);%flag%fsampIencentrel = fsample(1)/num(1):ncentre2 = fsamp Ie(2)/num(2):ncentre3 = fsamp I © (3)/num (3):ncentre4 = fsamp Ie (4)/num (4):沛lag ⑴=[];if ncentrel = ocentrel && ncentre2 = ocentre2...&& ncentre3 = ocentre3 && ncentre4 = ocentre4 for i = 1:m*n switch flag(i)case 1samp Ie (i) = 60;case 2samp Ie(i) =120;case 3samp le (i) = 180;case 4samp 16 (i) = 240;endendt = 1;elseocentrel = ncentrel;ocentre2 = ncentre2;ocentre3 = ncentre3;ocentre4 = ncentre4;endendsample = uint8 (sample);samp I e = reshape (samp I e9 n);imshow(sample);3. 2. 2编程操作结果实验调用前图片:实验调用后结果截图图片:第四章K-均值算法应用与优缺点4.1K-均值聚类法的应用①在机械设备铁路监测技术中的应用。