西电数据挖掘大作业k-means和k-medoids
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
西电数据挖掘大作业k-
m e a n s和k-m e d o i d s -标准化文件发布号:(9456-EUATWK-MWUB-WUNN-INNUL-DDQTY-KII
题目:数据挖掘
学院:电子工程学院专业:智能科学与技术学生姓名: **
学号: 02115***
k-means实验报告
一、waveform数据
1、算法描述
1.从数据集中任意选取k个赋给初始的聚类中心c1,
c2, …, c k;
2.对数据集中的每个样本点x i,计算其与各个聚类中心c j的欧氏
距离并获取其类别标号:
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