当前位置:首页 » 操作系统 » c聚类算法matlab

c聚类算法matlab

发布时间: 2022-05-09 18:43:44

❶ 聚类算法matlab语言怎么叙述

聚类算法1. 划分法(partitioning methods):给定一个有N个元组或者纪录的数据集,分裂法将构造K个分组,每一个分组就代表一个聚类,K<N。而且这K个分组满足下列条件:(1) 每一个分组至少包含一个数据纪录;(2)每一个数据纪录属于且仅属于一个分组(注意:这个要求在某些模糊聚类算法中可以放宽);对于给定的K,算法首先给出一个初始的分组方法,以后通过反复迭代的方法改变分组,使得每一次改进之后的分组方案都较前一次好,而所谓好的标准就是:同一分组中的记录越近越好,而不同分组中的纪录越远越好。使用这个基本思想的算法有:K-MEANS算法、K-MEDOIDS算法、CLARANS算法; 2. 层次法(hierarchical methods):这种方法对给定的数据集进行层次似的分解,直到某种条件满足为止。具体又可分为“自底向上”和“自顶向下”两种方案。例如在“自底向上”方案中,初始时每一个数据纪录都组成一个单独的组,在接下来的迭代中,它把那些相互邻近的组合并成一个组,直到所有的记录组成一个分组或者某个条件满足为止。代表算法有:BIRCH算法、CURE算法、CHAMELEON算法等;

❷ 聚类分析中有哪些算法是不用事先确定分类数的,最好是matlab上能用的

除了模糊C值聚类,其他的聚类方法如:传递闭包法,直接聚类法都不用事先确定分类数,不过这些方法matlab上没有现成的函数,需要自己编程,10来行代码就解决了,不要偷懒哦!只有C值聚类有现成的函数fcm

❸ k均值聚类算法、c均值聚类算法、模糊的c均值聚类算法的区别

k均值聚类:---------一种硬聚类算法,隶属度只有两个取值0或1,提出的基本根据是“类内误差平方和最小化”准则;
模糊的c均值聚类算法:-------- 一种模糊聚类算法,是k均值聚类算法的推广形式,隶属度取值为[0 1]区间内的任何一个数,提出的基本根据是“类内加权误差平方和最小化”准则;
这两个方法都是迭代求取最终的聚类划分,即聚类中心与隶属度值。两者都不能保证找到问题的最优解,都有可能收敛到局部极值,模糊c均值甚至可能是鞍点。
至于c均值似乎没有这么叫的,至少从我看到文献来看是没有。不必纠结于名称。如果你看的是某本模式识别的书,可能它想表达的意思就是k均值。
实际上k-means这个单词最先是好像在1965年的一篇文献提出来的,后来很多人把这种聚类叫做k均值。但是实际上十多年前就有了类似的算法,但是名字不一样,k均值的历史相当的复杂,在若干不同的领域都被单独提出。追寻算法的名称与历史没什么意义,明白具体的实现方法就好了。

❹ matlab 聚类算法如何取用最后一次迭代的结果

(1)适当选择c个类的初始中心;
(2)在第k次迭代中,对任意一个样本,求其到c个中心的距离,将该样本归到距离最短的中心所在的类,
(3)利用均值等方法更新该类的中心值;
(4)对于所有的c个聚类中心,如果利用(2)(3)的迭代法更新后,值保持不变,则迭代结束,否则继续迭代。

❺ 如何编写求K-均值聚类算法的Matlab程序

在聚类分析中,K-均值聚类算法(k-means
algorithm)是无监督分类中的一种基本方法,其也称为C-均值算法,其基本思想是:通过迭代的方法,逐次更新各聚类中心的值,直至得到最好的聚类结果。
假设要把样本集分为c个类别,算法如下:
(1)适当选择c个类的初始中心;
(2)在第k次迭代中,对任意一个样本,求其到c个中心的距离,将该样本归到距离最短的中心所在的类,
(3)利用均值等方法更新该类的中心值;
(4)对于所有的c个聚类中心,如果利用(2)(3)的迭代法更新后,值保持不变,则迭代结束,否则继续迭代。
下面介绍作者编写的一个分两类的程序,可以把其作为函数调用。
%%
function
[samp1,samp2]=kmeans(samp);
作为调用函数时去掉注释符
samp=[11.1506
6.7222
2.3139
5.9018
11.0827
5.7459
13.2174
13.8243
4.8005
0.9370
12.3576];
%样本集
[l0
l]=size(samp);
%%利用均值把样本分为两类,再将每类的均值作为聚类中心
th0=mean(samp);n1=0;n2=0;c1=0.0;c1=double(c1);c2=c1;for
i=1:lif
samp(i)<th0
c1=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;
c11=c1;c22=c2;
%聚类中心while
t==0samp1=zeros(1,l);
samp2=samp1;n1=1;n2=1;for
i=1:lif
abs(samp(i)-c11)<abs(samp(i)-c22)
samp1(n1)=samp(i);
cl1=cl1+samp(i);n1=n1+1;
c11=cl1/n1;elsesamp2(n2)=samp(i);
cl2=cl2+samp(i);n2=n2+1;
c22=cl2/n2;endendif
c11==c1
&&
c22==c2t=1;endcl1=c11;cl2=c22;
c1=c11;c2=c22;
end
%samp1,samp2为聚类的结果。
初始中心值这里采用均值的办法,也可以根据问题的性质,用经验的方法来确定,或者将样本集随机分成c类,计算每类的均值。
k-均值算法需要事先知道分类的数量,这是其不足之处。

❻ 模糊 C 均值聚类 FCM 算法MATLAB代码问题(还有一周就要答辩了,求解答啊)

我也做这个

❼ 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

❽ 在matlab中做模糊C均值聚类(fcm)算法如何体现初始隶属度

它的程序里面是用rand函数随机初始化了一个矩阵N*c,然后对这个随机矩阵进行归一化,即满足一行(也可能是列记不清楚了),反正是让它满足隶属度的每个样本属于所有类隶属度为1的条件。用这个矩阵进行初始化,计算新的中心 新的隶属度 新的中心。。。。 知道满足阈值。matlab里面自己有函数一招就能找到

❾ 怎么用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

❿ 有谁用matlab做过聚类算法

分类算法,参数分别为G(相似度矩阵),r(邻居门限),lambda(类门限),返回值A,一个cell数组,每个元素是一个向量,包含了一个类的所有元素。
function A=BFSN_Algorithm(G,r,lambda)
%广度优先搜索邻居的聚类算法实现
%G为相似度矩阵
%r和lambda为参数
%r为邻居门限,相似度大于r即为邻居
%lambda门限
%未分类元素对于某类的所有元素,如果是邻居则令X(i)=1,否则为0.i为类元素的下标
%对X求和并除以类元素个数,若此值大于lambda门限,则该未分类元素属于这类
%打开计时器
tic
%A为聚类结果
A={};
%k为分类计数
k=1;
%n为待分类元素个数
n=size(G,1);
%构建元素向量
member=1:n;
%只要member中还有未分类的元素就继续循环
while numel(member)~=0
%从member中取出一个元素a
a=member(1);
%新建空类A并将a送入Ak类
Ak=a;
%从member中删除a
member(1)=[];
%扫描member中的所有元素
%queue为广度优先搜索使用的队列
%将a送入queue中
queue=a;
%已访问过的元素
visited=zeros(1,n);
%如果队列非空说明还有没有检验过的邻居
while numel(queue)~=0
%一个元素出队
p=queue(1);
queue(1)=[];
%扫描member中所有元素
for count=1:numel(member)
%用member(count)作为待分类的元素
%p是从queue中取出,找到p的所有未访问邻居
if G(p,member(count))>r && visited(member(count))==0
%满足if的member(count)是未访问过的邻居
%放入queue中
queue=[queue member(count)];
%member(count)已经访问过了
visited(member(count))=1;
if sum(G(member(count),Ak)>r)/numel(Ak)>=lambda
%满足if的元素属于Ak类,根据lambda门限判断
Ak=[Ak member(count)];
member(count)=-1;
end
end
end
%删除member中已分类的元素
member(member==-1)=[];
end
%将Ak保存在cell数组A的第k个位置
A{k}=Ak;
%k指向下一个分类
k=k+1;
end
%关闭计时器
toc
由于编写的时候比较仓促,应该有很大的优化的余地。
plotAllClass.m
绘制已分类数据的图形,参数:data元素数据,A分类表,一个cell数组,调用BFSN_Algorithm得到。
function plotAllClass(data,A)
%data:m行2列的矩阵,m行代表m个元素,
%第一列为每个元素的横坐标
%第二列为每个元素的纵坐标
%A为分类列表,
%有c个元素的cell数组
%每个元素是一个向量
%包含了一个分类的所有元素在data中的行
%n=类别数
n=numel(A);
%绘图图案列表
style=['r*';'g*';'b*';'c*';'m*';'y*';'k*';...
'r+';'g+';'b+';'c+';'m+';'y+';'k+';...
'rs';'gs';'bs';'cs';'ms';'ys';'ks';...
'rp';'gp';'bp';'cp';'mp';'yp';'kp';...
'rh';'gh';'bh';'ch';'mh';'yh';'kh';...
'rd';'gd';'bd';'cd';'md';'yd';'kd';...
'ro';'go';'bo';'co';'mo';'yo';'ko';...
'rx';'gx';'bx';'cx';'mx';'yx';'kx';...
'rv';'gv';'bv';'cv';'mv';'yv';'kv';...
'r<';'g<';'b<';'c<';'m<';'y<';'k<';...
'r>';'g>';'b>';'c>';'m>';'y>';'k>';...
'r^';'g^';'b^';'c^';'m^';'y^';'k^';...
'r.';'g.';'b.';'c.';'m.';'y.';'k.'];
figure;
hold on;
for count=1:n
plot(data(A{count},1),data(A{count},2),style(count,:));
end
hold off;
这个函数最多能够绘制91个类别,如果有超过91个类,函数会出错。
show.m
包含了一个完整的流程,包括数据生成,相似度矩阵生成,分类,类别绘制。
%show.m
data=rand(200,2);
figure;
plot(data(:,1),data(:,2),'+');
G=createSimiR(data);
A=BFSN_Algorithm(G,0.95,0.95);
plotAllClass(data,A);

热点内容
android局域网视频 发布:2024-10-08 18:35:29 浏览:691
java访问私有变量 发布:2024-10-08 18:34:50 浏览:84
vivo锁屏壁纸缓存在哪 发布:2024-10-08 18:34:49 浏览:535
insta360oner配多大的存储卡 发布:2024-10-08 18:34:40 浏览:212
csgo和永劫无间哪个配置要求高 发布:2024-10-08 18:20:47 浏览:48
43数据库 发布:2024-10-08 18:19:20 浏览:816
svn服务器不能访问 发布:2024-10-08 18:18:36 浏览:984
压缩面膜多少钱 发布:2024-10-08 18:18:01 浏览:539
徐州少儿编程培训机构 发布:2024-10-08 17:52:29 浏览:389
c语言常用函数大全 发布:2024-10-08 17:46:33 浏览:410