西电数据挖掘大作业kmeans和kmedoids.docx
《西电数据挖掘大作业kmeans和kmedoids.docx》由会员分享,可在线阅读,更多相关《西电数据挖掘大作业kmeans和kmedoids.docx(18页珍藏版)》请在冰点文库上搜索。
西电数据挖掘大作业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(Enewmed(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('二值化图像');