推導公式以及原理不講,直接上演算法步驟:
%產生高斯分布資料
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 步...