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

  • 格式:docx
  • 大小:889.43 KB
  • 文档页数:13

下载文档原格式

  / 13
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
subplot(1,3,3);
imshow(I3);
title('二值化图像');
k_medoids实验报告
一、waveform数据
1、算法描述
(1)随机选择k个对象作为初始的代表对象;
(2) repeat
(3) 指派每个剩余的对象给离它最近的代表对象所代表的簇;
(4) 随意地选择一个非代表对象Orandom;
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<Eold)
med(obest,:)=sample(index,:);
[N V]=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))
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);%Ñù±¾¼¯
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
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,:));
3.按下式重新计算k个聚类中心;
重复步骤2和步骤3,直到达到最大迭代次数为止
2、实验结果
二、图像处理
1、算法描述
同上;
2、实验结果
代码:
k_means:
%%%%%%%%%K_means%%%%%%%%
%%%%%%%%%函数说明%%%%%%%%
%输入:
% sample——样本集;
% k——聚类数目;
%输出:
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))
label=sample(:,K);%样本的正确类标
sample=sample(:,1:K-1);%样本集
k=3;%聚类中心的数目
%%%%%%%%%K_means%%%%%%%%
[y cnew n]=k_means(sample,k);
%%%%%%%%%%正确率统计%%%%%%%
sum=zeros(1,6);
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;
e源自文库se
F0=0;F1=255;
end
fori=1:num*v
k=3;%聚类中心的数目
%%%%%%%%%%k_medoids%%%%%%%
[y med]=k_medoids(sample,k);
%%%%%%%%%%正确率统计Æ%%%%%%%
sum=zeros(1,6);
[N V]=size(sample);
fori=1:N
y(i,1)=y(i,1)-1;
end
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;
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,:));
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;
%%%%%%%%%数据读入%%%%%%%
%输入:
% 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),:);
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);
fori=1:N
if(data(i,K)==0)
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);%数据集的数目
%%%%%%%%%数据读入%%%%%%%
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);%样本集
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))
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,:));
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('灰度图像');
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
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
题目:数据挖掘
学院:电子工程学院
专业:智能科学与技术
学生姓名:**
学号:********
k-means实验报告
一、waveform数据
1、算法描述
1.从数据集 中任意选取k个赋给初始的聚类中心c1, c2, …, ck;
2.对数据集中的每个样本点xi,计算其与各个聚类中心cj的欧氏距离并获取其类别标号:
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;
(5)计算用Orandom代替Oj的总代价S;
(6)如果S<0,则用Orandom替换Oj,形成新的k个代表对象的集合;
(7) until不发生变化
2、实验结果
二、图像处理
1、算法描述
同上;
2、实验结果
代码:
k_medoids:
%%%%%%%%k_medoids%%%%%%%%
%%%%%%%%%º函数说明%%%%%%%%%
% 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);
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
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