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

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档