我是靠谱客的博主 哭泣镜子,这篇文章主要介绍聚类算法之k均值算法+实例程序,现在分享给大家,希望可以做个参考。

看完周志华老师的《机器学习》中关于聚类算法k均值算法的介绍,根据书上的介绍,自己用MATLAB编了程序,并与网上找的程序作了比较,比网上的运行更快一些。

数据采用《机器学习》书P202页的西瓜数据集,根据P203的算法逻辑编程。

程序的流程图如下

MATLAB程序如下:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
%N是数据一共分多少类 %data是输入的不带分类标号的数据 %u是每一类的中心 %re是返回的带分类标号的数据 clc,clear data1=[0.697,0.774 0.634 0.608 0.556 0.403 0.481 0.437 0.666 0.243 0.245 0.343 0.639 0.657 0.36 0.593 0.719 0.359 0.339 0.282 0.748 0.714 0.483 0.478 0.525 0.751 0.532 0.473 0.725 0.446]; data2=[0.460 0.376 0.264 0.318 0.215 0.237 0.149 0.211 0.091 0.267 0.057 0.099 0.161 0.198 0.37 0.042 0.103 0.188 0.241 0.257 0.232 0.346 0.312 0.437 0.369 0.489 0.472 0.376 0.445 0.459]; data=[data1' data2']; %显示数据 plot(data(:,1),data(:,2),'+'); grid on; axis([0.1 0.9 0 0.8]) [m n]=size(data); %m是数据个数,n是数据维数 N=3; %分类数 num_diedai=5000; %迭代次数最多为5000次 %随机初始化,从data数据里随机选取 u=data(randi([1 m],N,1),:); u=[0.403 0.237;0.343 0.099 ;0.478 0.437]; goal_u=u; tic %加上迭代次数的限制条件 num=0;%迭代次数 while 1 sign=0; %表示u是否还会更新 for i=1:m for j=1:N d(i,j)=norm(data(i,:)-u(j,:)); end end [d_min,order]=min(d,[],2); cu=zeros(m,N); for i=1:m cu(i,order(i))=1; end for j=1:N for i=1:n u(j,i)=sum(data(:,i).*cu(:,j))/sum(cu(:,j)); if u(j,i)~=goal_u(j,i) goal_u(j,i)=u(j,i); sign=sign+1; end end end %不断迭代直到位置不再变化 if sign==0 break; elseif num>num_diedai & ~isnan(u) break; end end %将原始输入数据进行分类 re=[]; for i=1:m tmp=[]; for j=1:N tmp=[tmp norm(data(i,:)-u(j,:))]; end [junk index]=min(tmp); %对每一行数据判断属于哪一类别 re=[re;data(i,:) index]; end hold on; for i=1:m if re(i,3)==1 plot(re(i,1),re(i,2),'ro'); elseif re(i,3)==2 plot(re(i,1),re(i,2),'go'); else plot(re(i,1),re(i,2),'bo'); end end grid on;toc
复制代码
1
 

程序运行时间为:

时间已过 0.023202 秒。

运行结果图示:

和书上结果一致,以下链接是我将以上程序打包成函数程序,方便大家直接在主程序中调用。

打包好的函数程序

最后

以上就是哭泣镜子最近收集整理的关于聚类算法之k均值算法+实例程序的全部内容,更多相关聚类算法之k均值算法+实例程序内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(73)

评论列表共有 0 条评论

立即
投稿
返回
顶部