當前位置:首頁 » 操作系統 » matlab及聚類演算法

matlab及聚類演算法

發布時間: 2023-05-18 01:38:23

1. 怎樣用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做聚類分析

2. matlab中聚類演算法

聚類分析的概念主要是來自多元統計分析,例如,考慮二維坐標繫上有散落的許多點,這時,需要對散點進行合理的分類,就需要聚類方面的知識。模糊聚類分析方法主要針對的是這樣的問題:對於樣本空間P中的元素含有多個屬性,要求對其中的元素進行合理的分類。最終可以以聚類圖的形式加以呈現,而聚類圖可以以手式和自動生成兩種方式進行,這里採用自動生成方式,亦是本文的程序實現過程中的一個關鍵環節。 這里所實現的基本的模糊聚類的主要過程是一些成文的方法,在此簡述如下: 對於待分類的一個樣本集U=,設其中的每個元素有m項指標,則可以用m維向量描述樣本,即:ui=(i=1,2,...,n)。則其相應的模糊聚類按下列步驟進行:1) 標准化處理,將數據壓縮至(0-1)區間上,這部分內容相對簡單,介紹略。(參[1])2) 建立模糊關系:這里比較重要的環節之一,首先是根據逗距離地或其它進行比較的觀點及方法建立模糊相似矩陣,主要的逗距離地有:Hamming 距離: d(i,j)=sum(abs(x(i,k)-x(j,k))) | k from 1 to m (| k from 1 to m表示求和式中的系數k由1增至m,下同)Euclid 距離: d(i,j)=sum((x(i,k)-x(j,k))^2) | k from 1 to m 非距離方法中,最經典的就是一個夾角餘弦法: 最終進行模糊聚類分析的是要求對一個模糊等價矩陣進行聚類分析,而由相似矩陣變換到等價矩陣,由於相似矩陣已滿足對稱性及自反性,並不一定滿足傳遞性,則變換過程主要進行對相似矩陣進行滿足傳遞性的操作。使關系滿足傳遞性的演算法中,最出名的,就是Washall演算法了,又稱傳遞閉包法(它的思想在最短路的Floyd演算法中亦被使用了)。 演算法相當簡潔明了,復雜度稍大:O(log2(n)*n^3),其實就是把一個方陣的自乘操作,只不過這里用集合操作的交和並取代了原先矩陣操作中的*和+操作,如下:(matlab代碼)%--washall enclosure algorithm--%unchanged=0;while unchanged==0 unchanged=1; %--sigma:i=1:n(combine(conj(cArr(i,k),cArr(k,j)))) for i=1:cArrSize for j=1:cArrSize mergeVal=0; for k=1:cArrSize if(cArr(i,k)<=cArr(k,j)&&cArr(i,k)>mergeVal) mergeVal=cArr(i,k); elseif(cArr(i,k)>cArr(k,j)&&cArr(k,j)>mergeVal) mergeVal=cArr(k,j); end end if(mergeVal>cArr(i,j)) CArr(i,j)=mergeVal; unchanged=0; else CArr(i,j)=cArr(i,j); end end end %-- back--% for i=1:cArrSize for j=1:cArrSize cArr(i,j)=CArr(i,j); end endend

3. affinity propagation聚類演算法matlab程序怎麼用

AP演算法中傳遞兩種類型的消息, (responsiility)和(availability) 。r(i,k)表示從點i發送到候選聚類中心k的數值消息,反映k點是否適合作為i點的聚類中心。a(i,k)則從候選聚類中心k發送到i的數值消息,反映i點是否選擇k作為其聚類中心。r (i, k)與a (i, k)越強,則k點作為聚類中心的可能性就越大,並且i點隸屬於以k點為聚類中心的聚類的可能性也越大。AP演算法通過迭代過程不斷更新每一個點的吸引度和歸屬度值,直到產生m個高質量的exemplar,同時將其餘的數據點分配到相應的聚類中。

4. 怎樣用matlab實現多維K-means聚類演算法

function [ labels ] = kmeans_clustering( data, k )
[num,~]=size(data);
ind = randperm(num);
ind = ind(1:k);
centers = data(ind,:);
d=inf;
labels = nan(num,1);
while d>0
labels0 = labels;
dist = pdist2(data, centers);
[~,labels] = min(dist,[],2);
d= sum(labels0 ~= labels);
for i=1:k
centers(i,:)=mean(data(labels == i,:),1);
end
end
end

5. matlab中聚類演算法

建議你直接使用命令clusterdata()猜羨
程序如下:
x=[1 2 3 34 44 78 5 6 3 0.2 34 56 67 ]';
>> T=clusterdata(x,'maxclust',2)

T =

1
1
1
2
2
2
1
1
1
1
2
2
2
結陪擾果解釋:T值為1的表示為第一類,2的表示為第二類;即1 2 3 5 6 3 0.2為穗亂拍第一類,其餘的為第二類。

6. matlab 聚類演算法如何取用最後一次迭代的結果

(1)適當選擇c個類的初始中心;
(2)在第k次迭代中,對任意一個樣本,求其到c個中心的距離,將該樣本歸到距離最短的中心所在的類,
(3)利用均值等方法更新該類的中心值;
(4)對於所有的c個聚類中心,如果利用(2)(3)的迭代法更新後,值保持不變,則迭代結束,否則繼續迭代。

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

同求高手解答此問題

8. matlab圖像聚類分割演算法 求大神告知以下代碼是用了什麼方法還有怎麼把圖像分割和聚類演算法結合在一起。

用了K均值聚類演算法,即求特徵點到兩個聚類中心的距離,哪個小就將他歸於哪一類中,即D1和D2

9. matlab 聚類演算法silhouette

~的意思的無視這個項,僅生成h。

snapnaw,拍攝圖像快照以包括在發布文檔中。代碼中沒有涉及發布文檔,所以沒有顯示。

參考網頁網頁鏈接

10. 怎麼用Matlab計算聚類演算法的正確率問題

我把K-mediods的matlab代碼貼出來,你好好學習一下
function label = kmedoids( data,k,start_data )
% kmedoids k中心點演算法函數
% data 待聚類的數據集,每一行是一個樣本數據點
% k 聚類個數
% start_data 聚類初始中心值,每一行為一個中心點,有cluster_n行
% class_idx 聚類結果,每個樣本點標記的類別
% 初始化變數
n = length(data);
dist_temp1 = zeros(n,k);
dist_temp2 = zeros(n,k);
last = zeros(n,1);
a = 0;
b = 0;
if nargin==3
centroid = start_data;
else
centroid = data(randsample(n,k),:);
end
for a = 1:k
temp1 = ones(n,1)*centroid(a,:);
dist_temp1(:,a) = sum((data-temp1).^2,2);
end
[~,label] = min(dist_temp1,[],2);
while any(label~=last)
for a = 1:k
temp2 = ones(numel(data(label==a)),1);
temp3 = data(label==a);
for b = 1:n
temp4 = temp2*data(b,:);
temp5 = sum((temp3-temp4).^2,2);
dist_temp2(b,a) = sum(temp5,1);
end
end
[~,centry_indx] = min(dist_temp2,[],1);
last = label;
centroid = data(centry_indx,:);
for a = 1:k
temp1 = ones(n,1)*centroid(a,:);
dist_temp1(:,a) = sum((data-temp1).^2,2);
end
[~,label] = min(dist_temp1,[],2);
end
end

熱點內容
上傳注入 發布:2025-05-02 11:10:46 瀏覽:699
linuxsock文件 發布:2025-05-02 11:10:36 瀏覽:186
什麼是光遇安卓官服 發布:2025-05-02 11:03:21 瀏覽:432
企業邊緣伺服器平台如何自建 發布:2025-05-02 10:55:26 瀏覽:848
人工菌存儲 發布:2025-05-02 10:51:06 瀏覽:800
安卓ftp文件管理器 發布:2025-05-02 10:48:51 瀏覽:401
求最短路徑演算法 發布:2025-05-02 10:34:08 瀏覽:250
win8訪問2003共享文件夾 發布:2025-05-02 10:33:32 瀏覽:567
vm演算法 發布:2025-05-02 10:29:48 瀏覽:296
自建伺服器如何接入直播 發布:2025-05-02 10:21:07 瀏覽:283