日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

matlab调用kmeans_K_Means算法的MATLAB实现

發布時間:2025/3/21 57 豆豆
生活随笔 收集整理的這篇文章主要介紹了 matlab调用kmeans_K_Means算法的MATLAB实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

% K-Means聚類算法

clc

clear all

close all

m=200;% 產生m個樣本點

k=3;% 選擇K個中心點

eps=1e-7; % 迭代結束的閾值

X=100*rand(1,m);% 樣本點X坐標

Y=100*rand(1,m);% 樣本點Y坐標

% 顯示聚類前二維點

figure,subplot(1,2,1),plot(X,Y,'ro'),title('聚類前二維點');xlabel('X軸');ylabel('Y軸');

% type_num存放k類樣本點

for i=1:k

eval(['type_',num2str(i),'=[];']);

end

% 顏色列表,由于顏色只有六種,k最好不大于6

color_list={'m','g','b','y','r','k'};

% 存放初始中心點

cp=zeros(k,2);

for i=1:k

cp(i,:)=[X(i) Y(i)];

end

% 存放第i個點到第j個點的距離

len=zeros(m,3);

% 計算樣本點到k個中心點的距離

% 若某個樣本i到某個中心點j的距離最小,則把樣本點歸到j類

% m類分完后,計算每一類均值向量作為新的聚類中心

% 若新的聚類中心與原來的聚類中心之差小于設定的閾值

% 結束迭代

times=0;% 記錄迭代次數

error=zeros(1,k);

while(1)

for i=1:m

for j=1:k

len(i,j)=sqrt((cp(j,1)-X(i))^2+(cp(j,2)-Y(i))^2);

end

% 離第num類中心點距離最小,就把它放到type_num中

flag=find(len(i,:)==min(len(i,:)));

eval(['type_',num2str(flag),'(size((type_',num2str(flag),'),1)+1,:)=[X(i) Y(i)];']);

end

times=times+1;% 迭代次數加1

% 存放新的中心點

for i=1:k

cp(i+times*k,:)=eval(['[mean(type_',num2str(i),'(:,1)) mean(type_',num2str(i),'(:,2))]']);

tmp=cp(i+(times-1)*k,:)-cp(i+times*k,:);

error(i)=sum(tmp.^2);

end

if max(error)

break

end

end

% 顯示聚類后結果

cpx=cp(1+(times-1)*k:k+(times-1)*k,1);

cpy=cp(1+(times-1)*k:k+(times-1)*k,2);

subplot(1,2,2)

for i=1:k

eval(['plot(type_',num2str(i),'(:,1),','type_',num2str(i),'(:,2),[color_list{ceil(6*rand)},''o''])']);

text(cpx(i),cpy(i),['第',num2str(i),'類中心點'])

hold on;

end

plot(cpx,cpy,'r*');

title(['聚類后二維點(迭代',num2str(times),'次)']);xlabel('X軸');ylabel('Y軸');

總結

以上是生活随笔為你收集整理的matlab调用kmeans_K_Means算法的MATLAB实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。