日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

FuzzyCMeans算法

發布時間:2023/11/28 生活经验 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 FuzzyCMeans算法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

FuzzyC-Means

模糊c-均值聚類算法 fuzzy c-means algorithm(FCMA)或(FCM)。模糊c均值聚類算法,是當前模糊系統里表現比較好的算法之一 其特征與k-means相似,也是基于距離來判斷分類。模糊c均值需要用戶提供除數據之外至少一個參數,而這個參數與k-means中的k類似。

模糊c-均值聚類算法意在求解一個最小化問題即:

其中,uij為樣本xj屬于第i類的隸屬度,故u是一個c×n的矩陣,xj就是第j個樣本數據,ci為第i個聚類中心一共有c個,m則是一個大于1的加權常數一般取2,可由用戶定義。 在這里每個樣本對于不同類的隸屬度之和被限制為1,但一般情況下模糊集合的隸屬度通常加起來不為1。接下來我們需要把這個條件極值問題轉化為無條件的極值問題, 這里用到的方法就是拉格朗日乘子法:

然后需要對各個變量求導,以求得使得原式最小的變量值。對聚類的中心C求導:

其中,

故:

然后,

最后,

至此聚類中心C的迭代公式已確認,接下來就是模糊矩陣u的迭代推導。

第一部分,先對條件式的前半部分對u進行求導。

然后再求后半部分。

將兩部分疊加。

最后u的迭代公式:

(以上參考至:https://www.cnblogs.com/wxl845235800/p/11053261.html)

接下來我們就可以根據兩個迭代公式將算法輕松地編程。初始模糊矩陣取隨機數,采用的分類數據為鳶尾花數據集,m設置為2,截至條件為u的二范數變化小于1e-4.

function [V,F]=FSC(X,C,m)
[n,D]=size(X);
if D>nX=X';[n,D]=size(X);
end
if nargin==2m=2;
end
old=0;
A=rand(C,n);
A=oneness(A,n);
new=norm(A);
while abs(new-old)>1e-4 
old=new;
V=updataV(A);
A=updataA(X,V);
new=norm(A);
[~,index]=max(A);
end
F=zeros(C,n);
for f=1:nF(index(f),f)=1;
end
if D>2X=zscore(X); %數據標準化[~,~,latent]=pca(X); %PCA降維[~,b]=sort(latent,'descend');X=X(:,b(1:2)); %取前兩維繪圖PlotClusterinResult(X,index);
end
if D==2PlotClusterinResult(X,index);
end
function A=oneness(A,n)
for i=1:n %模糊矩陣概率歸一A(:,i)=A(:,i)/sum(A(:,i));
end
endfunction V=updataV(A)
V=zeros(D,C);
for i=1:CV(:,i)=(A(i,:).^m*X)'/sum(A(i,:).^m);
end
endfunction A=updataA(X,V)
A=zeros(C,n);
for i=1:Cfor j=1:nA(i,j)=1/sum((norm(X(j,:)'-V(:,i))./norm(X(j,:)'-V)).^(1/(m-1)));end
end
A=oneness(A,n);
end
end
function PlotClusterinResult(X, IDX)    
k=max(IDX);    
Colors=hsv(k);    
Legends = {};    
for i=0:k        Xi=X(IDX==i,:);        if i~=0            Style = 'x';            MarkerSize = 8;            Color = Colors(i,:);            Legends{end+1} = ['Cluster #' num2str(i)];        elseStyle = 'o';MarkerSize = 6;            Color = [0 0 0];            if ~isempty(Xi)                Legends{end+1} = 'Noise';            endendif ~isempty(Xi)            plot(Xi(:,1),Xi(:,2),Style,'MarkerSize',MarkerSize,'Color',Color);        endhold on;    
end
hold off;    
axis equal;    
grid on;    
legend(Legends);    
legend('Location', 'NorthEastOutside');
end

測試Matlab自帶fisheriris數據集。

FSC(meas,3)

結果如下圖:

總結

以上是生活随笔為你收集整理的FuzzyCMeans算法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。