matlab中k均值程序代码,K-均值算法Matlab仿真

代码:

X=[35 35

41 49

35 17

55 45

55 20

15 30

25 30

20 50

10 43

55 60

30 60

20 65

50 35

30 25

15 10

30  5

10 20

5 30

20 40

15 60 %20

45 65

45 20

45 10

55 5

65 35

65 20

45 30

35 40

41 37

64 42 %30

40 60

31 52

35 69

53 52

65 55

63 65

2 60

20 20

5 5

60 12 ];%40

%定义多个聚类中心的符号变量,其中Z11为第一次迭代第一类聚类中心,Z22为第二次迭代第二类聚类中心

N = size(X,1); %样本点

NC_MAX=10; %设置最大迭代次数

for i=1: NC_MAX

syms (['Z1',num2str(i)]);  %生成变量名

syms (['Z2',num2str(i)]);

end

%选择X1,X2为初始聚类中心

Z11= X(1,:);   Z21= X(2,:);

%寻找新的聚类函数的函数,包括样本点到中心的距离计算,样本点分类以及求均值,详细见函数体定义

[Z12,Z22,c]=Find_Center(X,Z11,Z21);

%判断第一轮迭代和初始聚类中心是否相等,不相等则进行第二轮迭代,

for i=2: NC_MAX

checkEnd1 = all(eval(['Z1' int2str(i)'==Z1' int2str(i-1)]));

checkEnd2 = all(eval(['Z2' int2str(i) '==Z2'int2str(i-1)]));

if ~(checkEnd1&checkEnd2)

eval(['[Z1',int2str(i+1),',Z2',int2str(i+1),',c]=Find_Center(X,Z1', int2str(i),',Z2', int2str(i),')']);

else

break;

end

end

%对S1、S2进行分类

j=1;k=1;

for i=1:N

if c(i)==1                                   %其中c=D1

S1(j,:)=X(i,:);                      %归类

j=j+1;

else

S2(k,:)=X(i,:);

k=k+1;

end

end

plot(X(:,1),X(:,2),'k.');axis([0 100 0 100]);%绘图

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%求新聚类中心的函数

function [Z12,Z22,c]=Find_Center(X,Z11,Z21)

%计算样本点到聚类中心距离

N = n=size(X,1); %样本点

for i=1:N

D1(i)=distance(X(i,:),Z11);

end

for j=1:N

D2(j)=distance(X(j,:),Z21);

end

%D1、D2距离比较

c=D1

%计算各类样本数

N1=length(find(c==1))

N2=N-N1;

%直接求下一个聚类中心点

Z12=[0,0]; Z22=[0,0];                %新聚类中心初始化

for i=1:N

if c(i)==1

Z12=Z12+X(i,:);                        %第一类样本点累加

else

Z22=Z22+X(i,:);                        %第二类样本点累加

end

end

Z12=Z12/N1;                             %求均值

Z22=Z22/N2;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值