您的当前位置:首页西电大数据挖掘大作业k-means和k-medoids

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

2023-08-31 来源:小侦探旅游网
标准文档

实用文案

题 目: 数据挖掘 学 院: 电子工程学院 专 业: 智能科学与技术 学生姓名: ** 学 号: 02115***

标准文档

k-means实验报告

一、 waveform数据 1、 算法描述

1. 从数据集 中任意选取k个赋给初始的聚类中心c1, c2, …, ck;

2. 对数据集中的每个样本点xi,计算其与各个聚类中心cj的欧氏距离并获取其类别标号:

3. 按下式重新计算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:N for j=1:k if(V==1)

dist(1,j)=abs(sample(i,:)-cold(j,:)); else

dist(1,j)=norm(sample(i,:)-cold(j,:)); end end for s=1:k

if(dist(1,s)==min(dist)) y(i,1)=s-1; end end end

%更新聚类中心

cnew=zeros(k,V); flag=zeros(k,1); for i=1:N for j=1:k

if (y(I,1)==j-1)

flag(j,1)=flag(j,1)+1;

cnew(j,=cnew(j,+sample(I,; end end

end for j=1:k

cnew(j,=cnew(j,/flag(j,1);

end end

k_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:N

if(data(i,K)==0)

data0=cat(1,data(i,:),data0); elseif(data(i,K)==1)

data1=cat(1,data(i,:),data1); else

data2=cat(1,data(i,:),data2); end end

sample=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:N

if(y(i,1)==label(i,1)) sum(1,1)=sum(1,1)+1; end end for i=1:N

if((y(i,1)+label(i,1))==2) sum(1,2)=sum(1,2)+1; end end for i=1:N

if(((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; end end for i=1:N

实用文案

标准文档

if(((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; end end for i=1:N

if(((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; end end for i=1:N

if(((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; end end sum=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; else

实用文案

标准文档

F0=0;F1=255; end

for i=1:num*v if(y(i,1)==0) I3(i,1)=F0; else

I3(i,1)=F1; end end

I3=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:N for j=1:k

dist(1,j)=norm(sample(i,:)-med(j,:)); end

temp(i,1)=min(dist); for s=1:k

if(dist(1,s)==temp(i,1)) temp(i,2)=s; end end end

y=temp(:,2);

Eold=sum(temp(:,1));

%随机的选择一个非代表点,生成新的代表点集合 index=index+1; med_temp=med; E=zeros(1,k); for j=1:k

med_temp(j,:)=sample(index,:); %将所有样本分配到最近的代表点 for i=1:N for t=1:k

dist(1,t)=norm(sample(i,:)-med_temp(t,:)); end

temp(i,1)=min(dist); for s=1:k

if(dist(1,s)==temp(i,1)) temp(i,2)=s; end end end

E(1,j)=sum(temp(:,1)); end

Enew=min(E); for t=1:k

if(E(1,t)==Enew) obest=t; end end

if(Enew实用文案

标准文档

med(obest,:)=sample(index,:); else

Enew=Eold; end end

k_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:N

if(data(i,K)==0)

data0=cat(1,data(i,:),data0); elseif(data(i,K)==1)

data1=cat(1,data(i,:),data1); else

data2=cat(1,data(i,:),data2); end end

sample=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:N

y(i,1)=y(i,1)-1; end for i=1:N

if(y(i,1)==label(i,1)) sum(1,1)=sum(1,1)+1; end end for i=1:N

if((y(i,1)+label(i,1))==2)

实用文案

标准文档

sum(1,2)=sum(1,2)+1; end end for i=1:N

if(((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; end end for i=1:N

if(((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; end end for i=1:N

if(((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; end end for i=1:N

if(((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; end end sum=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; else

F0=0;F1=255; end

for i=1:num*v if(y(i,1)==1) I3(i,1)=F0; else

I3(i,1)=F1; end end

I3=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('二值化图像');

实用文案

因篇幅问题不能全部显示,请点此查看更多更全内容