matlab模糊聚类程序
利用Matlab进行数据聚类与分类的方法
利用Matlab进行数据聚类与分类的方法导言在当今大数据时代,处理和分析庞大的数据成为许多领域的重要任务,而数据聚类与分类是其中重要的一环。
Matlab作为一种功能强大的编程语言和工具,在数据聚类与分类方面具有广泛的应用。
本文将介绍利用Matlab进行数据聚类与分类的常用方法和技巧。
一、数据聚类的概念与方法1.1 数据聚类的定义数据聚类是指将具有相似特征的数据对象自动分成若干组的过程,旨在将相似的数据归为一类,不相似的数据分开。
1.2 常用的数据聚类方法- K-means聚类算法:K-means是一种常见且简单的数据聚类方法,通过迭代优化的方式将数据划分成K个簇。
- 层次聚类算法:层次聚类是一种基于树形结构的聚类方法,它将数据逐步合并或分裂,直到得到最终的聚类结果。
- 密度聚类算法:密度聚类根据数据点的密度特征进行聚类,能够有效地发现任意形状和大小的聚类簇。
- 谱聚类算法:谱聚类结合图论的思想,通过计算数据的拉普拉斯矩阵特征向量,将数据聚类成多个划分。
二、利用Matlab进行数据聚类2.1 准备工作在使用Matlab进行数据聚类之前,需要准备好数据集。
通常,数据集需要进行预处理,包括数据清洗、特征选择和降维等步骤。
2.2 K-means聚类利用Matlab的统计工具箱,可以轻松实现K-means聚类算法。
首先,将数据集读入Matlab并进行必要的归一化处理。
然后,使用kmeans函数运行K-means聚类算法,指定聚类的簇数K和迭代次数等参数。
最后,根据聚类结果进行数据可视化或进一步的分析。
2.3 层次聚类Matlab中的cluster函数提供了层次聚类的功能。
将数据集转换为距离矩阵,然后调用cluster函数即可实现层次聚类。
该函数支持不同的聚类算法和距离度量方法,用户可以根据具体需求进行调整。
2.4 密度聚类实现密度聚类可以使用Matlab中的DBSCAN函数。
DBSCAN是一种基于密度的聚类算法,它通过确定数据点的领域密度来判定是否为核心对象,并通过核心对象的连接性将数据点分为不同的簇。
Matlab笔记记录——模糊聚类解析总结计划原理及实现023
23.模糊聚类剖析原理及实现聚类剖析,就是用数学方法研究和办理所给定对象,依据事物间的相像性进行区分和分类的过程。
传统的聚类剖析是一种硬区分,它把每个待识其他对象严格地区分到某个类中,拥有非此即彼的性质,这种分类的类型界线是分明的。
跟着模糊理论的成立,人们开始用模糊的方法来办理聚类问题,称为模糊聚类剖析。
因为模糊聚类获得了样本数与各个类其他不确立性程度,表达了样本类属的中介性,即成立起了样本关于类其他不确立性的描绘,能更客观地反应现实世界。
本篇先介绍传统的两种(适合数据量较小情况,及理解模糊聚类原理):鉴于择近原则、模糊等价关系的模糊聚类方法。
(一)预备知识一、模糊等价矩阵定义 1 设 R=(r ij )n×n为模糊矩阵, I 为 n 阶单位矩阵,若R 知足i)自反性: I≤R (等价于 r ii =1);ii)对称性: R T=R;则称 R 为模糊相像矩阵,若再知足niii) 传达性: R2≤R(等价于( r ik r kj ) r ij)k1则称 R 为模糊等价矩阵。
定理 1 设 R 为 n 阶模糊相像矩阵,则存在一个最小的自然数k(k<n), 使得 R k为模糊等价矩阵,且对全部大于k 的自然数 l,恒有R l=R k. R k称为 R 的传达闭包矩阵,记为 t(R).二、模糊矩阵的λ-截矩阵定义 2 设 A=(a ij)n×m为模糊矩阵,对随意的λ∈[0,1], 作矩阵Aa ij( )n m此中,a ij( )1,aij 0,aij称为模糊矩阵 A 的λ-截矩阵。
明显,Aλ为布尔矩阵,且其等价性与与A一致。
意义:将模糊等价矩阵转变为等价的布尔矩阵,能够获得有限论域上的一般等价关系,而等价关系是能够分类的。
所以,当λ在[0,1]上改动时,由 Aλ获得不一样的分类。
若λ1<λ2,则Aλ1≥Aλ2,进而由Aλ2 确立的分类是由Aλ1 确立的分类的加细。
当λ从 1 递减变化到 0 时,Aλ的分类由细变粗,渐渐合并,形成一个分级聚类树。
在Matlab中使用模糊C均值聚类进行图像分析的技巧
在Matlab中使用模糊C均值聚类进行图像分析的技巧在图像分析领域,模糊C均值聚类(FCM)是一种常用的工具,它可以帮助我们发现图像中隐藏的信息和模式。
通过使用Matlab中的模糊逻辑工具箱,我们可以轻松地实现FCM算法,并进行图像分析。
本文将介绍在Matlab中使用FCM进行图像分析的技巧。
首先,让我们简要了解一下FCM算法。
FCM是一种基于聚类的图像分割方法,它将图像的像素分为不同的聚类,每个聚类代表一类像素。
与传统的C均值聚类算法不同,FCM允许像素属于多个聚类,因此能够更好地处理图像中的模糊边界。
在Matlab中使用FCM进行图像分析的第一步是加载图像。
可以使用imread函数将图像加载到Matlab的工作区中。
例如,我们可以加载一张名为“image.jpg”的图像:```matlabimage = imread('image.jpg');```加载图像后,可以使用imshow函数显示图像。
这可以帮助我们对图像有一个直观的了解:```matlabimshow(image);```接下来,我们需要将图像转换为灰度图像。
这是因为FCM算法通常用于灰度图像分析。
可以使用rgb2gray函数将彩色图像转换为灰度图像:```matlabgrayImage = rgb2gray(image);```在使用FCM算法之前,我们需要对图像进行预处理。
预处理的目的是消除图像中的噪声和不必要的细节,从而更好地提取图像中的特征。
常用的图像预处理方法包括平滑、锐化和边缘检测等。
Matlab中提供了许多图像预处理函数。
例如,可以使用imnoise函数向图像中添加高斯噪声:```matlabnoisyImage = imnoise(grayImage, 'gaussian', 0, 0.01);```还可以使用imfilter函数对图像进行平滑处理。
常见的平滑方法包括均值滤波和高斯滤波:```matlabsmoothImage = imfilter(noisyImage, fspecial('average', 3));```一旦完成预处理步骤,我们就可以使用模糊逻辑工具箱中的fcm函数执行FCM算法。
MATLAB做聚类
用matlab做聚类分析转载一:MATLAB提供了两种方法进行聚类分析:1、利用clusterdata 函数对数据样本进行一次聚类,这个方法简洁方便,其特点是使用范围较窄,不能由用户根据自身需要来设定参数,更改距离计算方法;2、分步聚类:(1)用pdist函数计算变量之间的距离,找到数据集合中两辆变量之间的相似性和非相似性;(2)用linkage函数定义变量之间的连接;(3)用cophenetic函数评价聚类信息;(4)用cluster函数进行聚类。
下边详细介绍两种方法:1、一次聚类Clusterdata函数可以视为pdist、linkage与cluster的综合,一般比较简单。
【clusterdata函数:调用格式:T=clusterdata(X,cutoff)等价于Y=pdist(X,’euclid’); Z=linkage(Y,’single’); T=cluster(Z,cutoff)】2、分步聚类(1)求出变量之间的相似性用pdist函数计算出相似矩阵,有多种方法可以求距离,若此前数据还未无量纲化,则可用zscore函数对其标准化【pdist函数:调用格式:Y=pdist(X,’metric’)说明:X是M*N矩阵,为由M个样本组成,每个样本有N个字段的数据集metirc取值为:’euclidean’:欧氏距离(默认)‘seuclidean’:标准化欧氏距离;‘mahalanobis’:马氏距离… 】pdist生成一个M*(M-1)/2个元素的行向量,分别表示M个样本两两间的距离。
这样可以缩小保存空间,不过,对于读者来说却是不好操作,因此,若想简单直观的表示,可以用squareform函数将其转化为方阵,其中x(i,j)表示第i个样本与第j个样本之的距离,对角线均为0.(2)用linkage函数来产生聚类树【linkage函数:调用格式:Z=linkage(Y,’method’)说明:Y为pdist函数返回的M*(M-1)/2个元素的行向量,method可取值:‘single’:最短距离法(默认);’complete’:最长距离法;‘average’:未加权平均距离法;’weighted’:加权平均法‘centroid’:质心距离法;‘median’:加权质心距离法;‘ward’:内平方距离法(最小方差算法)】返回的Z为一个(M-1)*3的矩阵,其中前两列为索引标识,表示哪两个序号的样本可以聚为同一类,第三列为这两个样本之间的距离。
模糊c均值聚类 FCM算法的MATLAB代码
模糊c均值聚类FCM算法的MATLAB代码我做毕业论文时需要模糊C-均值聚类,找了好长时间才找到这个,分享给大家:FCM算法的两种迭代形式的MA TLAB代码写于下,也许有的同学会用得着:m文件1/7:function [U,P,Dist,Cluster_Res,Obj_Fcn,iter]=fuzzycm(Data,C,plotflag,M,epsm)% 模糊C 均值聚类FCM: 从随机初始化划分矩阵开始迭代% [U,P,Dist,Cluster_Res,Obj_Fcn,iter] = fuzzycm(Data,C,plotflag,M,epsm)% 输入:% Data: N×S 型矩阵,聚类的原始数据,即一组有限的观测样本集,% Data 的每一行为一个观测样本的特征矢量,S 为特征矢量% 的维数,N 为样本点的个数% C: 聚类数,1<C<N% plotflag: 聚类结果2D/3D 绘图标记,0 表示不绘图,为缺省值% M: 加权指数,缺省值为2% epsm: FCM 算法的迭代停止阈值,缺省值为1.0e-6% 输出:% U: C×N 型矩阵,FCM 的划分矩阵% P: C×S 型矩阵,FCM 的聚类中心,每一行对应一个聚类原型% Dist: C×N 型矩阵,FCM 各聚类中心到各样本点的距离,聚类中% 心i 到样本点j 的距离为Dist(i,j)% Cluster_Res: 聚类结果,共C 行,每一行对应一类% Obj_Fcn: 目标函数值% iter: FCM 算法迭代次数% See also: fuzzydist maxrowf fcmplotif nargin<5epsm=1.0e-6;endif nargin<4M=2;endif nargin<3plotflag=0;end[N,S]=size(Data);m=2/(M-1);iter=0;Dist(C,N)=0; U(C,N)=0; P(C,S)=0;% 随机初始化划分矩阵U0 = rand(C,N);U0=U0./(ones(C,1)*sum(U0));% FCM 的迭代算法while true% 迭代计数器iter=iter+1;% 计算或更新聚类中心PUm=U0.^M;P=Um*Data./(ones(S,1)*sum(Um'))';% 更新划分矩阵Ufor i=1:Cfor j=1:NDist(i,j)=fuzzydist(P(i,:),Data(j,:));endendU=1./(Dist.^m.*(ones(C,1)*sum(Dist.^(-m))));% 目标函数值: 类内加权平方误差和if nargout>4 | plotflagObj_Fcn(iter)=sum(sum(Um.*Dist.^2));end% FCM 算法迭代停止条件if norm(U-U0,Inf)<epsmbreakendU0=U;end% 聚类结果if nargout > 3res = maxrowf(U);for c = 1:Cv = find(res==c);Cluster_Res(c,1:length(v))=v;endend% 绘图if plotflagfcmplot(Data,U,P,Obj_Fcn);endm文件2/7:function [U,P,Dist,Cluster_Res,Obj_Fcn,iter]=fuzzycm2(Data,P0,plotflag,M,epsm) % 模糊C 均值聚类FCM: 从指定初始聚类中心开始迭代% [U,P,Dist,Cluster_Res,Obj_Fcn,iter] = fuzzycm2(Data,P0,plotflag,M,epsm)% 输入: Data,plotflag,M,epsm: 见fuzzycm.m% P0: 初始聚类中心% 输出: U,P,Dist,Cluster_Res,Obj_Fcn,iter: 见fuzzycm.m% See also: fuzzycmif nargin<5epsm=1.0e-6;if nargin<4M=2;endif nargin<3plotflag=0;end[N,S] = size(Data); m = 2/(M-1); iter = 0;C=size(P0,1);Dist(C,N)=0;U(C,N)=0;P(C,S)=0;% FCM 的迭代算法while true% 迭代计数器iter=iter+1;% 计算或更新划分矩阵Ufor i=1:Cfor j=1:NDist(i,j)=fuzzydist(P0(i,:),Data(j,:));endendU=1./(Dist.^m.*(ones(C,1)*sum(Dist.^(-m))));% 更新聚类中心PUm=U.^M;P=Um*Data./(ones(S,1)*sum(Um'))';% 目标函数值: 类内加权平方误差和if nargout>4 | plotflagObj_Fcn(iter)=sum(sum(Um.*Dist.^2));end% FCM 算法迭代停止条件if norm(P-P0,Inf)<epsmbreakendP0=P;end% 聚类结果if nargout > 3res = maxrowf(U);for c = 1:Cv = find(res==c);Cluster_Res(c,1:length(v))=v;endend% 绘图if plotflagfcmplot(Data,U,P,Obj_Fcn);m文件3/7:function fcmplot(Data,U,P,Obj_Fcn)% FCM 结果绘图函数% See also: fuzzycm maxrowf ellipse[C,S] = size(P); res = maxrowf(U);str = 'po*x+d^v><.h';% 目标函数绘图figure(1),plot(Obj_Fcn)title('目标函数值变化曲线','fontsize',8)% 2D 绘图if S==2figure(2),plot(P(:,1),P(:,2),'rs'),hold onfor i=1:Cv=Data(find(res==i),:);plot(v(:,1),v(:,2),str(rem(i,12)+1))ellipse(max(v(:,1))-min(v(:,1)), ...max(v(:,2))-min(v(:,2)), ...[max(v(:,1))+min(v(:,1)), ...max(v(:,2))+min(v(:,2))]/2,'r:') endgrid on,title('2D 聚类结果图','fontsize',8),hold off end% 3D 绘图if S>2figure(2),plot3(P(:,1),P(:,2),P(:,3),'rs'),hold onfor i=1:Cv=Data(find(res==i),:);plot3(v(:,1),v(:,2),v(:,3),str(rem(i,12)+1))ellipse(max(v(:,1))-min(v(:,1)), ...max(v(:,2))-min(v(:,2)), ...[max(v(:,1))+min(v(:,1)), ...max(v(:,2))+min(v(:,2))]/2, ...'r:',(max(v(:,3))+min(v(:,3)))/2) endgrid on,title('3D 聚类结果图','fontsize',8),hold off endm文件4/7:function D=fuzzydist(A,B)% 模糊聚类分析: 样本间的距离% D = fuzzydist(A,B)D=norm(A-B);m文件5/7:function mr=maxrowf(U,c)% 求矩阵U 每列第c 大元素所在行,c 的缺省值为1% 调用格式: mr = maxrowf(U,c)% See also: addrif nargin<2c=1;endN=size(U,2);mr(1,N)=0;for j=1:Naj=addr(U(:,j),'descend');mr(j)=aj(c);endm文件6/7:function ellipse(a,b,center,style,c_3d)% 绘制一个椭圆% 调用: ellipse(a,b,center,style,c_3d)% 输入:% a: 椭圆的轴长(平行于x 轴)% b: 椭圆的轴长(平行于y 轴)% center: 椭圆的中心[x0,y0],缺省值为[0,0]% style: 绘制的线型和颜色,缺省值为实线蓝色% c_3d: 椭圆的中心在3D 空间中的z 轴坐标,可缺省if nargin<4style='b';endif nargin<3 | isempty(center)center=[0,0];endt=1:360;x=a/2*cosd(t)+center(1);y=b/2*sind(t)+center(2);if nargin>4plot3(x,y,ones(1,360)*c_3d,style)elseplot(x,y,style)endm文件7/7:function f = addr(a,strsort)% 返回向量升序或降序排列后各分量在原始向量中的索引% 函数调用:f = addr(a,strsort)% strsort: 'ascend' or 'descend'% default is 'ascend'% -------- example --------% addr([ 4 5 1 2 ]) returns ans:% [ 3 4 1 2 ]if nargin==1strsort='ascend';endsa=sort(a); ca=a;la=length(a);f(la)=0;for i=1:laf(i)=find(ca==sa(i),1);ca(f(i))=NaN;endif strcmp(strsort,'descend') f=fliplr(f);end几天前我还在这里发帖求助,可是很幸运在其他地方找到了,在这里和大家分享一下!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!');enddata_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),不是数时为1nan_index = find(isnan(options)==1);%将denfault_options中对应位置的参数赋值给options中不是数的位置.options(nan_index) = default_options(nan_index);if options(1) <= 1, %如果模糊矩阵的指数小于等于1error('The exponent should be greater than 1!');endend%将options 中的分量分别赋值给四个变量;expo = options(1); % 隶属度矩阵U的指数max_iter = options(2); % 最大迭代次数min_impro = options(3); % 隶属度最小变化量,迭代终止条件display = options(4); % 每次迭代是否输出信息标志obj_fcn = zeros(max_iter, 1); % 初始化输出参数obj_fcnU = 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,endenditer_n = i; % 实际迭代次数obj_fcn(iter_n+1:max_iter) = [];[center, U, obj_fcn] = FCMClust(Data,N_cluster,options)data=[94.4304 98 60 0 8592.8068 70 70 0 75.286.3522 100 75 24.87 91.580.5512 50 90 0 65.480.494 76 100 0 9888.1528 100 60 80 78.484.567 55 80 0 8587.722 30 60 0 4988.0056 95 70 46.459 45.885.948 100 60 0 55.683.9578 10 90 0 78.490.0822 5 60 0 58.876.7448 10 60 0 39.295.062 100 70 62.37 94.8];N_cluster=4;options(1)=[2];options(2)=[100];options(3)=[1e-5];options(4)=[1];。
MATLAB模糊逻辑工具箱函数
基本FIS编辑器函数fuzzy格式 fuzzy %弹出未定义的基本FIS编辑器fuzzy(fismat) %使用fuzzy('tipper'),弹出下图FIS编辑器。
编辑器是任意模糊推理系统的高层显示,它允许你调用各种其它的编辑器来对其操作。
此界面允许你方便地访问所有其它的编辑器,并以最灵活的方式与模糊系统进行交互。
方框图:窗口上方的方框图显示了输入、输出和它们中间的模糊规则处理器。
单击任意一个变量框,使选中的方框成为当前变量,此时它变成红色高亮方框。
双击任意一个变量,弹出隶属度函数编辑器,双击模糊规则编辑器,弹出规则编辑器。
菜单项:FIS编辑器的菜单棒允许你打开相应的工具,打开并保存系统。
·File菜单包括:New mamdani FIS … 打开新mamdani型系统;New Sugeno FIS …打开新Sugeno型系统;Open from disk …从磁盘上打开指定的.fis文件系统;Save to disk 保存当前系统到磁盘上的一个.fis文件上;Save to disk as … 重命名方式保存当前系统到磁盘上;Open from workspace … 从工作空间中指定的FIS结构变量装入一个系统;Save to workspace …保存系统到工作空间中当前命名的FIS结构变量中;Save to workspace as …保存系统到工作空间中指定的FIS结构变量中;Close windows 关闭GUI;·Edit菜单包括:Add input 增加另一个输入到当前系统中;Add output 增加另一个输出到当前系统中;Remove variable 删除一个所选的变量;Undo 恢复当前最近的改变;Edit MFs …调用隶属度函数编辑器;Edit rules …调用规则编辑器;Edit anfis …只对单输出Sugeno型系统调用编辑器;View rules …调用规则观察器;View surface … 调用曲面观察器。
如何在Matlab中进行模糊聚类分析
如何在Matlab中进行模糊聚类分析在数据分析领域,模糊聚类分析是一种常用的技术,它可以应用于各种领域的数据处理和模式识别问题。
而Matlab作为一种功能强大的数据分析工具,也提供了丰富的函数和工具箱,以支持模糊聚类分析的实施。
1. 引言模糊聚类分析是一种基于模糊集理论的聚类方法,与传统的硬聚类方法不同,它允许样本属于多个聚类中心。
这种方法的优势在于可以更好地应对数据中的不确定性和复杂性,对于某些模糊或模糊边界问题具有更好的解释能力。
2. 模糊聚类算法概述Matlab提供了多种模糊聚类算法的实现,其中最常用的是基于模糊C均值(Fuzzy C-Means,FCM)算法。
FCM算法的基本思想是通过最小化聚类后的模糊划分矩阵与原始数据之间的距离来确定每个样本所属的聚类中心。
3. 数据预处理与特征提取在进行模糊聚类分析之前,需要对原始数据进行预处理和特征提取。
预处理包括数据清洗、缺失值处理和异常值处理等;特征提取则是从原始数据中抽取出具有代表性和区分性的特征,用于模糊聚类分析。
4. 模糊聚类分析步骤在Matlab中,进行模糊聚类分析通常包括以下步骤:(1) 初始化聚类中心:通过随机选择或基于某种准则的方法初始化聚类中心。
(2) 计算模糊划分矩阵:根据当前的聚类中心,计算每个样本属于各个聚类中心的隶属度。
(3) 更新聚类中心:根据当前的模糊划分矩阵,更新聚类中心的位置。
(4) 判断终止条件:通过设置一定的终止条件,判断是否达到停止迭代的条件。
(5) 输出最终结果:得到最终的聚类结果和每个样本所属的隶属度。
5. 模糊聚类结果评估在进行模糊聚类分析后,需要对聚类结果进行评估以验证其有效性和可解释性。
常用的评估指标包括模糊划分矩阵的聚类有效性指标、外部指标和内部指标等。
通过这些指标的比较和分析,可以选择合适的模糊聚类算法和参数设置。
6. 模糊聚类的应用模糊聚类分析在诸多领域中都有广泛的应用。
例如,在图像处理中,可以利用模糊聚类方法对图像进行分割和识别;在生物信息学中,可以应用于基因表达数据的分类和模式识别等。
用matlab做聚类分析
用matlab做聚类分析MATLAB提供了两种方法进行聚类分析:一、利用clusterdata 函数对数据样本进行一次聚类,这个方法简洁方便,其特点是使用范围较窄,不能由用户根据自身需要来设定参数,更改距离计算方法;二、步聚类:(1)用pdist函数计算变量之间的距离,找到数据集合中两辆变量之间的相似性和非相似性;(2)用linkage函数定义变量之间的连接;(3)用cophenet函数评价聚类信息;(4)用cluster函数进行聚类。
下边详细介绍两种方法:1、一次聚类Clusterdata函数可以视为pdist、linkage与cluster的综合,即Clusterdata函数调用了pdist、linkage和cluster,用来由原始样本数据矩阵X创建系统聚类,一般比较简单。
clusterdata函数的调用格式:T=clusterdata(X,cutoff)输出参数T是一个包含n个元素的列向量,其元素为相应观测所属类的类序号。
输入 的矩阵,矩阵的每一行对应一个观测(样品),每一列对应一个变量。
Cutoff 参数X是n p为阈值。
(1)当0<cutoff<2时,T=clusterdata(X,cutoff) 等价于Y=pdist(X,’euclid’); Z=linkage(Y,’single’); T=cluster(Z,’cutoff’,cutoff) ;(‘cutoff’指定不一致系数或距离的阈值,参数值为正实数)(2)Cutoff>>2时,T=clusterdata(X,cutoff) 等价于Y=pdist(X,’euclid’); Z=linkage(Y,’single’); T=cluster(Z, ‘maxclust’,cutoff) ;(‘maxclust’指定最大类数,参数值为正整数)2、分步聚类(1)求出变量之间的相似性用pdist函数计算出相似矩阵,有多种方法可以求距离,若此前数据还未无量纲化,则可用zscore函数对其标准化【pdist函数:调用格式:Y=pdist(X,’metric’)说明:X是M*N矩阵,为由M个样本组成,每个样本有N个字段的数据集‘seuclidean’:metirc取值为:’euclidean’:欧氏距离(默认)标准化欧氏距离;‘mahalanobis’:马氏距离;闵科夫斯基距离:‘ minkowski’;绝对值距离:‘ cityblock’…】pdist生成一个M*(M-1)/2个元素的行向量,分别表示M个样本两两间的距离。
模糊数学MATLAB应用
第6章模糊逻辑6.1 隶属函数6.1.1 高斯隶属函数函数gaussmf格式y=gaussmf(x,[sig c])说明高斯隶属函数的数学表达式为: , 其中为参数, x为自变量, sig为数学表达式中的参数。
例6-1>>x=0:0.1:10;>>y=gaussmf(x,[2 5]);>>plot(x,y)>>xlabel('gaussmf, P=[2 5]')结果为图6-1。
图6-16.1.2 两边型高斯隶属函数函数gauss2mf格式y = gauss2mf(x,[sig1 c1 sig2 c2])说明sig1.c1.sig2.c2为命令1中数学表达式中的两对参数例6-2>>x = (0:0.1:10)';>>y1 = gauss2mf(x, [2 4 1 8]);>>y2 = gauss2mf(x, [2 5 1 7]);>>y3 = gauss2mf(x, [2 6 1 6]);>>y4 = gauss2mf(x, [2 7 1 5]);>>y5 = gauss2mf(x, [2 8 1 4]);>>plot(x, [y1 y2 y3 y4 y5]);>>set(gcf, 'name', 'gauss2mf', 'numbertitle', 'off');结果为图6-2。
6.1.3 建立一般钟型隶属函数函数 gbellmf格式 y = gbellmf(x,params)说明 一般钟型隶属函数依靠函数表达式b 2|ac x |11)c ,b ,a ;x (f -+=这里x 指定变量定义域范围, 参数b 通常为正, 参数c 位于曲线中心, 第二个参数变量params 是一个各项分别为a, b 和c 的向量。
神经模糊预测控制及其MATLAB实现第6章 模糊神经和模糊聚类及其MATLAB实现
i A ( x1 ) A ( x2 )… A ( xn ) i A ( x1 ) A ( x2 )… A ( xn )
i 1 i 2 i n
或
B ( y) i B ( y )
i i
B ( y) i B ( y)
i 1
i
11
m
i 1
m
6.1.2 系统结构 根据上面给出的模糊系统的模糊模型,可设计出如 图6-2所示的模糊神经网络结构。图中所示为MIMO系统 ,它是上面所讨论的MISO情况的简单推广。
图6-2 基于标准模型的模糊神经网络结构图
12
图中第一层为输入层。该层的各个节点直接与输入向量 的各分量xi连接,它起着将输入值x = [x1 x2 …xn]T传送 到下一层的作用。该层的节点数N1= n。 第二层每个节点代表一个语言变量值,如 NB,PS 等。 它的作用是计算各输入分量属于各语言变量值模糊集合 的隶属度函数 ij ,其中
i i
9
从而输出量总的模糊集合为
m
B=
m i 1
Bi
i 1
B ( y) B ( y)
i
若采用加权平均的清晰化方法,则可求得输出的清 晰化量为 y B ( y )dy U
y
y
Uy
B
( y )dy
10
由于计算上式的积分很麻烦,实际计算时通常用下 m 面的近似公式
y
i j A ( xi )
i j
i = 1,2,…,n, j = 1,2,…,mi。n是输入量的维数,mi是xi的 模糊分割数。例如,若隶属函数采用高斯函数表示的铃 ( x c ) 形函数,则 j i e 其中 cij 和 ij 分别表示隶属函数的中心和宽度。该层的 节点总数。 N m
基于MATLAB的FCM聚类算法研究
传 递 闭包 法 是基 于 等价 矩 阵进 行 分 类 的 , 最 大 树 法 是 直 接 使 用 相 似 而 矩 阵进行分类 的, 其基本 思想是 : 以被 分类元 素为顶 点, 以模糊相似矩 阵 R 中的元素 为权 重的一棵最大 的生成树 。最大树模糊聚类算法 的主要 步骤
验 数据 库 进 行 了详 细 分 析 。 果 显 示 , 要 提 高聚 类 的准 确 率 , 先 完 成 初 始 中 心 确 定 的两 阶段 F M聚 类 算 法 , 免初 值 的主 观 随 意 性 , 结 如 需 C 避 从而 可 以提 高 模糊 聚类 的效 率 和 准 确 性 。
【 关键词】 M T A F M聚类算法 ALB C
应 用 科 学
基 于 M T AB的 F M聚 类算法研究 A L C
俞群 爱
【 摘
王艳 清
浙江杭州 3 0 1) 10 8
( 江 传 媒 学 院 现代 教 育技 术 中心 浙
要】 本文介绍 了 F M聚类算法是种柔性 的模糊划 分, C 通过对 比常用的其他模糊聚类算法 , F M聚类算法进行 了改进 , 对 C 并基于 M TA A L B对 实
双重性 :
造 成 的 ; 二 类 氢 脆 称 为 环 境 氢 脆 , 是 在 应 力 和 氢 气 氛 或 其 它 含 氢 介 质 第 它 的 联 合 作 用 下 引起 的一 种 脆 性 断 裂 , 如贮 氢 的压 力 容 器 中 出现 的 高压 氢 脆 内部 氢 脆 断 口往 往 出现 “白点 ” 白点 又 有 两种 类 型 : 种 是 在 钢 件 中 , 一 观察到纵向发裂 , 在其断 口上则呈现 白点。 这类白点多呈圆形或椭圆形 , 而 且 轮 廓 分 明 , 面 光 亮 呈 银 白色 , 以又 叫攸 ‘ 斑 ” 发裂 白 点 , 种 白 点 表 所 雪 或 这 实 际 上 就 是 一种 内部 微 细 裂 纹 , 是 由 于某 种 原 因致 使 材 料 中含 有 过 量 的 它 氢, 因氢的溶解度变化 ( 通常是随温度 降低 , 金属 中氢 的溶解度下 降) 过饱 , 和 氢 未 能 扩散 外 逸 , 在 某 些 缺 陷 处 聚集 成 氢 分 子所 造 成 的 。一 旦发 现 发 而 裂, 材料便无法挽救 。但 在形成发裂前低温长 时间保温 , 则可消除这类 白 点。 另一 种 白点 呈 鱼 眼 型 , 往 往 是 某 些 以 材 料 内部 的宏 观 缺 陷 如气 孔 、 它 夹 杂 等 为 核 心 的银 白色 斑 点 , 形 状 多 数 为 圆 形或 椭 圆形 。 圆 白 点 的大 小 往 其 往 同核 心 的大 小 有 关 , 即核 心 愈 大 , 白点 也 愈 大 , 点 区齐 平 而 略 为 下 凹 , 白 产 生 鱼 眼 白点 , 除氢 和 缺 陷 因 素 外 , 必 须有 一 定 的条 件 , 还 即应 有 一 定 的塑 性 变 形 量 和一 定 的形 变 速 度 。 如 果经 过 去氢 处 理或 消 除鱼 眼核 心 缺 陷 , 白
模糊神经和模糊聚类的MATLAB实现
模糊神经和模糊聚类的MATLAB实现模糊神经网络(Fuzzy Neural Networks)是一种结合了模糊逻辑和神经网络的方法,用于处理不确定性和模糊性问题。
它具有模糊逻辑的灵活性和神经网络的学习和优化能力。
在MATLAB中,可以使用Fuzzy Logic Toolbox来实现模糊神经网络。
下面将介绍如何使用MATLAB实现模糊神经网络。
首先,我们需要定义输入和输出的模糊集合。
可以使用Fuzzy Logic Toolbox提供的各种方法来定义模糊集合的隶属函数,例如使用trimf定义三角隶属函数或者使用gaussmf定义高斯隶属函数。
```input1 = trimf(inputRange, [a1, b1, c1]);input2 = gaussmf(inputRange, [mean, sigma]);output = trapmf(outputRange, [d1, e1, f1, g1]);```接下来,可以使用FIS Editor界面来创建和训练模糊神经网络。
在MATLAB命令窗口中输入fuzzy命令即可打开FIS Editor界面。
在FIS Editor界面中,可以添加输入和输出变量,并设置它们的隶属函数。
然后,可以添加规则来定义输入与输出之间的关系。
规则的形式可以使用自然语言或者模糊规则表达式(Fuzzy Rule Expression)。
训练模糊神经网络可以使用基于模糊神经网络的系统识别方法。
在MATLAB中,可以使用anfis函数来进行自适应网络训练。
anfis函数可以根据训练数据自动调整隶属函数参数和规则权重,以优化模糊神经网络的性能。
```fis = anfis(trainingData);```使用trainfis命令可以将训练好的模糊神经网络应用于新的数据。
trainfis命令将输入数据映射到输出模糊集中,并使用模糊推理进行预测。
输出结果是一个模糊集,可以使用defuzz命令对其进行模糊化。
Matlab中的聚类分析方法与应用案例
Matlab中的聚类分析方法与应用案例1. 引言聚类分析是一种常用的数据分析方法,它通过将相似的数据点分组,将不同的数据点划分到不同的类别中,从而帮助我们理解和发现数据中的隐藏模式和结构。
Matlab作为一种强大的数据处理和分析工具,提供了多种聚类分析方法和函数,使得我们可以方便地进行聚类分析并获得有价值的结果。
本文将介绍一些常用的Matlab聚类方法,并通过应用案例展示其实际应用价值。
2. K均值聚类K均值聚类是一种经典的聚类算法,它将数据点划分到离其最近的K个质心所表示的聚类中。
Matlab提供了kmeans函数,可以方便地进行K均值聚类分析。
以鸢尾花数据集为例,我们可以使用kmeans函数对花萼长度和花萼宽度两个特征进行聚类分析,并将结果可视化展示出来。
通过观察不同颜色的点的分布,我们可以清晰地看到K均值聚类所得到的三个类别。
3. 层次聚类层次聚类是一种将数据点逐步进行聚类的方法,它可以通过距离或相似性来度量不同数据点之间的关系。
Matlab提供了linkage函数用于计算数据点之间的距离,并可以通过dendrogram函数将层次聚类过程可视化。
我们以信用卡用户数据集为例,该数据集包含了不同用户的信用卡消费金额和还款金额等信息。
使用层次聚类分析方法,我们可以将数据点划分到不同的聚类中,并通过绘制树状图来展示不同聚类之间的关系。
4. 密度聚类密度聚类是一种基于数据点之间密度的聚类方法,它可以发现任意形状的聚类,并对噪声数据点进行抑制。
Matlab提供了DBSCAN函数用于密度聚类分析。
我们以人脸识别数据集为例,该数据集包含了不同人脸的特征点坐标。
通过密度聚类分析,我们可以将不同人脸识别为不同的聚类,并可以通过绘制散点图的方式展示聚类结果。
通过观察散点图,我们可以发现密度聚类方法能够有效地将不同人脸进行分组,并区分出异常数据点。
5. 非负矩阵分解聚类非负矩阵分解聚类是一种基于非负矩阵分解的聚类方法,它可以发现数据集中的潜在特征,并将数据点划分到不同的聚类中。
MATLAB实现FCM 聚类算法
本文在阐述聚类分析方法的基础上重点研究FCM 聚类算法。
FCM 算法是一种基于划分的聚类算法,它的思想是使得被划分到同一簇的对象之间相似度最大,而不同簇之间的相似度最小。
最后基于MATLAB实现了对图像信息的聚类。
第 1 章概述聚类分析是数据挖掘的一项重要功能,而聚类算法是目前研究的核心,聚类分析就是使用聚类算法来发现有意义的聚类,即“物以类聚” 。
虽然聚类也可起到分类的作用,但和大多数分类或预测不同。
大多数分类方法都是演绎的,即人们事先确定某种事物分类的准则或各类别的标准,分类的过程就是比较分类的要素与各类别标准,然后将各要素划归于各类别中。
确定事物的分类准则或各类别的标准或多或少带有主观色彩。
为获得基于划分聚类分析的全局最优结果,则需要穷举所有可能的对象划分,为此大多数应用采用的常用启发方法包括:k-均值算法,算法中的每一个聚类均用相应聚类中对象的均值来表示;k-medoid 算法,算法中的每一个聚类均用相应聚类中离聚类中心最近的对象来表示。
这些启发聚类方法在分析中小规模数据集以发现圆形或球状聚类时工作得很好,但当分析处理大规模数据集或复杂数据类型时效果较差,需要对其进行扩展。
而模糊C均值(Fuzzy C-means, FCM)聚类方法,属于基于目标函数的模糊聚类算法的范畴。
模糊C均值聚类方法是基于目标函数的模糊聚类算法理论中最为完善、应用最为广泛的一种算法。
模糊c均值算法最早从硬聚类目标函数的优化中导出的。
为了借助目标函数法求解聚类问题,人们利用均方逼近理论构造了带约束的非线性规划函数,以此来求解聚类问题,从此类内平方误差和WGSS(Within-Groups Sum of Squared Error)成为聚类目标函数的普遍形式。
随着模糊划分概念的提出,Dunn [10] 首先将其推广到加权WGSS 函数,后来由Bezdek 扩展到加权WGSS 的无限族,形成了FCM 聚类算法的通用聚类准则。
(完整word版)模糊层次分析法的Matlab实现
(完整word版)模糊层次分析法的Matlab实现一、引言层析分析法是将定量与定性相结合的多目标决策法,是一种使用频率很高的方法,在经济管理、城市规划等许多领域得到了广泛应用。
由于其结果受主观思维的影响较大,许多科研工作者对其进行了深入的研究,将模糊理论与层次分析法相结合,提出了模糊层次分析法。
为克服层次分析法中判断矩阵的一致性与人类思维的一致性存在的显著差异,文献[1-2]引入了模糊一致矩阵。
为解决解的精度及收敛问题,文献[3-4]引入幂法来求排序向量。
运用模糊层次分析法研究实际问题时,常采用迭代法来得到精度更高的排序向量,这就要求选择合适的初始值并通过大量的计算,为此,文中利用三种方法计算了初始排序向量,并给出了算法的Matlab程序,最后通过实例说明。
二、模糊层次分析法为解决AHP种所存在的问题,模糊层次分析法引入模糊一致矩阵,无需再进行一致性检验,同时使用幂法来计算排序向量,可以减少迭代齿数,提高收敛速度,满足计算精度的要求.具体步骤:1.构造优先关系矩阵采用0.1~0.9标度[2],建立优先判断矩阵2.将优先关系矩阵转化为模糊一致矩阵3.计算排序向量(1)和行归一法:(2)方根法:(3)利用排序法:(4)利用幂法[5-6]求精度更高的排序向量:否则,继续迭代。
三、模糊层次分析法的程序实现给出模糊层次分析法的Matlab程序。
clear;clc;E=input('输入计算精度e:')Max=input('输入最大迭代次数Max:')F=input('输入优先关系矩阵F:');%计算模糊一致矩阵N=size(F);r=sum(F');for i=1:N(1)for j=1:N(2)R(i,j)=(r(i)-r(j))/(2*N(1))+0.5;endendE=R./R';% 计算初始向量----------% W=sum(R')./sum(sum(R)); % 和行归一法%---------------------------------------------------------for i=1:N(1)S(i)=R(i,1);for j=2:N(2)S(i)=S(i)*R(i,j);endendS=S^(1/N(1));W = S./sum(S);%方根法%-------------------------------------------------------- % a=input('参数a=?');%W=sum(R')/(N(1)*a)-1/(2*a)+1/N(1); %排序法% 利用幂法计算排序向量----V(:,1)=W'/max(abs(W)); %归一化for i=1:MaxV(:,i+1)=E*V(:,i);V(:,i+1)=V(:,i+1)/max(abs(V(:,i+1)));if max(abs(V(:,i+1)-V(:,i)))k=i;A=V(:,i+1)./sum(V(:,i+1));breakElseEndEnd四、计算实例由优先关系矩阵得到模糊一致矩阵利用三种方法计算排序向量分别为:五、结束语模糊层次分析法广泛应用于许多领域,解决了判断矩阵的一致性与人类思维一致性的差异问题,同时还得到了计算精度较高的且与实际情况较吻合的排序向量,但是模糊一致矩阵的转换和排序向量的求解计算复杂,工作量大,本文运用Matlab程序实现了该方法,能够方便的解决方法的计算问题。
matlab模糊聚类f统计量最佳阈值
matlab模糊聚类f统计量最佳阈值下载温馨提示:该文档是我店铺精心编制而成,希望大家下载以后,能够帮助大家解决实际的问题。
文档下载后可定制随意修改,请根据实际需要进行相应的调整和使用,谢谢!并且,本店铺为大家提供各种各样类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,如想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by theeditor.I hope that after you download them,they can help yousolve practical problems. The document can be customized andmodified after downloading,please adjust and use it according toactual needs, thank you!In addition, our shop provides you with various types ofpractical materials,such as educational essays, diaryappreciation,sentence excerpts,ancient poems,classic articles,topic composition,work summary,word parsing,copy excerpts,other materials and so on,want to know different data formats andwriting methods,please pay attention!MATLAB模糊聚类中的F统计量与最佳阈值选择策略在数据分析和机器学习领域,模糊聚类是一种强大的工具,它允许数据点在多个类别中具有一定程度的“隶属度”。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3.数据标准化(1) 数据矩阵设论域12345678910,1112U={,,,,,,,,,,}x x x x x x x x x x x x 为被分类的对象,每个对象又由指标123456789Y={,,,,,,,,}y y y y y y y y y 表示其性状即12345678910,1112x ={,,,,,,,,,,}i i i i i i i i i i i i i x x x x x x x x x x x x (i=1,2,…,12)于是得到原是数据矩阵7 5 2 5 0 1 3 4 2 12 17 8 21 9 2 38 4 37 83 29 59 65 37 20 54 13 26 53 13 31 36 21 A= 23 12 18 14 178 69 112 78 104 36 94 31 47 23 25 36 11 12 11 24 6 16 101 32 53 52 86 52 41 38 94 28 6 7 8 8 2 0 3 29 169 51 58 72 49 30 48 37 146 327 91 126 92 89 69 79 29 49 93 27 54 64 24 17 23 11 49 18 7 9 5 1 2 18 3 8 ⎛⎫ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪⎝⎭(2) 数据标准化将模糊矩阵的每一个数据压缩到[0,1]上,采用平移.极差变换进行数据标准化1i n1i n 1i n A(i,k)-{A(i,k)}B(i,k)={A(i,k)}-{A(i,k)}min max min ≤≤≤≤≤≤ (k=1,2,…,m)运用matlab 编程由函数F_jisjbzh.m 【见附录3.4】的标准化矩阵是附录3.4function [X]=F_JISjBzh(cs,X)%模糊聚类分析数据标准化变换%X 原始数据矩阵;cs=0,不变换;cs=1,标准差变换%cs=2,极差变换if(cs==0) return ;end[n,m]=size(X);% 获得矩阵的行列数if(cs==1) % 平移极差变换for(k=1:m) xk=0;for(i=1:n) xk=xk+X(i,k);endxk=xk/n;sk=0;for(i=1:n) sk=sk+(X(i,k)-xk)^2;endsk=sqrt(sk/n);for(i=1:n) X(i,k)=(X(i,k)-xk)/sk;endendelse %平移*极差变换for(k=1:m) xmin=X(1,k);xmax=X(1,k);for(i=1:n)if(xmin>X(i,k)) xmin=X(i,k);endif(xmax<X(i,k)) xmax=X(i,k);endendfor(i=1:n) X(i,k)=(X(i,k)-xmin)/(xmax-xmin);endendend0 0 0 0 0 0 0.0319 0.0286 0 0.0156 0.1395 0.0484 0.1839 0.0865 0.0147 0.4043 0.B=0286 0.2431 0.2375 0.2791 0.4597 0.6897 0.3558 0.2794 0.5745 0.2857 0.1667 0.1437 0.0930 0.2339 0.3563 0.2019 0.3235 0.1277 0.4286 0.0833 0.5344 0.7442 0.8871 0.8391 1.0000 0.5147 1.0000 0.8000 0.3125 0.0500 0.2326 0.2742 0.0690 0.1154 0.1471 0.2553 0.0857 0.0972 0.2938 0.3140 0.4113 0.5402 0.8269 0.7500 0.4362 1.0000 0.6389 0.0656 0.0116 0.0403 0.0345 0.0769 0.0147 0 0 0.1875 0.5062 0.5349 0.4516 0.7701 0.4712 0.4265 0.5106 0.9714 1.0000 1.0000 1.0000 1.0000 1.0000 0.8558 1.0000 0.8404 0.7429 0.3264 0.2687 0.2558 0.4194 0.6782 0.2308 0.2353 0.2447 0.2286 0.3264 0.0344 0.0233 0.0565 0 0.0096 0.0147 0.1915 0 0.0417⎛⎫ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪⎝⎭ 第二步:标定(建立模糊相似矩阵)对标定我们运用了直接欧几里得距离法:ij r 1c d(x ,x )i j =-⨯其中c 为任意选区的参数,它使得0≤ij r ≤1,d(x ,x )i j 表示i x 与j x 的距离,(,)i j d x x =运用matlab 软件编写F_jir.m 函数【见附录3.5】,取cs==8,的模糊相似矩阵附录3.5:(仅附录了一段用到的程序)function [R]=F_jir(cs,X)%cs==8,直接欧几里得距离法%cs==9,直接海明距离法(绝对值减数法)%cs==10,直接切比雪夫距离法elseif(cs<=10)C=0;for(i=1:n)for(j=i+1:n)d=0;%直接欧几里得距离法if(cs==8)for(k=1:m)d=d+(X(i,k)-X(j,k))^2;endd=sqrt(d);%直接海明距离法elseif(cs==9)for(k=1:m)d=d+abs(X(i,k)-X(j,k)); end%直接切比雪夫距离法elsefor(k=1:m)if(d<abs(X(i,k)-X(j,k))) d=abs(X(i,k)-X(j,k)); endendendif(C<d)C=d;endendendC=1/(1+C);for(i=1:n)for(j=1:n)d=0;%直接欧几里得距离法if(cs==8)for(k=1:m)d=d+(X(i,k)-X(j,k))^2;endd=sqrt(d);%直接海明距离法elseif(cs==9)for(k=1:m)d=d+abs(X(i,k)-X(j,k)); end%直接切比雪夫距离法elsefor(k=1:m)if(d<abs(X(i,k)-X(j,k)))d=abs(X(i,k)-X(j,k));endendendR(i,j)=1-C*d;endend1.0000 0.8596 0.6731 0.7995 0.3715 0.8668 0.4930 0.9383 0.4602 0.2745 0.7151 0.9499 0.8596 1.0000 0.7638 0.8150 0.4634 0.8973 0.5608 0.87R =46 0.5490 0.3541 0.7866 0.8972 0.6731 0.7638 1.0000 0.8140 0.6694 0.7736 0.6961 0.6907 0.6812 0.5618 0.8907 0.7016 0.7995 0.8150 0.8140 1.0000 0.5349 0.8534 0.6705 0.8105 0.6204 0.4449 0.8491 0.8063 0.3715 0.4634 0.6694 0.5349 1.0000 0.4863 0.7104 0.3928 0.6905 0.7863 0.5998 0.4001 0.8668 0.8973 0.7736 0.8534 0.4863 1.0000 0.5801 0.8755 0.5494 0.3881 0.7991 0.89720.4930 0.5608 0.6961 0.6705 0.7104 0.5801 1.0000 0.5216 0.8026 0.6199 0.6783 0.5091 0.9383 0.8746 0.6907 0.8105 0.3928 0.8755 0.5216 1.0000 0.4959 0.2979 0.7446 0.9300 0.4602 0.5490 0.6812 0.6204 0.6905 0.5494 0.8026 0.4959 1.0000 0.6214 0.6852 0.4802 0.2745 0.3541 0.5618 0.4449 0.7863 0.3881 0.6199 0.2979 0.6214 1.0000 0.5161 0.3002 0.7151 0.7866 0.8907 0.8491 0.5998 0.7991 0.6783 0.7446 0.6852 0.5161 1.0000 0.7343 0.9499 0.8972 0.7016 0.8063 0.4001 0.8972 0.5091 0.9300 0.4802 0.3002 0.7343 1.0000⎛⎫ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪⎝⎭(3)聚类(求动态聚类图)<1>传递闭包法根据标定所得的模糊矩阵,只是一个模糊相似矩阵R ,不一定具有传递性,即R 不一定是模糊等价矩阵,还需要对其改造成模糊等价矩阵R ’,根据定理,用二次方法求传递闭包t (R ),t (R )就是所求模糊等价矩阵R ’,即:t (R )=R ’,再让λ由大变到小,就可形成动态聚类图。
通过matlab 软件编的函数F_JIDtjl.m 【见附录3.6】,得到动态聚类图或者直接运用matlab 软件编的函数F_Jlfx.m 【见附录3.7】,运行F_Jlfx(2,8,A)得动态聚类图是:附录3.6:function F_JIDtjl(R)%定义函数%模糊聚类分析动态聚类%R 模糊相似矩阵[m,n]=size(R);%获得矩阵的行列数if(m~=n|m==0) return ;endfor(i=1:n) R(i,i)=1;%修正错误for(j=i+1:n)if(R(i,j)<0) R(i,j)=0;elseif(R(i,j)>1) R(i,j)=1;endR(i,j)=round(10000*R(i,j))/10000;%保留四位小数R(j,i)=R(i,j);endendjs0=0;while(1)%求传递闭包R1=Max_Min(R,R);%【见附录3.6.1】js0=js0+1;if(R1==R) break;else R=R1;endendImd(1)=1;k=1;for(i=1:n) for(j=i+1:n) pd=1;%找出所有不相同的元素for(x=1:k)if(R(i,j)==Imd(x)) pd=0;break;end;endif(pd) k=k+1;Imd(k)=R(i,j);endend;endfor(i=1:k-1) for(j=i+1:k)if(Imd(i)<Imd(j))%从大到小排序x=Imd(j);Imd(j)=Imd(i);Imd(i)=x;end;end;endfor(x=1:k) %按Imd(x)分类,分类数为flsz(x),临时用Sz记录元素序号js=0;flsz(x)=0;for(i=1:n) pd=1;for(y=1:js) if(Sz(y)==i) pd=0;break;end;endif(pd)for(j=1:n)if(R(i,j)>=Imd(x)) js=js+1;Sz(js)=j;end;end flsz(x)=flsz(x)+1;endendendfor(i=1:k-1)for(j=i+1:k)if(flsz(j)==flsz(i)) flsz(j)=0;end;end;endfl=0;%排除相同的分类for(i=1:k) if(flsz(i)) fl=fl+1;Imd(fl)=Imd(i);end;endfor(i=1:n) xhsz(i)=i;endfor(x=1:fl)%获得分类情况:对元素分类进行排序js=0;flsz(x)=0;for(i=1:n) pd=1;for(y=1:js) if(Sz(y)==i) pd=0;break;end;endif(pd) if(js==0) y=0;endfor(j=1:n) if(R(i,j)>=Imd(x)) js=js+1;Sz(js)=j;end;endflsz(x)=flsz(x)+1;Sz0(flsz(x))=js-y;endendjs0=0;for(i=1:flsz(x))for(j=1:Sz0(i)) Sz1(j)=Sz(js0+j);endfor(j=1:n) for(y=1:Sz0(i))if(xhsz(j)==Sz1(y))js0=js0+1;Sz(js0)=xhsz(j);end;end;endendfor(i=1:n) xhsz(i)=Sz(i);endendfor(x=1:fl)%获得分类情况:每一子类的元素个数js=0;flsz(x)=0;for(i=1:n) pd=1;for(y=1:js) if(Sz(y)==i) pd=0;break;end;endif(pd) if(js==0) y=0;endfor(j=1:n) if(R(i,j)>=Imd(x)) js=js+1;Sz(js)=j;end;endflsz(x)=flsz(x)+1;Sz0(flsz(x))=js-y;endendjs0=1;for(i=1:flsz(x)) y=1;for(j=1:flsz(x))if(Sz(y)==xhsz(js0))flqksz(x,i)=Sz0(j);js0=js0+Sz0(j);break;endy=y+Sz0(j);endendendF_dtjltx=figure('name','动态聚类图','color','w');axis('off');Kd=30;Gd=40;y=fl*Gd+Gd;lx=80;text(24,y+Gd/2,'λ');for(i=1:n)text(lx-5+i*Kd-0.4*Kd*(xhsz(i)>9),y+Gd/2,int2str(xhsz(i)));line([lx+i*Kd,lx+i*Kd],[y,y-Gd]);linesz(i)=lx+i*Kd;endtext(lx*1.5+i*Kd,y+Gd/2,'分类数');y=y-Gd;for(x=1:fl)text(8,y-Gd/2,num2str(Imd(x)));js0=1;js1=0;if(x==1)for(i=1:flsz(x))js1=flqksz(x,i)-1;if(js1)line([linesz(js0),linesz(js0+js1)],[y,y]);endline([(linesz(js0+js1)+linesz(js0))/2,(linesz(js0+js1)+linesz(js0 ))/2],[y,y-Gd]);linesz(i)=(linesz(js0+js1)+linesz(js0))/2;js0=js0+js1+1;endelse for(i=1:flsz(x))js1=js1+flqksz(x,i);js2=0;pd=0;for(j=1:flsz(x-1))js2=js2+flqksz(x-1,j);if(js2==js1) pd=1;break;endendif(j~==js0)line([linesz(js0),linesz(j)],[y,y]);endline([(linesz(js0)+linesz(j))/2,(linesz(js0)+linesz(j))/2],[y,y-G d]);linesz(i)=(linesz(js0)+linesz(j))/2;js0=j+1;end;endtext(2*lx+n*Kd,y-Gd/3,int2str(flsz(x)));y=y-Gd;end图六:动态聚类图根据动态聚类图,选定不同的 的值,将就可以得到不同的分类。