1. 程式人生 > 其它 >模糊均值聚類法Matlab實現以及注意事項

模糊均值聚類法Matlab實現以及注意事項

技術標籤:聚類方法聚類演算法matlab

模糊均值聚類法Matlab實現

簡介

本文主要介紹模糊均值聚類法在Matlab的實現,以及實現過程中需要注意的地方。演算法的推算部分,原理介紹不再贅述,可以移步到以下文章。

連結: link.
連結: link.

相關公式

公式一:權值

Alt

公式二:中心點

在這裡插入圖片描述

公式三:結束條件

在這裡插入圖片描述

Matlab實現程式碼:

// An highlighted block
clear;clc;
U1=zeros(3,10);
A = [0 0 1 1 5 5 3 3 4 6;0 1 0 1 2 4 5 6 5 2];
for i=1:10                          %
此部分為生成隨機數,初始化各點權值。 rand1=rand(); rand2=rand(); U1(1,i)=min(rand1,rand2); U1(2,i)=abs(rand1-rand2); U1(3,i)=1-max(rand1,rand2); end %初始化結束 times=0; %記錄迭代次數 U=zeros(3,10); %UU1用於檢測迭代是否結束 while(max(U1(:)-U(:))>0.000001) %由兩者之差的最大值為結束條件 U
=U1; %覆蓋 C=zeros(2,3); %中心點歸零 for i=1:10 %重新計算新的中心點 C(:,1)= C(:,1)+(U(1,i)^3*A(:,i)); C(:,2)= C(:,2)+(U(2,i)^3*A(:,i)); C(:,3)= C(:,3)+(U(3,i)^3*A(:,i)); end C(:,1)= C(:,1)/sum(U(1,:).^3); C(:,2)= C(:,2)/sum(U(2,:).^3); C(:,3)= C(
:,3)/sum(U(3,:).^3); for j=1:3 %重新計算新的權值 for i=1:10 dist1=sqrt(sum((A(:,i)-C(:,j)).^2)); %Cj距離 dist2=sqrt(sum((A(:,i)-C(:,1)).^2)); %C1距離 dist3=sqrt(sum((A(:,i)-C(:,2)).^2)); %C2距離 dist4=sqrt(sum((A(:,i)-C(:,3)).^2)); %C3距離 if(j==1) %點到不同簇類的計算方法不同 U1(j,i)=(dist2*dist3*dist4)/(dist2*dist3*dist4+dist1^2*dist3+dist1^2*dist4); elseif(j==2) U1(j,i)=(dist2*dist3*dist4)/(dist2*dist3*dist4+dist1^2*dist2+dist1^2*dist4); else U1(j,i)=(dist2*dist3*dist4)/(dist2*dist3*dist4+dist1^2*dist2+dist1^2*dist3); end end end times=times+1 %迭代次數 end n1=0;n2=0;n3=0; %分類 for k = 1: 10 [MIN,index] = max(U1(:,k)); if index == 1 % 點屬於第一個聚類中心 n1=n1+1; N1(1,n1) = A(1,k); N1(2,n1) = A(2,k); elseif index==2 % 點屬於第二個聚類中心 n2=n2+1; N2(1,n2) = A(1,k); N2(2,n2) = A(2,k); else % 點屬於第三個聚類中心 n3=n3+1; N3(1,n3) = A(1,k); N3(2,n3) = A(2,k); end end figure; plot(N1(1,1:n1) , N1(2,1:n1), '*b'); % 作出第一類點的圖形 hold on plot(N2(1,1:n2) , N2(2,1:n2), 'oc'); %作出第二類點的圖形 hold on plot(N3(1,1:n3) , N3(2,1:n3), 'sm'); %作出第三類點的圖形 hold on plot(C(1,1:3) , C(2,1:3), '+r','MarkerSize',20); % 畫出三個聚類中心點 xlabel('X'); ylabel('Y');

注意點:

一、本程式將10個點分為三類,如果讀者需要分成兩類可刪減對應標註的程式碼行。而需要分更多類的則可以整合成類。

二、因為權值公式與中心點公式相互關聯,所以在開始的時候需要隨機生成其中一個,本文選擇隨機生成權值矩陣。

三、注意通分權值公式,另外公式中m為你需要分的類,本文需要分出三類,所以m=3,則權值公式分母部分為 2/(3-1)=1。

四、注意每次迭代需要將中心點歸零,另外把中心點公式進行展開,可方便理解公式。

五、程式需要儲存新的權值矩陣U(t+1)以及舊的權值矩陣U(t)用來驗算迭代是否結束。