導航:首頁 > 源碼編譯 > 模糊c均值聚類演算法matlab

模糊c均值聚類演算法matlab

發布時間:2023-02-06 17:25:53

❶ MATLAB基於模糊聚類分析方法

function Z=hecheng(X,X)
[m,m]=size(X);z=zeros(m,m);p4=zeros(1,m);
for i=1:m
for j=1:m
for k=1:m
p4(1,k)=min(X(i,k),Y(k,j));
end
Z(i,j)=max(p4);
end
end
應該能用!

❷ 怎樣用matlab作聚類分析啊求操作T_T T_T

展示如何使用MATLAB進行聚類分析
分別運用分層聚類、K均值聚類以及高斯混合模型來進行分析,然後比較三者的結果
生成隨機二維分布圖形,三個中心
% 使用高斯分布(正態分布)
% 隨機生成3個中心以及標准差
s = rng(5,'v5normal');
mu = round((rand(3,2)-0.5)*19)+1;
sigma = round(rand(3,2)*40)/10+1;
X = [mvnrnd(mu(1,:),sigma(1,:),200); ...
mvnrnd(mu(2,:),sigma(2,:),300); ...
mvnrnd(mu(3,:),sigma(3,:),400)];
% 作圖
P1 = figure;clf;
scatter(X(:,1),X(:,2),10,'ro');
title('研究樣本散點分布圖')

K均值聚類
% 距離用傳統歐式距離,分成兩類
[cidx2,cmeans2,sumd2,D2] = kmeans(X,2,'dist','sqEuclidean');
P2 = figure;clf;
[silh2,h2] = silhouette(X,cidx2,'sqeuclidean');
從輪廓圖上面看,第二類結果比較好,但是第一類有部分數據表現不佳。有相當部分的點落在0.8以下。

分層聚類

eucD = pdist(X,'euclidean');
clustTreeEuc = linkage(eucD,'average');
cophenet(clustTreeEuc,eucD);
P3 = figure;clf;
[h,nodes] = dendrogram(clustTreeEuc,20);
set(gca,'TickDir','out','TickLength',[.002 0],'XTickLabel',[]);

可以選擇dendrogram顯示的結點數目,這里選擇20 。結果顯示可能可以分成三類

重新調用K均值法
改為分成三類
[cidx3,cmeans3,sumd3,D3] = kmeans(X,3,'dist','sqEuclidean');
P4 = figure;clf;
[silh3,h3] = silhouette(X,cidx3,'sqeuclidean');

圖上看,比前面的結果略有改善。

將分類的結果展示出來
P5 = figure;clf
ptsymb = {'bo','ro','go',',mo','c+'};
MarkFace = {[0 0 1],[.8 0 0],[0 .5 0]};
hold on
for i =1:3
clust = find(cidx3 == i);
plot(X(clust,1),X(clust,2),ptsymb{i},'MarkerSize',3,'MarkerFace',MarkFace{i},'MarkerEdgeColor','black');
plot(cmeans3(i,1),cmeans3(i,2),ptsymb{i},'MarkerSize',10,'MarkerFace',MarkFace{i});
end
hold off

運用高斯混合分布模型進行聚類分析
分別用分布圖、熱能圖和概率圖展示結果 等高線

% 等高線
options = statset('Display','off');
gm = gmdistribution.fit(X,3,'Options',options);
P6 = figure;clf
scatter(X(:,1),X(:,2),10,'ro');
hold on
ezcontour(@(x,y) pdf(gm,[x,y]),[-15 15],[-15 10]);
hold off
P7 = figure;clf
scatter(X(:,1),X(:,2),10,'ro');
hold on
ezsurf(@(x,y) pdf(gm,[x,y]),[-15 15],[-15 10]);
hold off
view(33,24)

熱能圖
cluster1 = (cidx3 == 1);
cluster3 = (cidx3 == 2);
% 通過觀察,K均值方法的第二類是gm的第三類
cluster2 = (cidx3 == 3);
% 計算分類概率
P = posterior(gm,X);
P8 = figure;clf
plot3(X(cluster1,1),X(cluster1,2),P(cluster1,1),'r.')
grid on;hold on
plot3(X(cluster2,1),X(cluster2,2),P(cluster2,2),'bo')
plot3(X(cluster3,1),X(cluster3,2),P(cluster3,3),'g*')
legend('第 1 類','第 2 類','第 3 類','Location','NW')
clrmap = jet(80); colormap(clrmap(9:72,:))
ylabel(colorbar,'Component 1 Posterior Probability')
view(-45,20);
% 第三類點部分概率值較低,可能需要其他數據來進行分析。

% 概率圖
P9 = figure;clf
[~,order] = sort(P(:,1));
plot(1:size(X,1),P(order,1),'r-',1:size(X,1),P(order,2),'b-',1:size(X,1),P(order,3),'y-');
legend({'Cluster 1 Score' 'Cluster 2 Score' 'Cluster 3 Score'},'location','NW');
ylabel('Cluster Membership Score');
xlabel('Point Ranking');

通過AIC准則尋找最優的分類數
高斯混合模型法的最大好處是給出分類好壞的標准
AIC = zeros(1,4);
NlogL = AIC;
GM = cell(1,4);
for k = 1:4
GM{k} = gmdistribution.fit(X,k);
AIC(k)= GM{k}.AIC;
NlogL(k) = GM{k}.NlogL;
end
[minAIC,numComponents] = min(AIC);
按AIC准則給出的最優分類數為: 3 對應的AIC值為: 8647.63

後記
(1)pluskid指出K均值演算法的初值對結果很重要,但是在運行時還沒有發現類似的結果。也許Mathworks對該演算法進行過優化。有時間會仔細研究下代碼,將結果放上來。
分享:

56
喜歡
4
贈金筆
閱讀(21209)┊ 評論 (4)┊ 收藏(1) ┊轉載原文 ┊ 喜歡▼ ┊列印┊舉報

前一篇:[轉載]拉普拉斯矩陣
後一篇:[轉載]用matlab做聚類分析

❸ 模糊C均值聚類演算法(FCM)

【嵌牛導讀】FCM演算法是一種基於劃分的聚類演算法,它的思想就是使得被劃分到同一簇的對象之間相似度最大,而不同簇之間的相似度最小。模糊C均值演算法是普通C均值演算法的改進,普通C均值演算法對於數據的劃分是硬性的,而FCM則是一種柔性的模糊劃分。

【嵌牛提問】FCM有什麼用?

【嵌牛鼻子】模糊C均值聚類演算法

【嵌牛正文】

聚類分析是多元統計分析的一種,也是無監督模式識別的一個重要分支,在模式分類、圖像處理和模糊規則處理等眾多領域中獲得最廣泛的應用。它把一個沒有類別標記的樣本按照某種准則劃分為若乾子集,使相似的樣本盡可能歸於一類,而把不相似的樣本劃分到不同的類中。硬聚類把每個待識別的對象嚴格的劃分某類中,具有非此即彼的性質,而模糊聚類建立了樣本對類別的不確定描述,更能客觀的反應客觀世界,從而成為聚類分析的主流。

模糊聚類演算法是一種基於函數最優方法的聚類演算法,使用微積分計算技術求最優代價函數,在基於概率演算法的聚類方法中將使用概率密度函數,為此要假定合適的模型,模糊聚類演算法的向量可以同時屬於多個聚類,從而擺脫上述問題。 模糊聚類分析演算法大致可分為三類:

1)分類數不定,根據不同要求對事物進行動態聚類,此類方法是基於模糊等價矩陣聚類的,稱為模糊等價矩陣動態聚類分析法。

2)分類數給定,尋找出對事物的最佳分析方案,此類方法是基於目標函數聚類的,稱為模糊C 均值聚類。

3)在攝動有意義的情況下,根據模糊相似矩陣聚類,此類方法稱為基於攝動的模糊聚類分析法。

我所學習的是模糊C 均值聚類演算法,要學習模糊C 均值聚類演算法要先了解慮屬度的含義,隸屬度函數是表示一個對象x 隸屬於集合A 的程度的函數,通常記做μA (x),其自變數范圍是所有可能屬於集合A 的對象(即集合A 所在空間中的所有點),取值范圍是[0,1],即0<=μA (x)<=1。μA (x)=1表示x 完全隸屬於集合A ,相當於傳統集合概念上的x ∈A 。一個定義在空間X={x}上的隸屬度函數就定義了一個模糊集合A ,或者叫定義在論域X={x}上的模糊子集A 。對於有限個對象x 1,x 2,……,x n 模糊集合A 可以表示為:A ={(μA (x i ), x i ) |x i ∈X } (6.1)

有了模糊集合的概念,一個元素隸屬於模糊集合就不是硬性的了,在聚類的問題中,可以把聚類生成的簇看成模糊集合,因此,每個樣本點隸屬於簇的隸屬度就是[0,1]區間裡面的值。

FCM 演算法需要兩個參數一個是聚類數目C ,另一個是參數m 。一般來講C 要遠遠小於聚類樣本的總個數,同時要保證C>1。對於m ,它是一個控制演算法的柔性的參數,如果m 過大,則聚類效果會很次,而如果m 過小則演算法會接近HCM 聚類演算法。演算法的輸出是C 個聚類中心點向量和C*N的一個模糊劃分矩陣,這個矩陣表示的是每個樣本點屬於每個類的隸屬度。根據這個劃分矩陣按照模糊集合中的最大隸屬原則就能夠確定每個樣本點歸為哪個類。聚類中心表示的是每個類的平均特徵,可以認為是這個類的代表點。從演算法的推導過程中我們不難看出,演算法對於滿足正態分布的數據聚類效果會很好。

通過實驗和演算法的研究學習,不難發現FCM演算法的優缺點:

首先,模糊c 均值泛函Jm 仍是傳統的硬c 均值泛函J1 的自然推廣。J1 是一個應用很廣泛的聚類准則,對其在理論上的研究已經相當的完善,這就為Jm 的研究提供了良好的條件。

其次,從數學上看,Jm與Rs的希爾伯特空間結構(正交投影和均方逼近理論) 有密切的關聯,因此Jm 比其他泛函有更深厚的數學基礎。

最後,FCM 聚類演算法不僅在許多鄰域獲得了非常成功的應用,而且以該演算法為基礎,又提出基於其他原型的模糊聚類演算法,形成了一大批FCM類型的演算法,比如模糊c線( FCL) ,模糊c面(FCP) ,模糊c殼(FCS) 等聚類演算法,分別實現了對呈線狀、超平面狀和「薄殼」狀結構模式子集(或聚類) 的檢測。

模糊c均值演算法因設計簡單,解決問題范圍廣,易於應用計算機實現等特點受到了越來越多人的關注,並應用於各個領域。但是,自身仍存在的諸多問題,例如強烈依賴初始化數據的好壞和容易陷入局部鞍點等,仍然需要進一步的研究。

❹ k均值聚類演算法、c均值聚類演算法、模糊的c均值聚類演算法的區別

k均值聚類:---------一種硬聚類演算法,隸屬度只有兩個取值0或1,提出的基本根據是「類內誤差平方和最小化」准則;
模糊的c均值聚類演算法:-------- 一種模糊聚類演算法,是k均值聚類演算法的推廣形式,隸屬度取值為[0 1]區間內的任何一個數,提出的基本根據是「類內加權誤差平方和最小化」准則;
這兩個方法都是迭代求取最終的聚類劃分,即聚類中心與隸屬度值。兩者都不能保證找到問題的最優解,都有可能收斂到局部極值,模糊c均值甚至可能是鞍點。
至於c均值似乎沒有這么叫的,至少從我看到文獻來看是沒有。不必糾結於名稱。如果你看的是某本模式識別的書,可能它想表達的意思就是k均值。
實際上k-means這個單詞最先是好像在1965年的一篇文獻提出來的,後來很多人把這種聚類叫做k均值。但是實際上十多年前就有了類似的演算法,但是名字不一樣,k均值的歷史相當的復雜,在若干不同的領域都被單獨提出。追尋演算法的名稱與歷史沒什麼意義,明白具體的實現方法就好了。

❺ Matlab FCM聚類和kmeans聚類有什麼區別

K均值聚類演算法即是HCM(普通硬-C均值聚類演算法),它是一種硬性劃分的方法,結果要麼是1要麼是0,沒有其他情況,具有「非此即彼」的性質。裡面的隸屬度矩陣是U。
FCM是把HCM演算法推廣到模糊情形,用在模糊性的分類問題上,給了隸屬度一個權重。隸屬度矩陣用U的m次方表示。

❻ 模糊c均值演算法matlab程序

function [center, U, obj_fcn] = FCMClust(data, cluster_n, options)
% FCMClust.m 採用模糊C均值對數據集data聚為cluster_n類
%
% 用法:
% 1. [center,U,obj_fcn] = FCMClust(Data,N_cluster,options);
% 2. [center,U,obj_fcn] = FCMClust(Data,N_cluster);
%
% 輸入:
% data ---- nxm矩陣,表示n個樣本,每個樣本具有m的維特徵值
% N_cluster ---- 標量,表示聚合中心數目,即類別數
% options ---- 4x1矩陣,其中
% options(1): 隸屬度矩陣U的指數,>1 (預設值: 2.0)
% options(2): 最大迭代次數 (預設值: 100)
% options(3): 隸屬度最小變化量,迭代終止條件 (預設值: 1e-5)
% options(4): 每次迭代是否輸出信息標志 (預設值: 1)
% 輸出:
% center ---- 聚類中心
% U ---- 隸屬度矩陣
% obj_fcn ---- 目標函數值
% Example:
% data = rand(100,2);
% [center,U,obj_fcn] = FCMClust(data,2);
% plot(data(:,1), data(:,2),'o');
% hold on;
% maxU = max(U);
% index1 = find(U(1,:) == maxU);
% index2 = find(U(2,:) == maxU);
% line(data(index1,1),data(index1,2),'marker','*','color','g');
% line(data(index2,1),data(index2,2),'marker','*','color','r');
% plot([center([1 2],1)],[center([1 2],2)],'*','color','k')
% hold off;

if nargin ~= 2 & nargin ~= 3, %判斷輸入參數個數只能是2個或3個
error('Too many or too few input arguments!');
end

data_n = size(data, 1); % 求出data的第一維(rows)數,即樣本個數
in_n = size(data, 2); % 求出data的第二維(columns)數,即特徵值長度
% 默認操作參數
default_options = [2; % 隸屬度矩陣U的指數
100; % 最大迭代次數
1e-5; % 隸屬度最小變化量,迭代終止條件
1]; % 每次迭代是否輸出信息標志

if nargin == 2,
options = default_options;
else %分析有options做參數時候的情況
% 如果輸入參數個數是二那麼就調用默認的option;
if length(options) < 4, %如果用戶給的opition數少於4個那麼其他用默認值;
tmp = default_options;
tmp(1:length(options)) = options;
options = tmp;
end
% 返回options中是數的值為0(如NaN),不是數時為1
nan_index = find(isnan(options)==1);
%將denfault_options中對應位置的參數賦值給options中不是數的位置.
options(nan_index) = default_options(nan_index);
if options(1) <= 1, %如果模糊矩陣的指數小於等於1
error('The exponent should be greater than 1!');
end
end
%將options 中的分量分別賦值給四個變數;
expo = options(1); % 隸屬度矩陣U的指數
max_iter = options(2); % 最大迭代次數
min_impro = options(3); % 隸屬度最小變化量,迭代終止條件
display = options(4); % 每次迭代是否輸出信息標志

obj_fcn = zeros(max_iter, 1); % 初始化輸出參數obj_fcn

U = initfcm(cluster_n, data_n); % 初始化模糊分配矩陣,使U滿足列上相加為1,
% Main loop 主要循環
for i = 1:max_iter,
%在第k步循環中改變聚類中心ceneter,和分配函數U的隸屬度值;
[U, center, obj_fcn(i)] = stepfcm(data, U, cluster_n, expo);
if display,
fprintf('FCM:Iteration count = %d, obj. fcn = %f\n', i, obj_fcn(i));
end
% 終止條件判別
if i > 1,
if abs(obj_fcn(i) - obj_fcn(i-1)) < min_impro,
break;
end,
end
end

iter_n = i; % 實際迭代次數
obj_fcn(iter_n+1:max_iter) = [];

% 子函數
function U = initfcm(cluster_n, data_n)
% 初始化fcm的隸屬度函數矩陣
% 輸入:
% cluster_n ---- 聚類中心個數
% data_n ---- 樣本點數
% 輸出:
% U ---- 初始化的隸屬度矩陣
U = rand(cluster_n, data_n);
col_sum = sum(U);
U = U./col_sum(ones(cluster_n, 1), :);

% 子函數
function [U_new, center, obj_fcn] = stepfcm(data, U, cluster_n, expo)
% 模糊C均值聚類時迭代的一步
% 輸入:
% data ---- nxm矩陣,表示n個樣本,每個樣本具有m的維特徵值
% U ---- 隸屬度矩陣
% cluster_n ---- 標量,表示聚合中心數目,即類別數
% expo ---- 隸屬度矩陣U的指數
% 輸出:
% U_new ---- 迭代計算出的新的隸屬度矩陣
% center ---- 迭代計算出的新的聚類中心
% obj_fcn ---- 目標函數值
mf = U.^expo; % 隸屬度矩陣進行指數運算結果
center = mf*data./((ones(size(data, 2), 1)*sum(mf'))'); % 新聚類中心(5.4)式
dist = distfcm(center, data); % 計算距離矩陣
obj_fcn = sum(sum((dist.^2).*mf)); % 計算目標函數值 (5.1)式
tmp = dist.^(-2/(expo-1));
U_new = tmp./(ones(cluster_n, 1)*sum(tmp)); % 計算新的隸屬度矩陣 (5.3)式

% 子函數
function out = distfcm(center, data)
% 計算樣本點距離聚類中心的距離
% 輸入:
% center ---- 聚類中心
% data ---- 樣本點
% 輸出:
% out ---- 距離
out = zeros(size(center, 1), size(data, 1));
for k = 1:size(center, 1), % 對每一個聚類中心
% 每一次循環求得所有樣本點到一個聚類中心的距離
out(k, :) = sqrt(sum(((data-ones(size(data,1),1)*center(k,:)).^2)',1));
end

❼ 如何用matlab求c均值演算法中的均值、以及誤差平方和,kmeans函數里好像沒有。

均值是rms = mean(x)
誤差平方和sum((x-rms).^2)

❽ 在matlab中做模糊C均值聚類(fcm)演算法如何體現初始隸屬度

它的程序裡面是用rand函數隨機初始化了一個矩陣N*c,然後對這個隨機矩陣進行歸一化,即滿足一行(也可能是列記不清楚了),反正是讓它滿足隸屬度的每個樣本屬於所有類隸屬度為1的條件。用這個矩陣進行初始化,計算新的中心 新的隸屬度 新的中心。。。。 知道滿足閾值。matlab裡面自己有函數一招就能找到

❾ MATLAB遺傳模擬退火演算法的聚類演算法,程序運行出錯。rep函數,求高手指點!

同求高手解答此問題

❿ 在matlab里怎樣對散點圖做模糊C均值聚類,和模糊聚類

加上下面這些就行,過去吧;我運行過了
%%%%%%%%%%%%%%%%%%%%
data = [x',y'];
c =2; % 聚類個數
[center,U,obj_fcn] = fcm(data, c);
maxU = max(U);
index1 = find(U(1,:) == maxU);
index2 = find(U(2, :) == maxU);
figure,hold on;
plot(data(index1,1),data(index1, 2),'r.');
plot(data(index2,1),data(index2, 2),'g.');
plot(center(1,1),center(1,2),'b+');
plot(center(2,1),center(2,2),'b+');

閱讀全文

與模糊c均值聚類演算法matlab相關的資料

熱點內容
java堆分配 瀏覽:159
linuxbuiltin 瀏覽:560
cstpdf 瀏覽:941
texstudio編譯在哪 瀏覽:352
國家反詐中心app注冊登記表怎麼注冊 瀏覽:972
加密機默認埠 瀏覽:101
有哪個網站有免費的python源代碼 瀏覽:304
蘋果手機如何導入安卓電話 瀏覽:915
奧利奧雙重解壓 瀏覽:388
安卓賬號怎麼在蘋果手機上玩 瀏覽:798
畫畫用什麼安卓ipad好 瀏覽:693
手機怎麼用pdf 瀏覽:697
怎麼把多個word合並成一個pdf 瀏覽:542
電學基礎pdf 瀏覽:726
cad插件怎麼編譯 瀏覽:617
網校源碼軟體 瀏覽:667
思科常用配置命令 瀏覽:377
水容易被壓縮嗎 瀏覽:753
java項目試題 瀏覽:316
為什麼安卓拍照沒有蘋果成相快 瀏覽:516