模式识别与智能信息处理实践
实验一 聚类分析
一、实验目的
通过聚类分析实验,加深对聚类分析基本思想、方法的理解和掌握。 二、实验内容
了解动态、静态聚类算法的特点; 熟练掌握k-均值算法或层次聚类算法; 编写能对实际模式样本正确分类的算法程序。 掌握动态聚类算法的基本思想;
认识类别数、初始类心的选择对k-均值算法聚类结果的影响; 编写能对实际模式样本正确分类的k-均值算法程序。 三、方法手段
设类别数为k,选取k个初始聚类中心,按最小距离原则将各模式分配到k类中的某一类,不断地计算类心和调整各模式的类别使每个模式特征矢量到其所属类别中心的距离平方之和最小 。 四、k-均值算法
(1)从D中随机取k个元素,作为k个簇的各自的中心。
(2)分别计算剩下的元素到k个簇中心的相异度,将这些元素分别划归到相异度最低的簇。 (3)根据聚类结果,重新计算k个簇各自的中心,计算方法是取簇中所有元素各自维度的算
术平均数。
(4)将D中全部元素按照新的中心重新聚类。 (5)重复第4步,直到聚类结果不再变化。 五、k-均值程序运行结果
(1)改变初始类心,观察对聚类结果的影响
若选初始类心是[1 2 3]时的结果为其分为1类共39个,分为2类共61个,分为3类共50个,其中被分为第1类的样本为{51 53 78 101 103 104 105 106 108 109 110 111 112 113 116 117 118 119 121 123 125 126 129 130 131 132 133 135 136 137 138 140 141 142 144 145 146 148 149}
被分为第2类的样本为{52 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 102 107 114 115 120 122 124 127 128 134 139 143 147 150}
被分为第3类的样本为{1 2 3 4 5 6 7 8 9 10
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50}。
若选初始类心是[2 4 5]时其聚类结果为其分为1类共96个,分为2类共22个,分为3类共个32,其中被分为第1类的样本为{51 52 53 54 55 56 57 59 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 95 96 97 98 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150}
被分为第2类的样本为{ 2 3 4 7 9 10 13 14 25 26 30 31 35 39 42 43 46 48 58 61 94 99}
被分为第3类的样本为{1 5 6 8 11 12 15 16 17 18 19 20 21 22 23 24 27 28 29 32 33 34 36 37 38 40 41 44 45 47 49 50}。
可见,初始类心的选择对于K均值算法的影响较大。 (2)改变类别数k,比较其对类内距离平方和的大小的影响
若k=3且选初始类心是[1 2 3]时,其最终各类中心的距离为[1.1657 0.8230 4.0783],若k=4且选初始类心是[1 2 3 4]时,其最终各类中心的距离为[1.3049 0.4917 4.0783 1.3928],可见,改变类别数k,其对类内距离平方和的大小有直接的影响,且k越大,其类内距离平方和距离越小。 六、实验总结
影响k-均值算法结果的因素有:初始类心的选择以及k值的选择,且k-均值算法适用于k值已知的情况,即类别号已知的情况。 七、Kmeans程序
function y=my_Kmeans(k,mid) k=3;%类数
mid=[1 2 3]; %随便给三个聚类中心 %从文本文件读入数据放入X中
load fisheriris;X=meas;k=3;mid=[1 2 3]; %Iris测试数据集 num=size(X,1);%获得X维数大小 for i=1:k
Z(i,:)=X(mid(i),:);%获取k个聚类中心的初始坐标 end
%计算新的聚类中心,K-均值算法的核心部分 temp=[];
while(~isequal(Z,temp)) %聚类中心是否变化,若不变化则停止循环 temp=Z;
class=cell(k,1);%初始化类样本class value=cell(k,1);%初始化类样本的坐标value for j=1:num for t=1:k
D(t)=dist(X(j,:),Z(t,:)');%计算每个样本到类中心的距离 [minu,index]=min(D);%求出离聚类中心最小的一个样本 end
class{index}=cat(1,class{index},j);%将该样本归于一类 value{index}=cat(1,value{index},X(j,:));%存放该类样本的坐标 end
for i=1:k
Z(i,:)=mean(value{i});%计算k类样本的均值,更新聚类中心 end end
celldisp(class);%显示Kmeans聚类结果 D %显示最终类间距离
实验二 判别域代数界面方程法
一、实验目的
通过实验加深对判别域代数界面方程法基本思想、方法的认识,了解线性判别函数的分类能力,熟练掌握感知器算法,或H-K算法,或累积势函数分类法,以及它们各自的适用条件,加深对有监督训练、线性可分、解空间、权空间等概念的理解,编写能对实际模式样本正确分类的算法程序。 二、实验内容
编写能对实际模式样本正确分类的感知器算法,或H-K算法,或累积势函数分类法的算法程序,能对实际模式样本进行正确分类。 三、方法手段
设已知类别模式特征矢量集为{x1,x2,?,xN},类别数为c。
感知器算法是基于一次准则函数的梯度下降法。从任意初始解矢量w0出发,利用产生错分的样本对解矢量进行迭代校正:wk=wk-1+?xi,i=1,2,?,c,k=0,1,2?,?=常数,从而解得线性判决函数d(x)=w’x的解矢量w. 四、感知器算法 1、算法思想
???xw用训练样本检验用'x分类正确否 Yes ?w任选一初始增广权矢量 No ? w对进行校正 No 对所有训练样本都能正确分类? END Yes 校正方法实际上是最优化技术中的负梯度下降法。该算法也是人工神经网络理论中的线性阈值神经元的学习算法。 2、算法原理步骤 类。
????x,x,?,xN?,设给定一个增广的训练模式集12其中每个模式类别已知,它们分属?1类和?2???wk?1(1) 置步数,令增量某正的常数,分别赋给增广权矢量初值(1)的各分量较小的任
意值。
?x(2) 输入训练模式k。 ???w(k)xk。 (3)计算判别函数值
(4)调整增广权矢量,规则是
???????x??w(k)x?0w(k?1)?w(k)??x1和kk;(偏小,故加) ① 如果k,则
???????x??w(k)x?0w(k?1)?w(k)??x2和kk;(偏大,故减) ② 如果k,则
??????????x??w(k)x?0x??w(k)x?0w(k?1)?w(k)。(分类正确,1和k2和k③ 如果k,或k,则?????x,x,?,xN是否都(5)令k?k?1。如果k?N,返至⑵。如果k?N,检验判别函数w?x对12能正确分类。若是,结束;若不是,令k?1,返至(2)。
?x如果训练模式已经符号规范化,即k??2已乘以-1(包括增广分量1),则校正权矢量的规则可统一为
不校正)
???w(k)??若w?(k)xk?0(正确分类)w(k?1)??????w(k)??x?若w(k)x) k?k?0(错误分类
在用全部模式训练完一轮后只要还有模式被判错,则需要进行第二轮迭代,用全部训练模式再训练一次,建立新的权矢量。如果对训练模式还有错分的,则进行第三轮迭代,余类推,
?直至对所有训练模式均能正确分类为止,此时的w即为所求的权矢量。 五、感知器算法实验结果
(1)改变权矢量初值,观察对算法的影响
已知w1:X1=(0 0)’,X2=(1 0)’,X3=(1 1)’,X4=(1 2)’;
w2:X5=(1 3)’,X6=(2 3)’,X7=(3 2)’,X8=(3 3)’, 若步长因子?=1不变,权初始值取w=[0 0 0],则需迭代eth0=15步,若权初始值取w=[1 1 1],则需迭代eth0=18步,可见,权初始值选取的不同,将直接导致算法的收敛速度不同。 (2)改变步长因子?,观察对算法的影响
若权初始值取w=[0 0 0]不变,取步长因子?=1,则需迭代eth0=15步,若取步长因子?=0.1,则需迭代eth0=16步,可见,步长因子?选取的不同,也将直接导致算法的收敛速度不同。 (3)算法的适用性
若已知w1:X1=(1 3)’,X2=(2 3)’,X3=(1 1)’,X4=(1 2)’;
w2:X5=(0 0)’,X6=(1 0)’,X7=(3 2)’,X8=(3 3)’,则导致该程序死循环,可
见,感知器算法只适用两类样本线性可分的条件下(图1),若希望在两类样本线性不可分的条件下,构造一判决平面,则可考虑使用势函数。