前言:這幾天一直都在研究模糊聚類。感受網上的文檔都沒有一個詳細而具體的講解,正好今天有時間,就來聊一聊模糊聚類。算法
咱們你們都知道計算機其實只認識兩個數字0,1。咱們平時寫程序其實也是這樣if 1 then do.永遠這種模式,在這種模式中,一個元素要麼屬於這個集合,要麼不屬於這個集合,可是對咱們如今介紹的模糊集來講,某個元素可能部分屬於這個集合,又可能部分屬於另外的集合,顯然,例如,一個男人(1表示),一個女人(0表示),可是隨着科學技術的發展,出現了人妖這個生物(可能0.3屬於男人,0.7屬於女人).這樣若是用0,1就顯得不太恰當了,那咱們該如何表示呢,且聽我慢慢道來。函數
開始以前先介紹模糊數學幾種不一樣的名稱:優化
模糊集:給定一個論域 U ,那麼從 U 到單位區間 [0,1] 的一個映射稱爲 U 上的一個模糊集,或 U 的一個模糊子集. 模糊集能夠記爲 A 。 映射(函數) μA(·) 或簡記爲 A(·) 叫作模糊集 A 的隸屬函數。 對於每一個 x ∈ U , μA(x) 叫作元素 x 對模糊集 A 的隸屬度。spa
模糊邏輯:它是一種相對於傳統是或者不是的二值邏輯而言的。例以下圖:,若是這我的在B裏面,那麼很好理解,人在B裏面爲1,可是若是出現下列這種狀況呢:3d
,顯然用上述的邏輯就行不通了,可是能夠這樣表示在(A,B)=(0,6,0.4),o,6在A, 0,4在B,這樣完美解決。其實拓展成3,4,5也都同樣。相似於,咱們看周星馳的賭俠,反派用電腦分析,牌的可能性。其實跟這個道理差很少orm
模糊矩陣:設R=(rij)mxn,若0<=rij<=1,那麼稱該矩陣爲模糊矩陣。若矩陣元素只有0,1的時候成爲布爾矩陣。若是對角線上都是一,則這個矩陣稱爲自反矩陣、blog
模糊矩陣的關係以及並交與計算:文檔
假設,
都是模糊矩陣。原型
交運算:數學
並運算:
餘運算:
例子以下(畫的比較醜,請見諒):
模糊矩陣的合成:
設爲模糊矩陣,
,爲A與B的合成,其中
爲模糊矩陣的冪。
定義:若A爲n階方陣,定義:
首先模糊數學的基礎就補充到這裏了。下面來看看。FCM算法。
FCM算法首先是由E. Ruspini提出來的,後來J. C. Dunn與J. C. Bezdek將E. Ruspini算法從硬聚類算法推廣成模糊聚類算法。FCM算法是基於對目標函數的優化基礎上的一種數據聚類方法。聚類結果是每個數據點對聚類中心的隸屬程度,該隸屬程度用一個數值來表示。FCM算法是一種無監督的模糊聚類方法,在算法實現過程當中不須要人爲的干預。這種算法的不足之處:首先,算法中須要設定一些參數,若參數的初始化選取的不合適,可能影響聚類結果的正確性;其次,當數據樣本集合較大而且特徵數目較多時,算法的實時性不太好。
咱們的FCM算法是從硬劃分而來的。
硬劃分FCM算法的目標函數: 。U表示原矩陣,p表示聚類中心,dik表示樣本點xk與第i個類的樣本原型pi之間的失真度,通常是用兩個向量之間的距離表示。
軟劃分FCM的目標函數:。Uik表示xk與第i類樣本的隸屬度。
通常性模糊聚類分析的目標函數: ,其中m>1.dik是一種距離範數,能夠表示爲
,A表示權重。
求解過程以下(把我之前寫的截圖發來):
獲得:
求解聚類中心:
獲得聚類中心:
FCM算法執行流程:
安利一波(百度腦圖,這是我認爲百度作的比較有良心的東西了。我這個就是用百度腦圖畫的)
function [U,P,Dist,Cluster_Res,Obj_Fcn,iter]=fuzzycm(Data,C,plotflag,M,epsm)
% 模糊 C 均值聚類 FCM: 從隨機初始化劃分矩陣開始迭代
% [U,P,Dist,Cluster_Res,Obj_Fcn,iter] = fuzzycm(Data,C,plotflag,M,epsm)
% 輸入:
% Data: N×S 型矩陣,聚類的原始數據,即一組有限的觀測樣本集,
% Data 的每一行爲一個觀測樣本的特徵矢量,S 爲特徵矢量
% 的維數,N 爲樣本點的個數
% C: 聚類數,1
% plotflag: 聚類結果 2D/3D 繪圖標記,0 表示不繪圖,爲缺省值
% M: 加權指數,缺省值爲 2
% epsm: FCM 算法的迭代中止閾值,缺省值爲 1.0e-6
% 輸出:
% U: C×N 型矩陣,FCM 的劃分矩陣
% P: C×S 型矩陣,FCM 的聚類中心,每一行對應一個聚類原型
% Dist: C×N 型矩陣,FCM 各聚類中心到各樣本點的距離,聚類中
% 心 i 到樣本點 j 的距離爲 Dist(i,j)
% Cluster_Res: 聚類結果,共 C 行,每一行對應一類
% Obj_Fcn: 目標函數值
% iter: FCM 算法迭代次數
% See also: fuzzydist maxrowf fcmplot
if nargin<5
epsm=1.0e-6;
end
if nargin<4
M=2;
end
if nargin<3
plotflag=0;
end
[N,S]=size(Data);m=2/(M-1);iter=10000;
Dist(C,N)=0; U(C,N)=0; P(C,S)=0;
% 隨機初始化劃分矩陣
U0 = rand(C,N);
U0=U0./(ones(C,1)*sum(U0));
% FCM 的迭代算法
while true
% 迭代計數器
iter=iter+1;
% 計算或更新聚類中心 P
Um=U0.^M;
P=Um*Data./(ones(S,1)*sum(Um'))';
% 更新劃分矩陣 U
for i=1:C
for j=1:N
Dist(i,j)=fuzzydist(P(i,:),Data(j,:));
end
end
U=1./(Dist.^m.*(ones(C,1)*sum(Dist.^(-m))));
% 目標函數值: 類內加權平方偏差和
if nargout>4 | plotflag
Obj_Fcn(iter)=sum(sum(Um.*Dist.^2));
end
% FCM 算法迭代中止條件
if norm(U-U0,Inf) break
end
U0=U;
end
% 聚類結果
if nargout > 3
res = maxrowf(U);
for c = 1:
v = find(res==c);
Cluster_Res(c,1:length(v))=v;
end
end
% 繪圖
if plotflag
fcmplot(Data,U,P,Obj_Fcn);
end
我用的數據集聚類結果:
感受效果好挺好的。
今天的模糊聚類就講到這裏了但願你們點個關注,以及批評指正。