1.模糊理論概述:算法
在咱們的平常生活中有許多的事物,或多或少都具備模糊性和混淆不清的特性。「模模糊糊」的概念,是最微妙且難以捉摸,但卻又是常見最重要的,但在近代數學中卻有了很清晰的定義。 模糊理論的觀念在強調以模糊邏輯來描述現實生活中事物的等級,以彌補古典邏輯(二值邏輯)沒法對不明肯定義邊界事物描述的缺點。人類的天然語言在表達上具備很重的模糊性,難以「對或不對」、「好或很差」的二分法來徹底描述真實的世界問題。故模糊理論將模糊概念,以模糊集合的定義,將事件(event)屬於這集合程度的歸屬函數(Membership grade),加以模糊定量化獲得一歸屬度(Membership grade), 來處理各類問題。隨着科學的發展,研究對象越加複雜,而複雜的東西難以精確化,這是一一個突出的矛盾,也就是說複雜性越高,有意義的精確化能力越低,有意義性和精確性就變成兩個互相排斥的特性。而複雜性卻意味着因素衆多,以至使咱們沒法所有認真地去進行考察,而只抓住其中重要的部分,略去次要部分,但這有時會使自己明確的概念也會變得模糊起來,從而不得不採用「模糊的描述」函數
2模糊聚類:測試
事物間的界線,有些是明確的,有些則是模糊的。當聚類涉及到事物之間的模糊界線時,須要運用模糊聚類分析方法。
如何理解模糊聚類的「模糊」呢:假設有兩個集合分別是A、B,有一成員a,傳統的分類概念a要麼屬於A要麼屬於B,在模糊聚類的概念中a能夠0.3屬於A,0.7屬於B,這就是其中的「模糊」概念。ui
模糊聚類分析有兩種基本方法:系統聚類法和逐步聚類法。spa
系統聚類法我的理解相似於密度聚類算法,逐步聚類法類是中心點聚類法。 .net
逐步聚類法是一種基於模糊劃分的模糊聚類分析法。它是預先肯定好待分類的樣本應分紅幾類,而後按照最優原則進行在分類,經屢次迭代直到分類比較合理爲止。在分類過程當中可認爲某個樣本以某一隸屬度隸屬某一類,又以某一隸屬度隸屬於另外一類。這樣,樣本就不是明確的屬於或不屬於某一類。若樣本集有n個樣本要分紅c類,則他的模糊劃分矩陣爲c×n。
該矩陣有以下特性:
①. 每同樣本屬於各種的隸屬度之和爲1。
②. 每一類模糊子集都不是空集。orm
3.FCM算法對象
3.1原理:blog
假定咱們有數據集X,咱們要對X中的數據進行分類,若是把這些數據劃分紅c個類的話,那麼對應的就有c個類中心爲Ci,每一個樣本Xj屬於某一類Ci的隸屬度定爲Uij,那麼定義一個FCM目標函數及其約束條件以下:事件
目標函數(式1)由相應樣本的隸屬度與該樣本到各種中心的距離相乘組成的,式2爲約束條件,也就是一個樣本屬於全部類的隸屬度之和要爲 1 。
式1中的m是一個隸屬度的因子,通常爲2 ,||Xj - Ci|| 表示Xj到中心點Ci的歐式距離。
咱們發現Uij和Ci是相互關聯的,彼此包含對方 ,程序一開始 會隨機生成一個Uij,只要數值知足條件便可,而後開始迭代,經過Uij計算出Ci,有了Ci又能夠計算出Uij,反反覆覆,這個過程當中目標函數J一直在變化,逐漸縐向穩定。那麼當J不在變化時就認爲算法收斂到一個較好的結果了。
3.2步驟:
(1)肯定分類數,指數m的值,肯定迭代次數
(2)初始化一個隸屬度U(注意條件和爲1);
(3)根據U計算聚類中心C;
(4)這個時候能夠計算目標函數J了
(5)根據C返回去計算U,回到步驟3,一直循環直到結束。
舉栗子:
https://blog.csdn.net/in_nocence/article/details/78647305
你們能夠參考一下
4.K-means算法和FCM均值的區別:
K-means算法:一種硬聚類算法,隸屬度只有兩個取值0或1,提出的基本根據是「類內偏差平方和最小化」準則;
FCM算法:一種模糊聚類算法,是k均值聚類算法的推廣形式,隸屬度取值爲[0 1]區間內的任何一個數,提出的基本根據是「類內加權偏差平方和最小化」準則;
這兩個方法都是迭代求取最終的聚類劃分,即聚類中心與隸屬度值。二者都不能保證找到問題的最優解,都有可能收斂到局部極值,模糊c均值甚至多是鞍點。
K均值和C均值,其實有種C是包含在K中的感受,C只是特定的實現方式,K均值是廣義的概念。
5.實際應用:
煤炭爲工業時代注入力量,即便到了發達的21世紀,咱們的生活仍是離不開煤炭,煤炭的種類也有不少,那如何將其分類呢?
經過查詢資料可知煤炭能夠分爲三類:無煙煤A1,煙煤A2,褐煤A3。設論域U爲全部煤種的集合,則無煙煤A1,煙煤A2,和褐煤A3;是U上的模糊子集, 對於某一種給定的具體煤種u,試判斷u的歸屬問題。
(1)煤的特性指標
根據煤的化學成分和煤炭變量分析,咱們選擇下列10個特性指標:炭(u),氫(u2), 全硫(u3), 氧(u4),鏡質分析(u5),絲質分析(u6), 塊狀微粒體(u7),粒狀微粒(u8),殼質體與樹脂體(u9),由鏡質組分測得的平均最大反射率(u10 ).於是每種煤的特性指標向量爲u=(u1, u2,...... ,u10)
(2) 構造無煙煤A1,煙煤A 2和褐煤A 3的隸屬函數。
1)在無煙煤A1中抽選6個煤樣:
ai=(ai1, ai2,..... ai10) (i=1,2...,6),
其中aij表示A1中第i個煤樣的第j個特性指標的實際測試數據
在無煙煤A2中抽選12個煤樣:
bi=(bi1, bi2,..... bi10) (i=1,2...,12),
其中bij表示A2中第i個煤樣的第j個特性指標的實際測試數據
在無煙煤A3中抽選6個煤樣:
ci=(ci1, ci2,..... ci10) (i=1,2...,6),
其中cij表示A3中第i個煤樣的第j個特性指標的實際測試數據
2)計算所抽選的煤樣ai,bi,ci的平均值
3)分別計算待識別煤樣u= {u1, u2,.... ,u10}與a,b,c之間的歐拉距離得:
令D=d1(u, a)+d2(u, b)+d3(u,c),則可得無煙煤A1,煙煤A2和褐煤A3的隸屬函數是:
A1(u)=1-d1(u, a)/D, A2(u)=1-d2(u, b)/D, A3(u)=1-d3(u, c)/D,
把煤樣數據代入.上述式子得出個煤樣對無煙煤A1,煙煤A2和褐煤A3的隸屬度.
(3)按照最大隸屬原則判斷具體煤樣所應歸屬的煤炭類別.
數據部分樣本:
(4)matlab實現:
源代碼:
myfcm.m
function [U, V,objFcn] = myfcm(data, c, T, m, epsm)
% fuzzy c-means algorithm
% 輸入: data: 待聚類數據,n行s列,n爲數據個數,s爲每一個數據的特徵數
% c : 聚類中心個數
% m : 模糊係數
% 輸出: U : 隸屬度矩陣,c行n列,元素uij表示第j個數據隸屬於第i類的程度
% V : 聚類中心向量,c行s列,有c箇中心,每一箇中心有s維特徵
% written by Zhang Jin
% see also : mydist.m myplot.m
if nargin < 3
T = 100; %默認迭代次數爲100
end
if nargin < 5
epsm = 1.0e-6; %默認收斂精度
end
if nargin < 4
m = 2; %默認模糊係數值爲2
end
[n, s] = size(data);
% 初始化隸屬度矩陣U(0),並歸一化
U0 = rand(c, n);
temp = sum(U0,1);
for i=1:n
U0(:,i) = U0(:,i)./temp(i);
end
iter = 0;
V(c,s) = 0; U(c,n) = 0; distance(c,n) = 0;
while( iter<T )
iter = iter + 1;
% U = U0;
% 更新V(t)
Um = U0.^m;
V = Um*data./(sum(Um,2)*ones(1,s)); % 矩陣相乘
% 更新U(t)
for i = 1:c
for j = 1:n
distance(i,j) = mydist(data(j,:),V(i,:));
end
end
U=1./(distance.^m.*(ones(c,1)*sum(distance.^(-m))));
objFcn(iter) = sum(sum(Um.*distance.^2));
% FCM算法中止條件
if norm(U-U0,Inf)<epsm
break
end
U0=U;
end
myplot(U,objFcn);
距離函數:
function d = mydist(X,Y)
d = sqrt(sum((X-Y).^2));
end
myplot.m
function myplot(U,objFcn)
% 將隸屬度U矩陣可視化
figure(1)
subplot(3,1,1);
plot(U(1,:),'-b');
title('隸屬度矩陣值')
ylabel('A1')
subplot(3,1,2);
plot(U(2,:),'-r');
ylabel('A2')
subplot(3,1,3);
plot(U(3,:),'-g');
xlabel('樣本數')
ylabel('A3')
figure(2)
grid on
plot(objFcn);
title('目標函數變化值');
xlabel('迭代次數')
ylabel('目標函數值')
結果:
因爲數據收集樣本容量太小,且電腦安裝的matlab版本有些問題嘗試屢次沒法運行,以後會從新更新軟件用更多數據測試
但可推測迭代屢次以後,目標函數開始收斂,從隸屬度矩陣上分析 ,三類煤有明顯的區分 。猜想不斷迭代後區分度會有所下降。
6.結論:
FCM算法的優缺點:
優勢:FCM方法會計算每一個樣本對全部類的隸屬度,這給了咱們一個參考該樣本分類結果可靠性的計算方法, 若某樣本對某類的隸屬度在全部類的隸屬度中具備絕對優點,則該樣本分到這個類是一個十分保險的作法,反之若該樣本在全部類的隸屬度相對平均,則咱們須要其餘輔助手段來進行分類。
缺點:算法在分類時有個主要的不足是,當樣本不平衡時,如一個類的樣本容量很大,而其餘類樣本容量很小時,有可能致使當輸入一個新樣本時,該樣本的K個鄰居中大容量類的樣本佔多數。 該算法只計算「最近的」鄰居樣本,某一類的樣本數量很大,那麼或者這類樣本並不接近目標樣本,或者這類樣本很靠近目標樣本。不管怎樣,數量並不能影響運行結果。
參考文獻:
https://blog.csdn.net/HUXINY/article/details/90607216