当前位置:文档之家› EMD算法的matlab程序介绍解析

EMD算法的matlab程序介绍解析

EMD算法的matlab程序介绍解析
EMD算法的matlab程序介绍解析

%此版本为 ALAN 版本的整合注释版

function imf =emd(x

%Empiricial Mode Decomposition (Hilbert-HuangTransform

%imf =emd(x

%Func :findpeaks

x=transpose(x(:;%转置为行矩阵

imf =[];

while ~ismonotonic(x%当 x 不是单调函数,分解终止条件

x1=x;

sd =Inf;%均值

%直到 x1满足 IMF 条件,得 c1

while (sd>0.1 |~isimf(x1%当标准偏差系数 sd 大于 0.1或 x1不是固有模态函数时,分量终止条件

s1=getspline(x1;%上包络线

s2=-getspline(-x1;%下包络线

x2=x1-(s1+s2/2;%此处的 x2为文章中的 h

sd =sum((x1-x2.^2/sum(x1.^2;

x1=x2;

end

imf{end+1}=x1;

x =x-x1;

end

imf{end+1}=x;

%FUNCTIONS

function u =ismonotonic(x

%u=0表示 x 不是单调函数, u=1表示 x 为单调的

u1=length(findpeaks(x*length(findpeaks(-x;

if u1>0, u =0;

else, u =1; end

function u =isimf(x

%u=0表示 x 不是固有模式函数, u=1表示 x 是固有模式函数N =length(x;

u1=sum(x(1:N-1.*x(2:N<0;

u2=length(findpeaks(x+length(findpeaks(-x;

if abs(u1-u2>1, u =0;

else, u =1; end

function s =getspline(x

%三次样条函数拟合成元数据包络线

N =length(x;

p =findpeaks(x;

s =spline([0p N+1],[0x(p0],1:N;

-------------------------------------------------------------------------------

-------------------------------------------------------------------------------- function n =findpeaks(x

%Find peaks. 找到极值 ,n 为极值点所在位置

%n =findpeaks(x

n =find(diff(diff(x>0 <0;

u =find(x(n+1>x(n;

n(u=n(u+1;

------------------------------------------------------------------------------------------ ---------------------------------------------------------------------------------------- function plot_hht00(x,Ts

%双边带调幅信号的 EMD 分解

%Plot the HHT.

%plot_hht(x,Ts

%

%::Syntax

%The array (列 x is the input signal and Ts is the sampling period (取样周期 . %Example on use:[x,Fs]=wavread('Hum.wav';

%plot_hht(x(1:6000,1/Fs;

%Func :emd

%Get HHT.

clear all;

close all;

Ts=0.0005;

t=0:Ts:10;%采样率 2000HZ

%调幅信号

%x=sin(2*pi*t.*sin(40*pi*t;

x=sin(2*pi*t;

s1=getspline(x;%上包络线

s2=-getspline(-x;%上包络线

x1=(s1+s2/2;%此处的 x2为文章中的 h

figure;

plot(t,x;xlabel('Time',ylabel('Amplitude';title('双边带调幅信号 ';hold on;

plot(t,s1,'-r';

plot(t,s2,'-r';

plot(t,x1,'g';

imf =emd(x;

for k =1:length(imf

b(k=sum(imf{k}.*imf{k};

th =angle(hilbert(imf{k};

d{k}=diff(th/Ts/(2*pi;

end

[u,v]=sort(-b;

b =1-b/max(b;

%Set time-frequency plots.

N =length(x;

c =linspace(0,(N-2*Ts,N-1;

%

figure;

for k =v(1:2

plot(c,d{k},'k.','Color',b([kk k],'MarkerSize',3;hold on;

set(gca,'FontSize',8,'XLim',[0c(end],'YLim',[050];%设置 x 、 y 轴句柄xlabel('Time',ylabel('Frequency';title('原信号时频图 ';

end

%Set IMF plots.

M =length(imf;

N =length(x;

c =linspace(0,(N-1*Ts,N;

for k1=0:4:M-1

figure

for k2=1:min(4,M-k1,

subplot(4,1,k2,

plot(c,imf{k1+k2};

set(gca,'FontSize',8,'XLim',[0c(end]; title('EMD分解结果 ';

end

xlabel('Time';

end

聚类分析Matlab程序实现

2. Matlab程序 2.1 一次聚类法 X=[11978 12.5 93.5 31908;…;57500 67.6 238.0 15900]; T=clusterdata(X,0.9) 2.2 分步聚类 Step1 寻找变量之间的相似性 用pdist函数计算相似矩阵,有多种方法可以计算距离,进行计算之前最好先将数据用zscore 函数进行标准化。 X2=zscore(X); %标准化数据 Y2=pdist(X2); %计算距离 Step2 定义变量之间的连接 Z2=linkage(Y2); Step3 评价聚类信息 C2=cophenet(Z2,Y2); //0.94698 Step4 创建聚类,并作出谱系图 T=cluster(Z2,6); H=dendrogram(Z2); Matlab提供了两种方法进行聚类分析。 一种是利用 clusterdata函数对样本数据进行一次聚类,其缺点为可供用户选择的面较窄,不能更改距离的计算方法; 另一种是分步聚类:(1)找到数据集合中变量两两之间的相似性和非相似性,用pdist函数计算变量之间的距离;(2)用 linkage函数定义变量之间的连接;(3)用 cophenetic函数评价聚类信息;(4)用cluster函数创建聚类。 1.Matlab中相关函数介绍 1.1 pdist函数 调用格式:Y=pdist(X,’metric’) 说明:用‘metric’指定的方法计算 X 数据矩阵中对象之间的距离。’ X:一个m×n的矩阵,它是由m个对象组成的数据集,每个对象的大小为n。 metric’取值如下: ‘euclidean’:欧氏距离(默认);‘seuclidean’:标准化欧氏距离; ‘mahalanobis’:马氏距离;‘cityblock’:布洛克距离; ‘minkowski’:明可夫斯基距离;‘cosine’: ‘correlation’:‘hamming’: ‘jaccard’:‘chebychev’:Chebychev距离。 1.2 squareform函数 调用格式:Z=squareform(Y,..) 说明:强制将距离矩阵从上三角形式转化为方阵形式,或从方阵形式转化为上三角形式。 1.3 linkage函数 调用格式:Z=linkage(Y,’method’) 说明:用‘method’参数指定的算法计算系统聚类树。 Y:pdist函数返回的距离向量;

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 聚类算法的通用聚类准则。从此这类模糊聚类蓬勃发展起来,目前已经形成庞大的体系。 第 2 章聚类分析方法 2-1 聚类分析 聚类分析就是根据对象的相似性将其分群,聚类是一种无监督学习方法,它不需要先验的分类知识就能发现数据下的隐藏结构。它的目标是要对一个给定的数据集进行划分,这种划分应满足以下两个特性:①类内相似性:属于同一类的数据应尽可能相似。②类间相异性:属于不同类的数据应尽可能相异。图2.1是一个简单聚类分析的例子。

matlab实现Kmeans聚类算法

题目:matlab实现Kmeans聚类算法 姓名吴隆煌 学号41158007

背景知识 1.简介: Kmeans算法是一种经典的聚类算法,在模式识别中得到了广泛的应用,基于Kmeans的变种算法也有很多,模糊Kmeans、分层Kmeans 等。 Kmeans和应用于混合高斯模型的受限EM算法是一致的。高斯混合模型广泛用于数据挖掘、模式识别、机器学习、统计分析。Kmeans 的迭代步骤可以看成E步和M步,E:固定参数类别中心向量重新标记样本,M:固定标记样本调整类别中心向量。K均值只考虑(估计)了均值,而没有估计类别的方差,所以聚类的结构比较适合于特征协方差相等的类别。 Kmeans在某种程度也可以看成Meanshitf的特殊版本,Meanshift 是一种概率密度梯度估计方法(优点:无需求解出具体的概率密度,直接求解概率密度梯度。),所以Meanshift可以用于寻找数据的多个模态(类别),利用的是梯度上升法。在06年的一篇CVPR文章上,证明了Meanshift方法是牛顿拉夫逊算法的变种。Kmeans 和EM算法相似是指混合密度的形式已知(参数形式已知)情况下,利用迭代方法,在参数空间中搜索解。而Kmeans和Meanshift相似是指都是一种概率密度梯度估计的方法,不过是Kmean选用的是特殊的核函数(uniform kernel),而与混合概率密度形式是否已知无关,是一种梯度求解方式。 k-means是一种聚类算法,这种算法是依赖于点的邻域来决定哪些

点应该分在一个组中。当一堆点都靠的比较近,那这堆点应该是分到同一组。使用k-means,可以找到每一组的中心点。 当然,聚类算法并不局限于2维的点,也可以对高维的空间(3维,4维,等等)的点进行聚类,任意高维的空间都可以。 上图中的彩色部分是一些二维空间点。上图中已经把这些点分组了,并使用了不同的颜色对各组进行了标记。这就是聚类算法要做的事情。 这个算法的输入是: 1:点的数据(这里并不一定指的是坐标,其实可以说是向量) 2:K,聚类中心的个数(即要把这一堆数据分成几组) 所以,在处理之前,你先要决定将要把这一堆数据分成几组,即聚成几类。但并不是在所有情况下,你都事先就能知道需要把数据聚成几类的。但这也并不意味着使用k-means就不能处理这种情况,下文中会有讲解。 把相应的输入数据,传入k-means算法后,当k-means算法运行完后,该算法的输出是: 1:标签(每一个点都有一个标签,因为最终任何一个点,总会被分到某个类,类的id号就是标签) 2:每个类的中心点。 标签,是表示某个点是被分到哪个类了。例如,在上图中,实际上

最短距离聚类的matlab实现-1(含聚类图-含距离计算)

最短距离聚类的matlab实现-1 【2013-5-21更新】 说明:正文中命令部分可以直接在Matlab中运行, 作者(Yangfd09)于2013-5-21 19:15:50在MATLAB R2009a(7.8.0.347)中运行通过 %最短距离聚类(含距离计算,含聚类图) %说明:此程序的优点在于每一步都是自己编写的,很少用matlab现成的指令, %所以更适合于初学者,有助于理解各种标准化方法和距离计算方法。 %程序包含了极差标准化(两种方法)、中心化、标准差标准化、总和标准化和极大值标准化等标准化方法, %以及绝对值距离、欧氏距离、明科夫斯基距离和切比雪夫距离等距离计算方法。 %==========================>>导入数据<<============================== %变量名为test(新建一个以test变量,双击进入Variable Editor界面,将数据复制进去即可)%数据要求:m行n列,m为要素个数,n为区域个数(待聚类变量)。 % 具体参见末页测试数据。 testdata=test; %============================>>标准化<<=============================== %变量初始化,m用来寻找每行的最大值,n找最小值,s记录每行数据的和 [M,N]=size(testdata);m=zeros(1,M);n=9999*ones(1,M);s=zeros(1,M);eq=zeros(1,M); %为m、n和s赋值 for i=1:M for j=1:N if testdata(i,j)>=m(i) m(i)=testdata(i,j); end if testdata(i,j)<=n(i) n(i)=testdata(i,j); end s(i)=s(i)+testdata(i,j); end eq(i)=s(i)/N; end %sigma0是离差平方和,sigma是标准差 sigma0=zeros(M); for i=1:M for j=1:N sigma0(i)=sigma0(i)+(testdata(i,j)-eq(i))^2; end end sigma=sqrt(sigma0/N);

数学实验05聚类分析---用matlab做聚类分析

用matlab做聚类分析 Matlab提供了两种方法进行聚类分析。 一种是利用clusterdata函数对样本数据进行一次聚类,其缺点为可供用户选择的面较窄,不能更改距离的计算方法; 另一种是分步聚类:(1)找到数据集合中变量两两之间的相似性和非相似性,用pdist函数计算变量之间的距离;(2)用linkage函数定义变量之间的连接;(3)用cophenetic函数评价聚类信息;(4)用cluster函数创建聚类。1.Matlab中相关函数介绍 1.1pdist函数 调用格式:Y=pdist(X,’metric’) 说明:用‘metric’指定的方法计算X数据矩阵中对象之间的距离。’X:一个m×n的矩阵,它是由m个对象组成的数据集,每个对象的大小为n。 metric’取值如下: ‘euclidean’:欧氏距离(默认);‘seuclidean’:标准化欧氏距离; ‘mahalanobis’:马氏距离;‘cityblock’:布洛克距离; ‘minkowski’:明可夫斯基距离;‘cosine’: ‘correlation’:‘hamming’: ‘jaccard’:‘chebychev’:Chebychev距离。 1.2squareform函数 调用格式:Z=squareform(Y,..)

说明:强制将距离矩阵从上三角形式转化为方阵形式,或从方阵形式转化为上三角形式。 1.3linkage函数 调用格式:Z=linkage(Y,’method’) 说明:用‘method’参数指定的算法计算系统聚类树。 Y:pdist函数返回的距离向量; method:可取值如下: ‘single’:最短距离法(默认);‘complete’:最长距离法; ‘average’:未加权平均距离法;‘weighted’:加权平均法; ‘centroid’:质心距离法;‘median’:加权质心距离法; ‘ward’:内平方距离法(最小方差算法) 返回:Z为一个包含聚类树信息的(m-1)×3的矩阵。 1.4dendrogram函数 调用格式:[H,T,…]=dendrogram(Z,p,…) 说明:生成只有顶部p个节点的冰柱图(谱系图)。 1.5cophenet函数 调用格式:c=cophenetic(Z,Y) 说明:利用pdist函数生成的Y和linkage函数生成的Z计算cophenet相关系数。 1.6cluster函数 调用格式:T=cluster(Z,…) 说明:根据linkage函数的输出Z创建分类。

matlab实现Kmeans聚类算法

matlab实现Kmeans聚类算法 1.简介: Kmeans和应用于混合高斯模型的受限EM算法是一致的。高斯混合模型广泛用于数据挖掘、模式识别、机器学习、统计分析。Kmeans 的迭代步骤可以看成E步和M步,E:固定参数类别中心向量重新标记样本,M:固定均值只考虑(估计)了均值,而没有估计类别的方差,所以聚类的结构比较适合于特征协方差相等的类别。 Kmeans在某种程度也可以看成Meanshitf的特殊版本,Meanshift 是所以Meanshift可以用于寻找数据的多个模态(类别),利用的是梯度上升法。在06年的一篇CVPR文章上,证明了Meanshift方法是牛顿拉夫逊算法的变种。Kmeans和EM算法相似是指混合密度的形式已知(参数形式已知)情况下,利用迭代方法,在参数空间中搜索解。而Kmeans和Meanshift相似是指都是一种概率密度梯度估计的方法,不过是Kmean选用的是特殊的核函数(uniform kernel),而与混合概率密度形式是否已知无关,是一种梯度求解方式。 k-means是一种聚类算法,这种算法是依赖于点的邻域来决定哪些点应该分在点,也可以对高维的空间(3维,4维,等等)的点进行聚类,任意高维的空间都可以。 上图中的彩色部分是一些二维空间点。上图中已经把这些点分组了,并使用了不同的颜色对各组进行了标记。这就是聚类算法要做的事情。 这个算法的输入是: 1:点的数据(这里并不一定指的是坐标,其实可以说是向量)

2:K,聚类中心的个数(即要把这一堆数据分成几组) 所以,在处理之前,你先要决定将要把这一堆数据分成几组,即聚成几类。但并不是在所有情况下,你都事先就能知道需要把数据聚成几类的。意味着使用k-means就不能处理这种情况,下文中会有讲解。 把相应的输入数据,传入k-means算法后,当k-means算法运行完后,该算法的输出是: 1:标签(每一个点都有一个标签,因为最终任何一个点,总会被分到某个类,类的id号就是标签) 2:每个类的中心点。 标签,是表示某个点是被分到哪个类了。例如,在上图中,实际上有4中“标签”,每个“标签”使用不同的颜色来表示。所有黄色点我们可以用标签以看出,有3个类离的比较远,有两个类离得比较近,几乎要混合在一起了。 当然,数据集不一定是坐标,假如你要对彩色图像进行聚类,那么你的向量就可以是(b,g,r),如果使用的是hsv颜色空间,那还可以使用(h,s,v),当然肯定可以有不同的组合例如(b*b,g*r,r*b) ,(h*b,s*g,v*v)等等。 在本文中,初始的类的中心点是随机产生的。如上图的红色点所示,是本文随机产生的初始点。注意观察那两个离得比较近的类,它们几乎要混合在一起,看看算法是如何将它们分开的。 类的初始中心点是随机产生的。算法会不断迭代来矫正这些中心点,并最终得到比较靠5个中心点的距离,选出一个距离最小的(例如该点与第2个中心点的距离是5个距离中最小的),那么该点就归属于该类.上图是点的归类结果示意图. 经过步骤3后,每一个中心center(i)点都有它的”管辖范围”,由于这个中心点不一定是这个管辖范围的真正中心点,所以要重新计算中心点,计算的方法有很多种,最简单的一种是,直接计算该管辖范围内所有点的均值,做为心的中心点new_center(i). 如果重新计算的中心点new_center(i)与原来的中心点center(i)的距离大于一定的阈值(该阈值可以设定),那么认为算法尚未收敛,使用new_center(i)代替center(i)(如图,中心点从红色点

聚类分析matlab程序设计代码

function varargout = lljuleifenxi(varargin) % LLJULEIFENXI MATLAB code for lljuleifenxi.fig % LLJULEIFENXI, by itself, creates a new LLJULEIFENXI or raises the existing % singleton*. % % H = LLJULEIFENXI returns the handle to a new LLJULEIFENXI or the handle to % the existing singleton*. % % LLJULEIFENXI('CALLBACK',hObject,eventData,handles,...) calls the local % function named CALLBACK in LLJULEIFENXI.M with the given input arguments. % % LLJULEIFENXI('Property','Value',...) creates a new LLJULEIFENXI or raises the % existing singleton*. Starting from the left, property value pairs are % applied to the GUI before lljuleifenxi_OpeningFcn gets called. An % unrecognized property name or invalid value makes property application % stop. All inputs are passed to lljuleifenxi_OpeningFcn via varargin. % % *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one % instance to run (singleton)". % % See also: GUIDE, GUIDATA, GUIHANDLES % Edit the above text to modify the response to help lljuleifenxi % Last Modified by GUIDE v2.5 07-Jan-2015 18:18:25 % Begin initialization code - DO NOT EDIT gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @lljuleifenxi_OpeningFcn, ... 'gui_OutputFcn', @lljuleifenxi_OutputFcn, ... 'gui_LayoutFcn', [] , ... 'gui_Callback', []); if nargin && ischar(varargin{1}) gui_State.gui_Callback = str2func(varargin{1}); end if nargout [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else gui_mainfcn(gui_State, varargin{:}); end % End initialization code - DO NOT EDIT % --- Executes just before lljuleifenxi is made visible. function lljuleifenxi_OpeningFcn(hObject, eventdata, handles, varargin) % This function has no output args, see OutputFcn. % hObject handle to figure % eventdata reserved - to be defined in a future version of MATLAB

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聚类算法的通用聚类准则。从此这类模糊聚类蓬勃发展起来,目前已经形成庞大的体系。 第2章聚类分析方法 2-1聚类分析 聚类分析就是根据对象的相似性将其分群,聚类是一种无监督学习方法,它不需要先验的分类知识就能发现数据下的隐藏结构。它的目标是要对一个给定的数据集进行划分,这种划分应满足以下两个特性:①类内相似性:属于同一类的数据应尽可能相似。②类间相异性:属于不同类的数据应尽可能相异。图2.1是一个简单聚类分析的例子。

FCMClust(模糊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; % 隶属度最小变化量,迭代终止条件

聚类算法matlab程序

clear all close all disp('The only input needed is a distance matrix file') disp('The format of this file should be: ') disp('Column 1: id of element i') disp('Column 2: id of element j') disp('Column 3: dist(i,j)') mdist=input('example_distances');%name of the distance matrix file (with single quotes)?\n disp('Reading input distance matrix') xx=load(mdist); ND=max(xx(:,2)); NL=max(xx(:,1)); if (NL>ND) ND=NL; end N=size(xx,1); for i=1:ND for j=1:ND dist(i,j)=0; end end for i=1:N ii=xx(i,1); jj=xx(i,2); dist(ii,jj)=xx(i,3); dist(jj,ii)=xx(i,3); end percent=2.0; fprintf('average percentage of neighbours (hard coded): %5.6f\n', percent); position=round(N*percent/100); sda=sort(xx(:,3)); dc=sda(position); fprintf('Computing Rho with gaussian kernel of radius: %12.6f\n', dc); for i=1:ND rho(i)=0.; end % % Gaussian kernel % for i=1:ND-1 for j=i+1:ND rho(i)=rho(i)+exp(-(dist(i,j)/dc)*(dist(i,j)/dc)); rho(j)=rho(j)+exp(-(dist(i,j)/dc)*(dist(i,j)/dc)); end end %

模糊数学在聚类分析中的作用(matlab代码)

function [M,N] = Example8_11 X=[1.8 2.1 3.2 2.2 2.5 2.8 1.9 2.0; 95 99 101 103 98 102 120 130; 0.15 0.21 0.18 0.17 0.16 0.20 0.09 0.11]; X=X' %X=[80 10 6 2;50 1 6 4;90 6 4 6;40 5 7 3;10 1 2 4] [M,N]=fuzzy_jlfx(4,5,X); end %% function [M,N]=fuzzy_jlfx(bzh,fa,X)%得到聚类结果 [X]=F_JlSjBzh(bzh,X);%数据标准化 [R]=F_JlR(fa,X);%建立相似矩阵 [A]=fuzzy_cdbb(R);%得到传递闭包矩阵 [Alamd]=fuzzy_lamdjjz(A);%得到lamdf截矩阵从而得到聚类结果[M,N]=F_JlDtjl(R);%动态聚类并画出聚类图 %% function [M,N]=F_JlDtjl(R) %clc; [A]=fuzzy_cdbb(R); U=unique(A); L=length(U); M=1:L; for i=L-1:-1:1 [m,n]=find(A==U(i)); N{i,1}=n; N{i,2}=m; A(m(1),:)=0; mm=unique(m); N{i,3}=mm; len=length(find(m==mm(1))); depth=length(find(m==mm(2))); index1=find(M==mm(1)); MM=[M(1:index1-1),M(index1+depth:L)]; % index2=find(MM==mm(2)); M=M(index1:index1+depth-1); M=[MM(1:index2-1),M,MM(index2:end)]; end M=[1:L;M;ones(1,L)]; h=(max(U)-min(U))/L; figure text(L,1,sprintf('%d',M(2,L))); text(L+1,1-h,sprintf('%d',L)); text(0,1,sprintf('%3.2f',1)); text(0,(1+min(U))/2,sprintf('%3.2f',(1+min(U))/2)); text(0,min(U),sprintf('%3.2f',min(U))); hold on for i=L-1:-1:1 m=N{i,2};

Matlab笔记——模糊聚类分析原理及实现

23. 模糊聚类分析原理及实现 聚类分析,就是用数学方法研究和处理所给定对象,按照事物间的相似性进行区分和分类的过程。 传统的聚类分析是一种硬划分,它把每个待识别的对象严格地划分到某个类中,具有非此即彼的性质,这种分类的类别界限是分明的。 随着模糊理论的建立,人们开始用模糊的方法来处理聚类问题,称为模糊聚类分析。由于模糊聚类得到了样本数与各个类别的不确定性程度,表达了样本类属的中介性,即建立起了样本对于类别的不确定性的描述,能更客观地反映现实世界。 本篇先介绍传统的两种(适合数据量较小情形,及理解模糊聚类原理):基于择近原则、模糊等价关系的模糊聚类方法。 (一)预备知识 一、模糊等价矩阵 定义1设R=(r ij )n ×n 为模糊矩阵,I 为n 阶单位矩阵,若R 满足 i) 自反性:I ≤R (等价于r ii =1); ii) 对称性:R T =R; 则称R 为模糊相似矩阵,若再满足 iii) 传递性:R 2 ≤R (等价于1 ()n ik kj ij k r r r =∨∧≤) 则称R 为模糊等价矩阵。

定理1设R 为n 阶模糊相似矩阵,则存在一个最小的自然数k (k

模糊聚类分析及matlab程序实现

模糊聚类分析及matlab 程序实现 采用模糊数学语言对按一定的要求进行描述和分类的数学方法称为模糊聚 类分析。聚类分析主要经过标定和聚类两步骤。 【1】 1 标定(建立模糊相似矩阵) 城市居民食品零售价格,第t 时刻第i 种食品的零售价记为),(t i x 。 相似矩阵R 的构建方法:NTV 法 设时间序列),(j i A 表示食品i 在时间t 的价格,其中i=1,2…42;t=1,2…39。 ∑∑ ==--=m k jk ik m k jk ik x x x x j i R 11 ),max( 1),((其中i,j,k=1,2…42,m=39) 42*42),(j i R R = 2 聚类 2.1 计算R 的传递闭包: 对模糊相似矩阵R,依次用平方法计算,2 R ,4R ,…,t 2R ,…,当第一次出现k k k R R R =*时,则称k R 为传递闭包。【1】 2.2 开始聚类: 【2】 (1)令T={1,2,3…42},取)1(xi T ∈ ,令X 、Q 为空集; (2)令0=j ; (3)若λ>=),(j xi R 且X x j ?,则令}{j X X ?=,}{j Q Q ?=; (4)1+=j j ; (5)若n j <,返回(1); (6)若Q 为空集,怎输出聚类x,X -T T =; (7))1(xi Q =,}{xi Q Q -=,返回(2)。 设置不同的置信水平λ值,就可以得到不同的分类。 Matlab 程序实现: A=data; [N M] = size(A); for i = 1:N for j = 1:N R(i,j)=abs(1-sum(abs(A(i,:)-A(j,:)))/sum(max([A(i,:);A(j,:)])));

matlab实现Kmeans聚类算法 (2)

kmeans函数:输入为类别数量k和数据矩阵A;输出为聚类结果A,和迭代次数,并将聚类结果数据以excel形式保存在工作路径下 function km(k,A)%函数名里不要出现“-” warning off [n,p]=size(A);%输入数据有n个样本,p个属性 cid=ones(k,p+1);%聚类中心组成k行p列的矩阵,k表示第几类,p是属性 %A(:,p+1)=100; A(:,p+1)=0; for i=1:k %cid(i,:)=A(i,:); %直接取前三个元祖作为聚类中心 m=i*floor(n/k)-floor(rand(1,1)*(n/k)) cid(i,:)=A(m,:); cid; end Asum=0; Csum2=NaN; flags=1; times=1; while flags flags=0; times=times+1; %计算每个向量到聚类中心的欧氏距离 for i=1:n for j=1:k dist(i,j)=sqrt(sum((A(i,:)-cid(j,:)).^2));%欧氏距离 end %A(i,p+1)=min(dist(i,:));%与中心的最小距离 [x,y]=find(dist(i,:)==min(dist(i,:))); [c,d]=size(find(y==A(i,p+1))); if c==0 %说明聚类中心变了 flags=flags+1; A(i,p+1)=y(1,1); else continue; end end i flags for j=1:k Asum=0; [r,c]=find(A(:,p+1)==j); cid(j,:)=mean(A(r,:),1);

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的矩阵,其中前两列为索引标识,表示哪两个序号的样本可以聚为同一类,第三列为这两个样本之间的距离。另外,除了M个样本以外,对于每次新产生的类,依次用M+1、M+2、…来标识。 为了表示Z矩阵,我们可以用更直观的聚类数来展示,方法为:dendrogram(Z), 产生的聚类数是一个n型树,最下边表示样本,然后一级一级往上聚类,最终成为最顶端的一类。纵轴高度代表距离列。 另外,还可以设置聚类数最下端的样本数,默认为30,可以根据修改dendrogram(Z,n)参数n来实现,1

相关主题
文本预览
相关文档 最新文档