導航:首頁 > 源碼編譯 > matlab聚類演算法

matlab聚類演算法

發布時間:2022-01-15 13:34:55

A. 求MATLAB實現canopy-kmeans聚類演算法的完整代碼

canopy聚類演算法的MATLAB程序

B. 如何對點進行k均值聚類演算法 matlab

在聚類分析中,K-均值聚類演算法(k-means algorithm)是無監督分類中的一種基本方法,其也稱為C-均值演算法,其基本思想是:通過迭代的方法,逐次更新各聚類中心的值,直至得到最好的聚類結果.\x0d假設要把樣本集分為c個類別,演算法如下:\x0d(1)適當選擇c個類的初始中心;\x0d(2)在第k次迭代中,對任意一個樣本,求其到c個中心的距離,將該樣本歸到距離最短的中心所在的類,\x0d(3)利用均值等方法更新該類的中心值;\x0d(4)對於所有的c個聚類中心,如果利用(2)(3)的迭代法更新後,值保持不變,則迭代結束,否則繼續迭代.\x0d下面介紹作者編寫的一個分兩類的程序,可以把其作為函數調用.\x0d%% function [samp1,samp2]=kmeans(samp); 作為調用函數時去掉注釋符\x0dsamp=[11.1506 6.7222 2.3139 5.9018 11.0827 5.7459 13.2174 13.8243 4.8005 0.9370 12.3576]; %樣本集\x0d[l0 l]=size(samp);\x0d%%利用均值把樣本分為兩類,再將每類的均值作為聚類中心\x0dth0=mean(samp);n1=0;n2=0;c1=0.0;c1=double(c1);c2=c1;for i=1:lif samp(i)<th0\x0dc1=c1+samp(i);n1=n1+1;elsec2=c2+samp(i);n2=n2+1;endendc1=c1/n1;c2=c2/n2; %初始聚類中心t=0;cl1=c1;cl2=c2;\x0dc11=c1;c22=c2; %聚類中心while t==0samp1=zeros(1,l);\x0dsamp2=samp1;n1=1;n2=1;for i=1:lif abs(samp(i)-c11)<abs(samp(i)-c22)\x0dsamp1(n1)=samp(i);\x0dcl1=cl1+samp(i);n1=n1+1;\x0dc11=cl1/n1;elsesamp2(n2)=samp(i);\x0dcl2=cl2+samp(i);n2=n2+1;\x0dc22=cl2/n2;endendif c11==c1 && c22==c2t=1;endcl1=c11;cl2=c22;\x0dc1=c11;c2=c22;\x0dend %samp1,samp2為聚類的結果.\x0d初始中心值這里採用均值的辦法,也可以根據問題的性質,用經驗的方法來確定,或者將樣本集隨機分成c類,計算每類的均值.\x0dk-均值演算法需要事先知道分類的數量,這是其不足之處.

C. 怎樣用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

D. 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

E. 怎麼用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

F. 誰有matlab模糊聚類演算法進行圖像分割的源程序啊

%%%%%%%%%%%%%%%模糊聚類%%%%%%%%%%%%%%%%%%%%%%%
clear;
loadF:\從0開始\數據\data.txt;
INPUTDATA=data;
%--------原始數據標准化-------%
disp('請選擇原始數據標准化方式:');
disp('<1-總和標准化|2-標准差標准化|3-極大值標准化|4-極差標准化>');
wayforstand=input('請輸入:');
switchwayforstand
case1,
DATAFORCLUS=standard_use_sum(INPUTDATA);
case2,
DATAFORCLUS=standard_use_std(INPUTDATA);
case3,
DATAFORCLUS=standard_use_max(INPUTDATA);
case4,
DATAFORCLUS=standard_use_jc(INPUTDATA);
otherwise
error('您的輸入不符合要求->執行結束!!!');
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%基於模糊等價關系的模糊聚類%%%%%%%%%%%%%%%%%%%%%%
%----------構造相似關系-----------%
numrows=size(DATAFORCLUS,1);
numcols=size(DATAFORCLUS,2);
disp('請選擇對象之間相似性統計量的方式:');
disp('<1-相關系數法|2-夾角餘弦法|3-指數相似系數法|4-絕對值指數法|5-算術平均最小法|6-最大最小值法|7-絕對值差數法|8-數量積法>');
wayforr_ij=input('請輸入:');
switchwayforr_ij
case1,%-----------------------------------相關系數法
fori=1:numrows,
forj=1:numrows,
meani=mean(DATAFORCLUS(i,:));meanj=mean(DATAFORCLUS(j,:));
simiR(i,j)=sum((DATAFORCLUS(i,:)-meani).*(DATAFORCLUS(j,:)-meanj))/...
(sqrt(sum((DATAFORCLUS(i,:)-meani).^2))*sqrt(sum((DATAFORCLUS(j,:)-meanj).^2)));
end
end
case2,%-----------------------------------夾角餘弦法
fori=1:numrows,
forj=1:numrows,
simiR(i,j)=sum(DATAFORCLUS(i,:).*DATAFORCLUS(j,:))/...
(sqrt(sum(DATAFORCLUS(i,:).*DATAFORCLUS(i,:)))*sqrt(sum(DATAFORCLUS(j,:).*DATAFORCLUS(j,:))));
end
end
case3,%-----------------------------------指數相似系數法
case4,%-----------------------------------絕對值指數法
case5,%-----------------------------------算術平均最小法
case6,%-----------------------------------最大最小值法
case7,%-----------------------------------絕對值差數法
case8,%-----------------------------------數量積法
otherwise
error('您的輸入不符合要求->執行結束!!!');
end
%-------改造成等價關系----------%
sign=0;
numselfmul=1;
simiRk=eye(numrows);
equi_tem=simiR;
whilesign==0,
fori=1:numrows,
forj=1:numrows,
forc=1:numrows,
rij_temp(c)=min([equi_tem(i,c)equi_tem(c,j)]);
end
simiRk(i,j)=max(rij_temp);
end
end
%--------------%
ifsum(sum(simiRk-equi_tem,1))~=0,
numselfmul=numselfmul+1;
equi_tem=simiRk;
else
sign=1;
break
end
%--------------%
end
ifsign==1,
disp('從相似矩陣到等價矩陣改造成功!!!');
else
disp('從相似矩陣到等價矩陣改造失敗!!!');
end
equiR=simiRk;
numclass=input('請輸入聚類數:');
%---------在不同的截集水平進行聚類--------------%
clasc=0;
comp_vec(1,1:numrows)=0;
index=0;
clasc=0;
tip=0;
alpha=0;
temnumeachclass=0;
while(tip==0),
%alpha=input('請輸入進行分類的截集水平λ:');
%alpha=0.5;%調試
if(alpha<0||alpha>1),
error('您輸入的截集水平λ不符合分類要求->執行結束!!!');
end
comp_arr=ones(numrows)*alpha;
result_arr=(equiR>=comp_arr);%--------------------result_arr判斷矩陣
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%撿菜演算法
fori=1:numrows,
ifsum(comp_vec(1,:)==result_arr(i,:))<numrows,%-----------說明沒有歸類
temnumeachclass=0;
%numeachclass(clasc)=index-temnumeachclass;
temsave=result_arr(i,:);
forj=1:numrows,
ifsum(result_arr(j,:)==temsave)==numrows,
index=index+1;
class(index)=j;
result_arr(j,:)=0;%--------------------說明已經被歸類
temnumeachclass=temnumeachclass+1;
end
end
clasc=clasc+1;
nec(clasc)=temnumeachclass;
else
continue;
end
end
ifclasc>=numclass,
tip=1;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%當模糊分類的數目小於等於所給出的類數時退出循環體
disp('成功!!!');
else
clearclass;
clearnumeachclass;
clearnec;
clasc=0;
index=0;
temnumeachclass=0;
alpha=alpha+0.01;
end
end
%----取聚類結果----%
num=0;
n=0;
fori=1:clasc,
forj=1:nec(i),
num=num+1;
n=n+1;
CLUS(n,:)=INPUTDATA(class(num),:);
end
n=n+1;
CLUS(n,:)=inf;
end
%formatsingle(CLUS)
lenexport=size(CLUS,1);
fori=1:lenexport,
RESULT(i,:)=sprintf('%15.2f',CLUS(i,:));
end
RESULT

G. 求自適應k均值聚類演算法 matlab

function group=Kmeans(k,mid)
%K均值聚類演算法
person=load('sample.txt','height','weight');%從文本文件讀入數據放入person結構體中
% person=person(1:10,:);
num=size(person,1);%獲得person結構體大小
for i=1:k%賦初始值,劃分為k類,每類只有選定的k個對象中的一個對象,每類的中心為選定的k個對象的值
class{i}(1)=mid(i);
middle(i,1)=person(mid(i),1);
middle(i,2)=person(mid(i),2);
end

distance=ComputDistance(person,middle,num,k);%計算每個樣本跟各類中心的距離
temp=cell(size(class));
flag=isSL(temp,class,k);
while flag==0%當分類不收斂的時候
temp=class;
class=cell(size(temp));
for i=1:num
[value,index]=min(distance(i,:)); %找到每個樣本距離哪個類最近
dtemp=[i];
class{index}=[class{index},dtemp]; %將該樣本劃分到距離最近的類中
end
middle=ComputMid(person,class,k);%重新計算各類中心點
distance=ComputDistance(person,middle,num,k);%重新計算各樣本與各類的距離
flag=isSL(temp,class,k);%判斷當前類有沒有變化
end
celldisp(class)
for i=1:k
group{i}=person(class{i}(:),:);
end

for i=1:k
covMat=cov(group{i});
fprintf('第%d類的均值向量為:\n',i);
disp(middle(i,:))
fprintf('第%d類的協方差矩陣為:\n',i);
disp(covMat)
end

function m=ComputMid(person,class,k)
%計算各類中心點
%結果返回到m矩陣中
for i=1:k
length=size(class{i},1);
csum1=0;
csum2=0;
for j=1:length
csum1=csum1+person(class{i}(j),1);
csum2=csum2+person(class{i}(j),2);
end
m(i,1)=csum1/length;
m(i,2)=csum2/length;
% m(i,1)=sum(person(class{i}(:),1))/size(class{i},1);
% m(i,2)=sum(person(class{i}(:),2))/size(class{i},1);
end

function d=ComputDistance(person,middle,num,k)
%計算每個樣本跟各類中心的距離
%結果返回到d矩陣中
for i=1:num
for j=1:k
d(i,j)=sqrt((person(i,1)-middle(j,1)).^2+(person(i,2)-middle(j,2)).^2);
end
end

function flag=isSL(temp,class,k)
%判斷當前類有沒有變化即是否收斂
%有變化則返回0,否則返回1
for i=1:k
if size(temp{i},1)==size(class{i},1)
for j=1:size(class{i},1)
if temp{i}(j)~=class{i}(j)
flag=0;
return;
end
end
flag=1;
else
flag=0;
return;
end
end

H. matlab 聚類演算法silhouette

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

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

參考網頁網頁鏈接

I. 聚類演算法的准確性在matlab中用什麼函數

聚類分析的概念主要是來自多元統計分析,例如,考慮二維坐標繫上有散落的許多點,這時,需要對散點進行合理的分類,就需要聚類方面的知識。

J. OPTICS聚類演算法的matlab實現

OPTICS聚類演算法代碼,從http://www.pudn.com/downloads238/sourcecode/math/detail1113278.html
該處下載。
% -------------------------------------------------------------------------
% Function:
% [RD,CD,order]=optics(x,k)
% -------------------------------------------------------------------------
% Aim:
% Ordering objects of a data set to obtain the clustering structure
% -------------------------------------------------------------------------
% Input:
% x - data set (m,n); m-objects, n-variables
% k - number of objects in a neighborhood of the selected object
% (minimal number of objects considered as a cluster)
% -------------------------------------------------------------------------
% Output:
% RD - vector with reachability distances (m,1)
% CD - vector with core distances (m,1)
% order - vector specifying the order of objects (1,m)
% -------------------------------------------------------------------------
% Example of use:
% x=[randn(30,2)*.4;randn(40,2)*.5+ones(40,1)*[4 4]];
% [RD,CD,order]=optics(x,4)
% -------------------------------------------------------------------------
%

function [RD,CD,order]=optics(x,k)

[m,n]=size(x);
CD=zeros(1,m);
RD=ones(1,m)*10^10;

% Calculate Core Distances
for i=1:m
D=sort(dist(x(i,:),x));
CD(i)=D(k+1);
end

order=[];
seeds=[1:m];

ind=1;

while ~isempty(seeds)
ob=seeds(ind);
seeds(ind)=[];
order=[order ob];
mm=max([ones(1,length(seeds))*CD(ob);dist(x(ob,:),x(seeds,:))]);
ii=(RD(seeds))>mm;
RD(seeds(ii))=mm(ii);
[i1 ind]=min(RD(seeds));
end

RD(1)=max(RD(2:m))+.1*max(RD(2:m));

function [D]=dist(i,x)

% function: [D]=dist(i,x)
%
% Aim:
% Calculates the Euclidean distances between the i-th object and all objects in x
% Input:
% i - an object (1,n)
% x - data matrix (m,n); m-objects, n-variables
%
% Output:
% D - Euclidean distance (m,1)

[m,n]=size(x);
D=(sum((((ones(m,1)*i)-x).^2)'));

if n==1
D=abs((ones(m,1)*i-x))';
end

閱讀全文

與matlab聚類演算法相關的資料

熱點內容
qt入門pdf 瀏覽:664
視頻監控取消默認加密 瀏覽:294
雲伺服器怎麼設置輸入鍵盤 瀏覽:817
單片機支持多大mhz 瀏覽:42
linux啟動mysql命令 瀏覽:792
編程和游戲買什麼筆記本 瀏覽:902
程序員座點陣圖片大全 瀏覽:142
aix重啟命令 瀏覽:460
騰訊雲伺服器的後台 瀏覽:47
安卓怎麼定時打開軟體 瀏覽:597
笨手機應用加密怎麼刪除 瀏覽:97
為什麼vc6編譯是灰色 瀏覽:389
python音標讀法 瀏覽:577
反轉語句python 瀏覽:23
哪個app搞英雄聯盟手游活動 瀏覽:585
如何查看郵箱收發伺服器 瀏覽:521
極簡歐洲史中文版pdf 瀏覽:908
python顯示變數值 瀏覽:387
副路由器為什麼要關伺服器 瀏覽:575
國家反詐騙app蘋果怎麼設置 瀏覽:464