资源预览内容
第1页 / 共17页
第2页 / 共17页
第3页 / 共17页
第4页 / 共17页
第5页 / 共17页
第6页 / 共17页
第7页 / 共17页
第8页 / 共17页
第9页 / 共17页
第10页 / 共17页
亲,该文档总共17页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
1.1 题目给出 K-均值算法的程序框图,编写程序,自选一组分别属于三类的三维模式样本(图 2.13) ,并给它们进行聚类分析。1.2 算法原理K-均值算法也称 C-均值算法,是根据函数准则进行分类的聚类算法,基于使聚类准则最小化。此处所用的聚类准则函数是聚类集中每一个样本点到该类聚类中心的距离平方和,对于第 j 个聚类集,准则函数定义为式中,S j表示第 j 个聚类集,也称聚类域,其聚类中心为 ; 为第 j 个聚类集 中所jZjNjS包含的样本个数。(1)任选 K 个初始聚类中心 Z1(1),Z 2(1),Z K(1), 。括号内的序号代表寻找聚类中心的迭代运算的次序号。一般可选择样本集中前 K 个样本作为初始聚类中心。(2)按最小距离原则将其余样本分配到 K 个聚类中心中的某一个,即:若 ,则 。式中,k 代min(),()i jXZkXkDPPijXS表迭代运算次序号;K 代表聚类中心的个数。(3)计算各个聚类中心的新向量值 ,1jZ,2j即以均值向量作为新的聚类中心。这一步要分别计算 K 个聚类中心的样本均值向量,故该算法被称为 K-均值算法。(4)如果 , ,则回到(2) ,将模式样本逐个重新分(1)(jjZk1,类,并重复迭代计算;如果 , ,算法收敛,计算完毕。)(jkZ,1.3 程序流程图21jNjijijiJXSP,()()jj XSkJkN开 始输 入 样 本 矩阵绘 制 样 本 数 据 的 散点 图输 入 聚 类 数 目 k得 到 样 本 矩 阵 的 大 小聚 类 数 目 大 于 样 本 个数随 机 选 取 k 个 样 本 作 为 初 始聚 类 中 心N迭 代 次 数 = 1计 算 各 点 到 聚 类 中 心 的距 离输 出 迭 代 次 数 , 聚 类中 心 , 聚 类 结 果按 最 短 距 离 原 则 分配 各 点迭 代 次 数 + 1计 算 各 聚 类 中 心 的新 向 量 值判 断 前 后 两 次 聚 类 中 心 是 否 变 化结 束NY输 入 错 误 , 要 求重 新 输 入 kY1.4 MATLAB 程序代码clear all;clc;data=input(请输入样本数据矩阵:);X=data(:,1);Y=data(:,2);figure(1);plot(X,Y,r*,LineWidth,3);axis(0 9 0 8)xlabel(x);ylabel(y);hold on;grid on;m=size(data,1);n=size(data,2);counter=0;k=input(请输入聚类数目: );if kmdisp(输入的聚类数目过大,请输入正确的 k 值);k=input(请输入聚类数目:);endM=cell(1,m);for i=1:kM1,i=zeros(1,n);endMold=cell(1,m);for i=1:kMold1,i=zeros(1,n);end%随机选取 k 个样本作为初始聚类中心%第一次聚类,使用初始聚类中心p=randperm(m);%产生 m 个不同的随机数for i=1:kM1,i=data(p(i),:);endwhile truecounter=counter+1;disp(第);disp(counter);disp(次迭代);count=zeros(1,k);%初始化聚类 CC=cell(1,k);for i=1:kC1,i=zeros(m,n);end%聚类for i=1:mgap=zeros(1,k);for d=1:kfor j=1:ngap(d)=gap(d)+(M1,d(j)-data(i,j)2;endendy,l=min(sqrt(gap);count(l)=count(l)+1;C1,l(count(l),:)=data(i,:);endMold=M;disp(聚类中心为:);for i=1:kdisp(M1,i);enddisp(聚类结果为:);for i=1:kdisp(C1,i); endsumvar=0;for i=1:kE=0;disp(单个误差平方和为:);for j=1:count(i)for h=1:nE=E+(M1,i(h)-C1,i(j,h)2;endenddisp(E);sumvar=sumvar+E;enddisp(总体误差平方和为:);disp(sumvar);%计算新的聚类中心,更新 M,并保存旧的聚类中心for i=1:kM1,i=sum(C1,i)/count(i);end%检查前后两次聚类中心是否变化,若变化则继续迭代;否则算法停止;tally=0;for i=1:kif abs(Mold1,i-M1,i)TiX若()开 始输 入 两 类样 本 数 据及 初 始 权向 量 值写 成 增 广 向 量形 式 并 进 行 规范 化 处 理迭 代 次 数 = 0校 正 增 量 系 数 = 1计 算 判 别 函 数判 别 函 数 0校 正 权 向 量迭 代 次 数 + 1输 出 权 向量NY绘 制 判 别 函 数结 束2.4MATLAB 程序代码clear all;clc;disp(感知器算法求解两类训练样本的判别函数);Data1=input(请输入第一类样本数据:);Data2=input(请输入第二类样本数据:);W=input(请输入权向量初始值 W(1)=);Expand=cat(1,Data1,Data2);ExpandData1=cat(2,Data1,ones(4,1);ExpandData2=cat(2,Data2.*-1,ones(4,1).*-1);ExpandData=cat(1,ExpandData1,ExpandData2);X=Expand(:,1);Y=Expand(:,2);Z=Expand(:,3);ro,co=size(ExpandData);Step=0;CountError=1;while CountError0;CountError=0;for i=1:roTemp=W*ExpandData(i,:);if TempP2)disp(属于第一类);elsedisp(属于第二类);end;end3.5 结果与分析程序没有完整的考虑两类问题中的每个情况,只解答了两类样本的协方差矩阵相等,即 的情况。而且绘制判别函数的语句可读性差。12C4.1 题目自己选择一幅彩色图像,选择一种分类算法,使用颜色特征对彩色图像中的像素进行分类。最终输出彩色图像按照颜色的分割结果。4.4 程序代码clear all;clc;file_name=input(输入文件图像路径);I_rgb=imread(file_name);figure();image(I_rgb);title(原始图像 );whos file_name;m,n,k=size(file_name);new=double(reshape(file_name,m*n,k);whos new;startdata=input(背景和前背景初始凝聚点 );idClass=kmeans(new,2,Start,startdata);idfile=(idClass=1);result=reshape(idfile,idfile,idfile,m,n,k);file1=file_name;file1(resulet)=0;figureimshow(file1);4.5 结果与分析程序运行不成功,需要改进。
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号