当前位置:文档之家› 西电数据挖掘大作业k-means和k-medoids

西电数据挖掘大作业k-means和k-medoids

题 目: 数据挖掘学 院: 电子工程学院专 业: 智能科学和技术学生姓名: **学 号: 02115***k -means 实验报告一、 waveform 数据1、 算法描述1. 从数据集{X n }n−1N 中任意选取k 个赋给初始的聚类中心c 1, c 2, …,c k;2.对数据集中的每个样本点x i,计算其和各个聚类中心c j的欧氏距离并获取其类别标号:label(i)=arg min ||x i−c j||2,i=1,…,N,j=1,…,k3.按下式重新计算k个聚类中心;c j=∑x js:label(s)=jj,j=1,2,…k重复步骤2和步骤3,直到达到最大迭代次数为止2、实验结果二、图像处理1、算法描述同上;2、实验结果代码:k_means:%%%%%%%%%K_means%%%%%%%%%%%%%%%%%函数说明%%%%%%%%%输入:% sample——样本集;% k ——聚类数目;%输出:% y ——类标(从0开始)% cnew ——聚类中心% n ——迭代次数function [y cnew n]=k_means(sample,k)[N V]=size(sample); %N为样本的个数 K为样本的维数y=zeros(N,1); %记录样本类标dist=zeros(1,k);rand_num=randperm(N);cnew=(sample(rand_num(1,1:k),:));%随机初始化聚类中心cold=zeros(k,V);n=0;while(cold~=cnew)cold=cnew;n=n+1; %记录迭代次数%对样本进行重新分类for i=1:Nfor j=1:kif(V==1)dist(1,j)=abs(sample(i,:)-cold(j,:));elsedist(1,j)=norm(sample(i,:)-cold(j,:));endendfor s=1:kif(dist(1,s)==min(dist))y(i,1)=s-1;endendend%更新聚类中心cnew=zeros(k,V);flag=zeros(k,1);for i=1:Nfor j=1:kif (y(I,1)==j-1)flag(j,1)=flag(j,1)+1;cnew(j,☺=cnew(j,☺+sample(I,☺;endendendfor j=1:kcnew(j,☺=cnew(j,☺/flag(j,1);endendk_means_waveform:clear;clc;%%%%%%%%%数据读入%%%%%%%data=load('G:\西电\2014大三下\大作业\Data Mining\k_means\waveform.data');[N K]=size(data); %数据集的数目data0=zeros(1,K);data1=zeros(1,K);data2=zeros(1,K);for i=1:Nif(data(i,K)==0)data0=cat(1,data(i,:),data0);elseif(data(i,K)==1)data1=cat(1,data(i,:),data1);elsedata2=cat(1,data(i,:),data2);endendsample=cat(1,data0(1:100,:),data1(1:100,:),data2(1:100,:));label=sample(:,K); %样本的正确类标sample=sample(:,1:K-1); %样本集k=3; %聚类中心的数目%%%%%%%%%K_means%%%%%%%%[y cnew n]=k_means(sample,k);%%%%%%%%%%正确率统计%%%%%%%sum=zeros(1,6);[N V]=size(sample);for i=1:Nif(y(i,1)==label(i,1))sum(1,1)=sum(1,1)+1;endendfor i=1:Nif((y(i,1)+label(i,1))==2)sum(1,2)=sum(1,2)+1;endendfor i=1:Nif(((y(i,1)==0)&&(label(i,1)==0))||((y(i,1)==1)&&label(i,1)==2)||((y( i,1)==2)&&label(i,1)==1))sum(1,3)=sum(1,3)+1;endendfor i=1:Nif(((y(i,1)==0)&&(label(i,1)==1))||((y(i,1)==1)&&label(i,1)==0)||((y( i,1)==2)&&label(i,1)==2))sum(1,4)=sum(1,4)+1;endendfor i=1:Nif(((y(i,1)==0)&&(label(i,1)==1))||((y(i,1)==1)&&label(i,1)==2)||((y( i,1)==2)&&label(i,1)==0))sum(1,5)=sum(1,5)+1;endendfor i=1:Nif(((y(i,1)==0)&&(label(i,1)==2))||((y(i,1)==1)&&label(i,1)==0)||((y( i,1)==2)&&label(i,1)==1))sum(1,6)=sum(1,6)+1;endendsum=sum/N;creatrate=max(sum);disp('循环次数:');disp(n);disp('聚类中心为:');disp(cnew);disp('正确率为:');disp(creatrate);k_means_picture:clear;clc;%%%%%%%%%数据读入%%%%%%%I1=imread('G:\西电\2014大三下\大作业\Data Mining\ k_means\lena.jpg');I2=rgb2gray(I1);%转化为灰度图像I=im2double(I2);[num v]=size(I);sample=reshape(I,v*num,1);%样本集k=2; %聚类中心的数目%%%%%%%%%K_means%%%%%%%%[y cnew n]=k_means(sample,k);%%%%%%%%v%%%%%%%%I3=sample;if(cnew(1,1)>=cnew(2,1))F0=255;F1=0;elseF0=0;F1=255;endfor i=1:num*vif(y(i,1)==0)I3(i,1)=F0;elseI3(i,1)=F1;endendI3=reshape(I3,num,v);figure(1)subplot(1,3,1);imshow(I1);title('原图像');subplot(1,3,2);imshow(I2);title('灰度图像');subplot(1,3,3);imshow(I3);title('二值化图像');k_medoids实验报告一、 waveform数据1、算法描述(1)随机选择k个对象作为初始的代表对象;(2) repeat(3) 指派每个剩余的对象给离它最近的代表对象所代表的簇;(4) 随意地选择一个非代表对象Orandom;(5) 计算用Orandom代替Oj的总代价S;(6) 如果S<0,则用Orandom替换Oj,形成新的k个代表对象的集合;(7) until 不发生变化2、实验结果二、图像处理1、算法描述同上;2、实验结果代码:k_medoids:%%%%%%%%k_medoids%%%%%%%%%%%%%%%%%º函数说明%%%%%%%%%%输入:% sample——数据集% k——聚类数目;%输出:% y——类标;% med ——聚类中心点function [y med]=k_medoids(sample,k)[N V]=size(sample); %N为样本数目 V为样本为数%聚类中心的随机初始化rbowl=randperm(N);med=sample(rbowl(1,1:k),:);temp=zeros(N,2);dist=zeros(1,k);index=rbowl(1,k);Eold=0;Enew=1000;while(abs(Enew-Eold)>0.001)%将所有样本分配到最近的代表点for i=1:Nfor j=1:kdist(1,j)=norm(sample(i,:)-med(j,:));endtemp(i,1)=min(dist);for s=1:kif(dist(1,s)==temp(i,1))temp(i,2)=s;endendendy=temp(:,2);Eold=sum(temp(:,1));%随机的选择一个非代表点,生成新的代表点集合index=index+1;med_temp=med;E=zeros(1,k);for j=1:kmed_temp(j,:)=sample(index,:);%将所有样本分配到最近的代表点for i=1:Nfor t=1:kdist(1,t)=norm(sample(i,:)-med_temp(t,:));endtemp(i,1)=min(dist);for s=1:kif(dist(1,s)==temp(i,1))temp(i,2)=s;endendendE(1,j)=sum(temp(:,1));endEnew=min(E);for t=1:kif(E(1,t)==Enew)obest=t;endendif(Enew<Eold)med(obest,:)=sample(index,:);elseEnew=Eold;endendk_medoids_waveform:clear;clc;%%%%%%%%%Êý¾Ý¶ÁÈë%%%%%%%data=load(' G:\西电\2014大三下\大作业\Data Mining\k_medoids\waveform-+noise.data');[N K]=size(data); %数据集的数目data0=zeros(1,K);data1=zeros(1,K);data2=zeros(1,K);for i=1:Nif(data(i,K)==0)data0=cat(1,data(i,:),data0);elseif(data(i,K)==1)data1=cat(1,data(i,:),data1);elsedata2=cat(1,data(i,:),data2);endendsample=cat(1,data0(1:100,:),data1(1:100,:),data2(1:100,:)); label=sample(:,K); %Ñù±¾µÄÕýÈ·Àà±êsample=sample(:,1:K-1); %Ñù±¾¼¯k=3; %聚类中心的数目%%%%%%%%%%k_medoids%%%%%%%[y med]=k_medoids(sample,k);%%%%%%%%%%正确率统计Æ%%%%%%%sum=zeros(1,6);[N V]=size(sample);for i=1:Ny(i,1)=y(i,1)-1;endfor i=1:Nif(y(i,1)==label(i,1))sum(1,1)=sum(1,1)+1;endendfor i=1:Nif((y(i,1)+label(i,1))==2)sum(1,2)=sum(1,2)+1;endendfor i=1:Nif(((y(i,1)==0)&&(label(i,1)==0))||((y(i,1)==1)&&label(i,1)==2)||((y( i,1)==2)&&label(i,1)==1))sum(1,3)=sum(1,3)+1;endendfor i=1:Nif(((y(i,1)==0)&&(label(i,1)==1))||((y(i,1)==1)&&label(i,1)==0)||((y( i,1)==2)&&label(i,1)==2))sum(1,4)=sum(1,4)+1;endendfor i=1:Nif(((y(i,1)==0)&&(label(i,1)==1))||((y(i,1)==1)&&label(i,1)==2)||((y( i,1)==2)&&label(i,1)==0))sum(1,5)=sum(1,5)+1;endendfor i=1:Nif(((y(i,1)==0)&&(label(i,1)==2))||((y(i,1)==1)&&label(i,1)==0)||((y( i,1)==2)&&label(i,1)==1))sum(1,6)=sum(1,6)+1;endendsum=sum/N;creatrate=max(sum);disp('¾ÛÀàÖÐÐÄΪ£º');disp(med);disp('ÕýÈ·ÂÊΪ£º');disp(creatrate);k_medoids_picture:clear;clc;%%%%%%%%%Êý¾Ý¶ÁÈë%%%%%%%I0=imread(' G:\西电\2014大三下\大作业\Data Mining\ k_medoids\lena.jpg'); D=0.001;I1=imnoise(I0,'gaussian',0,D);%加噪声I2=rgb2gray(I1);%转化为灰度图像I=im2double(I2);[num v]=size(I);sample=reshape(I,v*num,1);%Ñù±¾¼¯k=2; %¾ÛÀàÖÐÐĵÄÊýÄ¿%%%%%%%%%K_means%%%%%%%%[y med]=k_medoids(sample,k); %%%%%%%%图像显示¾%%%%%%%%I3=sample;if(med(1,1)>=med(2,1))F0=255;F1=0;elseF0=0;F1=255;endfor i=1:num*vif(y(i,1)==1)I3(i,1)=F0;elseI3(i,1)=F1;endendI3=reshape(I3,num,v);figure(1)subplot(1,4,1);imshow(I0);title('原图像');subplot(1,4,2);imshow(I1);title('加噪声后的图像');subplot(1,4,3);imshow(I2);title('灰度图像');subplot(1,4,4);imshow(I3);title('二值化图像');。

相关主题