機器學習筆記----Fuzzy c-means(FCM)模糊聚類詳解及matlab實現

前言:這幾天一直都在研究模糊聚類。感受網上的文檔都沒有一個詳細而具體的講解,正好今天有時間,就來聊一聊模糊聚類。算法

一:模糊數學

咱們你們都知道計算機其實只認識兩個數字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=(rijmxn,若0<=rij<=1,那麼稱該矩陣爲模糊矩陣。若矩陣元素只有0,1的時候成爲布爾矩陣。若是對角線上都是一,則這個矩陣稱爲自反矩陣、blog

模糊矩陣的關係以及並交與計算:文檔

假設都是模糊矩陣。原型

交運算:數學

並運算:

餘運算:

例子以下(畫的比較醜,請見諒):

模糊矩陣的合成

爲模糊矩陣,,爲A與B的合成,其中爲模糊矩陣的冪。

定義:若A爲n階方陣,定義:

首先模糊數學的基礎就補充到這裏了。下面來看看。FCM算法。

二 FCM算法

2.1 FCM算法簡介

FCM算法首先是由E. Ruspini提出來的,後來J. C. Dunn與J. C. Bezdek將E. Ruspini算法從硬聚類算法推廣成模糊聚類算法。FCM算法是基於對目標函數的優化基礎上的一種數據聚類方法。聚類結果是每個數據點對聚類中心的隸屬程度,該隸屬程度用一個數值來表示。FCM算法是一種無監督的模糊聚類方法,在算法實現過程當中不須要人爲的干預。這種算法的不足之處:首先,算法中須要設定一些參數,若參數的初始化選取的不合適,可能影響聚類結果的正確性;其次,當數據樣本集合較大而且特徵數目較多時,算法的實時性不太好。

2.2 FCM算法的實現原理

咱們的FCM算法是從硬劃分而來的。

硬劃分FCM算法的目標函數: 。U表示原矩陣,p表示聚類中心,dik表示樣本點xk與第i個類的樣本原型pi之間的失真度,通常是用兩個向量之間的距離表示。

軟劃分FCM的目標函數:。Uik表示xk與第i類樣本的隸屬度。

通常性模糊聚類分析的目標函數: ,其中m>1.dik是一種距離範數,能夠表示爲,A表示權重。

求解過程以下(把我之前寫的截圖發來):

獲得:

求解聚類中心:

獲得聚類中心:

FCM算法執行流程:

安利一波(百度腦圖,這是我認爲百度作的比較有良心的東西了。我這個就是用百度腦圖畫的)

三 FCM的Matlab實現

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

 

 

我用的數據集聚類結果:

感受效果好挺好的。

今天的模糊聚類就講到這裏了但願你們點個關注,以及批評指正。

相關文章
相關標籤/搜索