資源簡(jiǎn)介
基于Matlab實(shí)現(xiàn):
模式識(shí)別 改進(jìn)的K-Means++算法 實(shí)現(xiàn)模式分類

代碼片段和文件信息
%%?--Document?Description
%?Created?at?2019/03/21:?by?Feichao(Charles?Fei)
%?Version:??V1_0
%?程序功能描述:
%???????基于K-Means++算法實(shí)現(xiàn)二維空間模式的聚類分析
%%?--初始化
clc;
clear;
close?all;
%樣本數(shù)據(jù)生成
Num?=?100;???????????????????????????????????????????????%每個(gè)中心的樣本個(gè)數(shù)
Diffusance?=?0.4;????????????????????????????????????????%樣本擴(kuò)散度
x1?=?Diffusance*randn(2Num)?+?ones(2Num);????????????????????%中心點(diǎn)(11)
x2?=?Diffusance*randn(2Num)?-?ones(2Num);????????????????????%中心點(diǎn)(-1-1)
x3?=?Diffusance*randn(2Num)?+?[ones(1Num);?-ones(1Num)];????%中心點(diǎn)(1-1)
x4?=?Diffusance*randn(2Num)?+?[-ones(1Num);ones(1Num)];?????%中心點(diǎn)(-11)
X?=?[x1?x2?x3?x4];?????????????????????????????????????????????%樣本數(shù)據(jù)
%參數(shù)設(shè)置與初始化
Num_Data=size(X2);??????%樣本數(shù)目
K=4;?????????????????????%聚類中心個(gè)數(shù)
S=zeros(KNum_Data);?????%保存聚類結(jié)果
D=zeros(1K);????????????%距離
SUM=zeros(2K);??????????%樣本和
N=zeros(1K);????????????%樣本數(shù)
Z=zeros(2K);????????????%聚類中心
Z_Updated=zeros(2K);????????%更新后的聚類中心
C=zeros(2K);???????
m=0;
n=0;
%%?--初始聚類中心的選擇
Z(:1)=X(:randperm(Num_Data1));
for?i=2:K
???D1=zeros(i-1Num_Data);??
???for?j=1:Num_Data
???????for?k=1:i-1
???????????D1(kj)=pdist2(X(:j)‘Z(:k)‘‘Euclidean‘);
???????end
???????[D2(j)~]=min(D1(:j));?
???end
???[~a]=max(D2);
???Z(:i)=X(:a);?
end
disp(‘初始聚類中心:‘)
disp(Z);
%%?--顯示原始數(shù)據(jù)
figure
scatter(X(1:)X(2:)‘k‘‘filled‘);
title(‘基于K-Means++算法的原始樣本數(shù)據(jù)‘);
%%?--迭代計(jì)算
figure
?while(n?~=?2*K)
????n=0;
????SUM=zeros(2K);
????N=zeros(1K);
????S=zeros(KNum_Data);
????for?num=1:Num_Data
????????for?k=1:K
????????????D(k)=pdist2(X(:num)‘Z(:k)‘‘Euclidean‘);?????%計(jì)算距離
????????end
????????[~i]=min(D);???????%求最小值
????????for?k=1:K
????????????if(i==k)
????????????????SUM(:k)=SUM(:k)+X(:num);
????????????????N(k)=N(k)+1;
????????????????m=N(k);
????????????????S(km)=num;
????????????????%繪制散點(diǎn)圖?
????????????????if(k==1)
????????????????????scatter(X(1num)X(2num)‘r‘‘filled‘);
????????????????end?
????????????????if(k==2)
????????????????????scatter(X(1num)X(2num)‘y‘‘filled‘);
????????????????end
????????????????if(k==3)
????????????????????scatter(X(1num)X(2num)‘g‘‘filled‘);
????????????????end
????????????????if(k==4)
????????????????????scatter(X(1num)X(2num)‘m‘‘filled‘);
????????????????end
????????????????hold?on
????????????end
????????end????
????end
?????for?k=1:K
?????????Z_Updated(:k)=SUM(:k)./N(k);????????%新聚類中心
?????end
?????C=Z-Z_Updated;
?????for?i=1:2*K
?????????if(abs(C(i))<=0.01)
?????????????n=n+1;
?????????end
?????end
?????Z=Z_Updated;
?end
scatter(Z(1:)Z(2:)‘k‘‘x‘);
title(‘基于K-Means++算法的聚類分析‘);
%結(jié)果輸出
disp(‘聚類中心:‘)
disp(Z);
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件???????2879??2019-03-26?11:49??K_MeansPlusPlus.m
-----------?---------??----------?-----??----
?????????????????2879????????????????????1
評(píng)論
共有 條評(píng)論