西电大数据挖掘大作业kmeans和kmedoids.docx

上传人:b****7 文档编号:9053564 上传时间:2023-02-03 格式:DOCX 页数:18 大小:811.64KB
下载 相关 举报
西电大数据挖掘大作业kmeans和kmedoids.docx_第1页
第1页 / 共18页
西电大数据挖掘大作业kmeans和kmedoids.docx_第2页
第2页 / 共18页
西电大数据挖掘大作业kmeans和kmedoids.docx_第3页
第3页 / 共18页
西电大数据挖掘大作业kmeans和kmedoids.docx_第4页
第4页 / 共18页
西电大数据挖掘大作业kmeans和kmedoids.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

西电大数据挖掘大作业kmeans和kmedoids.docx

《西电大数据挖掘大作业kmeans和kmedoids.docx》由会员分享,可在线阅读,更多相关《西电大数据挖掘大作业kmeans和kmedoids.docx(18页珍藏版)》请在冰豆网上搜索。

西电大数据挖掘大作业kmeans和kmedoids.docx

西电大数据挖掘大作业kmeans和kmedoids

 

题目:

数据挖掘

学院:

电子工程学院

专业:

智能科学与技术

学生姓名:

**

学号:

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[ycnewn]=k_means(sample,k)

[NV]=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;%记录迭代次数

%对样本进行重新分类

fori=1:

N

forj=1:

k

if(V==1)

dist(1,j)=abs(sample(i,:

)-cold(j,:

));

else

dist(1,j)=norm(sample(i,:

)-cold(j,:

));

end

end

fors=1:

k

if(dist(1,s)==min(dist))

y(i,1)=s-1;

end

end

end

%更新聚类中心

cnew=zeros(k,V);

flag=zeros(k,1);

fori=1:

N

forj=1:

k

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

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

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

end

end

end

forj=1:

k

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

end

end

k_means_waveform:

clear;clc;

%%%%%%%%%数据读入%%%%%%%

data=load('G:

\西电\2014大三下\大作业\DataMining\k_means\waveform.data');

[NK]=size(data);%数据集的数目

data0=zeros(1,K);

data1=zeros(1,K);

data2=zeros(1,K);

fori=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%%%%%%%%

[ycnewn]=k_means(sample,k);

%%%%%%%%%%正确率统计%%%%%%%

sum=zeros(1,6);

[NV]=size(sample);

fori=1:

N

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

sum(1,1)=sum(1,1)+1;

end

end

fori=1:

N

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

sum(1,2)=sum(1,2)+1;

end

end

fori=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

fori=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

fori=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

fori=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大三下\大作业\DataMining\k_means\lena.jpg');

I2=rgb2gray(I1);%转化为灰度图像

I=im2double(I2);

[numv]=size(I);

sample=reshape(I,v*num,1);%样本集

k=2;%聚类中心的数目

%%%%%%%%%K_means%%%%%%%%

[ycnewn]=k_means(sample,k);

%%%%%%%%v%%%%%%%%

I3=sample;

if(cnew(1,1)>=cnew(2,1))

F0=255;F1=0;

else

F0=0;F1=255;

end

fori=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[ymed]=k_medoids(sample,k)

[NV]=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)

%将所有样本分配到最近的代表点

fori=1:

N

forj=1:

k

dist(1,j)=norm(sample(i,:

)-med(j,:

));

end

temp(i,1)=min(dist);

fors=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);

forj=1:

k

med_temp(j,:

)=sample(index,:

);

%将所有样本分配到最近的代表点

fori=1:

N

fort=1:

k

dist(1,t)=norm(sample(i,:

)-med_temp(t,:

));

end

temp(i,1)=min(dist);

fors=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);

fort=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大三下\大作业\DataMining\k_medoids\waveform-+noise.data');

[NK]=size(data);%数据集的数目

data0=zeros(1,K);

data1=zeros(1,K);

data2=zeros(1,K);

fori=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%%%%%%%

[ymed]=k_medoids(sample,k);

%%%%%%%%%%正确率统计Æ%%%%%%%

sum=zeros(1,6);

[NV]=size(sample);

fori=1:

N

y(i,1)=y(i,1)-1;

end

fori=1:

N

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

sum(1,1)=sum(1,1)+1;

end

end

fori=1:

N

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

sum(1,2)=sum(1,2)+1;

end

end

fori=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

fori=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

fori=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

fori=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大三下\大作业\DataMining\k_medoids\lena.jpg');

D=0.001;

I1=imnoise(I0,'gaussian',0,D);%加噪声

I2=rgb2gray(I1);%转化为灰度图像

I=im2double(I2);

[numv]=size(I);

sample=reshape(I,v*num,1);%Ñù±¾¼¯

k=2;%¾ÛÀàÖÐÐĵÄÊýÄ¿

%%%%%%%%%K_means%%%%%%%%

[ymed]=k_medoids(sample,k);

%%%%%%%%图像显示¾%%%%%%%%

I3=sample;

if(med(1,1)>=med(2,1))

F0=255;F1=0;

else

F0=0;F1=255;

end

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

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1