機器學習筆記----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 的隸屬度。

模糊邏輯:它是一種相對於傳統是或者不是的二值邏輯而言的。例如下圖:,如果這個人在B里面,那么很好理解,人在B里面為1,但是如果出現下列這種情況呢:

,顯然用上述的邏輯就行不通了,但是可以這樣表示在(A,B)=(0,6,0.4),o,6在A, 0,4在B,這樣完美解決。其實拓展成3,4,5也都一樣。類似於,我們看周星馳的賭俠,反派用電腦分析,牌的可能性。其實跟這個道理差不多

模糊矩陣:設R=(rijmxn,若0<=rij<=1,那么稱該矩陣為模糊矩陣。若矩陣元素只有0,1的時候成為布爾矩陣。如果對角線上都是一,則這個矩陣稱為自反矩陣、

模糊矩陣的關系以及並交與計算:

假設都是模糊矩陣。

交運算:

並運算:

余運算:

例子如下(畫的比較丑,請見諒):

模糊矩陣的合成

為模糊矩陣,,為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

 

 

我用的數據集聚類結果:

感覺效果好挺好的。

今天的模糊聚類就講到這里了希望大家點個關注,以及批評指正。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM