K 均值聚類Matlab實現

2021-09-22 12:40:23 字數 1640 閱讀 3718

推導公式以及原理不講,直接上演算法步驟:

%產生高斯分布資料

mu = [0 0];

sigma = eye(size(mu,2));

x = mvnrnd(mu,sigma,200)';

[m,n] = size(x);

k = 3; %類別數

distance = zeros(1,k);%存放資料點與聚類中心的距離

center = zeros(m,k);%用於存放聚類中心

new_center = zeros(m,k);

class = cell(1,k);%建立類別元包陣列,用於存放資料點

for i=1:k

class = x(:,i);

endwhile 1

%遍歷每個資料點,計算其與聚類中心的歐式距離

for i=1:n

% 計算與每個聚類中心的距離

for j=1:k

distance(j) = sqrt(sum((x(:,i)-center(:,j)).^2));

end[~,temp] = min(distance);%找到資料點與哪個聚類中心最小

class = [class,x(:,i)];%將資料點加入到對應的類中

end

%更新聚類中心

for i=1:k

new_center(:,i) = sum(class,2)./size(class,2);

end%判斷聚類中心是否收斂,收斂則結束演算法

if norm(center-new_center)<0.05

break;

end%若不收斂則更新聚類中心與類別集合

for i=1:k

class = ;

endcenter = new_center;

end%畫圖

color = ;

hold on

dimension = m;

if(dimension==2)

for i=1:k

plot(class(1,:),class(2,:),'o','color',color);

endelseif dimension==3

for i=1:k

plot3(class(1,:),class(2,:),class(3,:),'o', ...

'color',color);

endelse

disp('高維資料不畫圖');

endhold off

當資料維數為2,k=2時:

當資料維數為2,k=4時:

當資料維數為3,k=3時:

matlab中k 均值聚類詳解

idx kmeans x,k idx,c kmeans x,k idx,c,sumd kmeans x,k idx,c,sumd,d kmeans x,k kmeans param1 val1,param2 val2,各輸入輸出引數介紹 x n p的資料矩陣 k 表示將x劃分為幾類,為整數 idx ...

K 均值聚類

剛剛寫了篇分級聚類的,趁著餘熱,再寫一下關於k 均值聚類的。為了突出k 均值聚類的特點,先黑一下分級聚類。跟k 均值聚模擬起來,分級聚類演算法有一下缺點 第一,的那個沒有額外投入的時候,樹形試圖是不會真正將資料拆分成不同組的。第二,分級聚類的計算演算法計算量相當大。當兩個節點合併之後,節點之間的距離...

k均值聚類

k均值聚類就是利用歐氏距離的度量將距離相近的樣本分為k類 a.假設有m個樣本,首先隨機選擇k個樣本作為聚類的質心 要分成k類 b.然後對於每個樣本,計算它到每個質心的距離,將它歸類於距離最小的那個質心 c.接著對初步分類的k個類別重新計算該類的質心,也就是對每個類別的樣本座標求平均 d.重複 b 步...