模糊聚类matlab程序

合集下载

基于matlab的模糊聚类分析

基于matlab的模糊聚类分析

13
2.1 特征抽取,建立原始数据矩阵
假设待分类对象的集合为 X = { X1, X2, …, Xn },集合中的每
个元素具有 m 个特征,设第 i 个对象 Xi 的第 j ( j = 1, 2,
…, m ) 个特征为 xij,则 Xi 就可以用这 m 个特征的取值来 描述,记 Xi = ( xi1, xi2, …, xim) 于是,得到原始数据矩阵为: x 11


end
fprintf(‘标准化矩阵如下:Y=\n'); disp(Y) end
2.3 标定, 建立模糊相似矩阵

针对上述的标准化矩阵 , 计算各分类对象间的相似程度,
从而建立模糊相似矩阵 R= (rij) n n, 这个过程又称为标定, 计
算标定的方法是很多的, 主要包括三大类方法: (1)相似系数
rij
1 s

s
a ij
k
b ij
k
k 1
• •function R=biaod2(Y,c) •[a,b]=size(Y); •Z=zeros(a); •R=zeros(a); •for i=1:a • for j=1:a • for k=1:b • Z(i,j)=abs(Y(i,k)-Y(j,k))+Z(i,j); • R(i,j)=1-c*Z(i,j);%绝对值减数法--欧氏距离求模糊相 似矩阵 • end • end •end •fprintf(‘模糊相似矩阵如下:R=\n'); •disp(R) •end

matlab模糊函数代码

matlab模糊函数代码

matlab模糊函数代码

在数学和图像处理领域中,模糊函数是一种常用的工具,用于对图像进行模糊

处理以达到一定的效果。Matlab提供了一些内置函数来实现图像的模糊处理,本

文将介绍如何使用Matlab编写模糊函数代码。

Matlab中有多种不同类型的模糊函数,例如高斯模糊、均值模糊和运动模糊等。下面将逐一介绍这些模糊函数代码的实现方式。

1. 高斯模糊:

高斯模糊是最常用的模糊算法之一,它通过卷积图像与一个高斯核来实现。以

下是Matlab中实现高斯模糊的代码示例:

```matlab

function blurredImage = gaussianBlur(image, sigma)

kernelSize = 2 * ceil(3 * sigma) + 1; % 根据sigma计算高斯核大小

kernel = fspecial('gaussian', [kernelSize kernelSize], sigma); % 生成高斯核

blurredImage = imfilter(image, kernel, 'conv'); % 对图像进行卷积操作

end

```

2. 均值模糊:

均值模糊是一种简单但常用的模糊算法,它通过计算邻域像素的平均值来实现。以下是Matlab中实现均值模糊的代码示例:

```matlab

function blurredImage = meanBlur(image, kernelSize)

kernel = ones(kernelSize) / (kernelSize^2); % 生成均值核

聚类算法matlab实现

聚类算法matlab实现

聚类算法matlab实现

英文回答:

Clustering algorithms are widely used in data analysis and machine learning to group similar data points together. MATLAB provides several built-in functions and tools for implementing clustering algorithms. Here, I will discuss two commonly used clustering algorithms in MATLAB: k-means clustering and hierarchical clustering.

1. K-means Clustering:

K-means clustering is a popular algorithm for partitioning a dataset into k distinct clusters. MATLAB provides the function `kmeans` for implementing this algorithm. The basic steps to perform k-means clustering in MATLAB are as follows:

Load or generate the dataset.

Specify the number of clusters, k.

在Matlab中使用模糊C均值聚类进行图像分析的技巧

在Matlab中使用模糊C均值聚类进行图像分析的技巧

在Matlab中使用模糊C均值聚类进行图像分

析的技巧

在图像分析领域,模糊C均值聚类(FCM)是一种常用的工具,它可以帮助

我们发现图像中隐藏的信息和模式。通过使用Matlab中的模糊逻辑工具箱,我们

可以轻松地实现FCM算法,并进行图像分析。本文将介绍在Matlab中使用FCM

进行图像分析的技巧。

首先,让我们简要了解一下FCM算法。FCM是一种基于聚类的图像分割方法,它将图像的像素分为不同的聚类,每个聚类代表一类像素。与传统的C均值聚类

算法不同,FCM允许像素属于多个聚类,因此能够更好地处理图像中的模糊边界。

在Matlab中使用FCM进行图像分析的第一步是加载图像。可以使用imread函

数将图像加载到Matlab的工作区中。例如,我们可以加载一张名为“image.jpg”的

图像:

```matlab

image = imread('image.jpg');

```

加载图像后,可以使用imshow函数显示图像。这可以帮助我们对图像有一个

直观的了解:

```matlab

imshow(image);

```

接下来,我们需要将图像转换为灰度图像。这是因为FCM算法通常用于灰度

图像分析。可以使用rgb2gray函数将彩色图像转换为灰度图像:

```matlab

grayImage = rgb2gray(image);

```

在使用FCM算法之前,我们需要对图像进行预处理。预处理的目的是消除图像中的噪声和不必要的细节,从而更好地提取图像中的特征。常用的图像预处理方法包括平滑、锐化和边缘检测等。

Matlab中提供了许多图像预处理函数。例如,可以使用imnoise函数向图像中添加高斯噪声:

matlab、lingo程序代码14-模糊聚类(聚类分析)

matlab、lingo程序代码14-模糊聚类(聚类分析)

模糊聚类

function c=fuz_hc(a,b)

%模糊矩阵的合成运算程序

%输入模糊矩阵a,b,输出合成运算结果c

m=size(a,1);n=size(b,2);p=size(a,2);

%错误排除

if size(a,2)~=size(b,1)

disp('输入数据错误!');return;

end

%合成运算

for i=1:m

for j=1:n

for k=1:p

temp(k)=min(a(i,k),b(k,j));

end

c(i,j)=max(temp);

end

end

disp('模糊矩阵a与b作合成运算后结果矩阵c为:'); c

% 求模糊等价矩阵

function r_d=mhdj(r)

[m,n]=size(r);

for i=1:n

for j=1:n

for k=1:n

r1(i,j,k)=min(r(i,k),r(k,j));

end

r1max(i,j)=r1(i,j,1);

end

end

for i=1:n

for j=1:n

for k=1:n

if r1(i,j,k)>r1max(i,j)

r1max(i,j)=r1(i,j,k);

end

end

r_d(i,j)=r1max(i,j);

end

end

%模糊聚类程序

function f=mujl(x,lamda)

%输入原始数据以及lamda的值

if lamda>1

disp('error!') %错误处理

end

[n,m]=size(x);

y=pdist(x);

disp('欧式距离矩阵:');

dist=squareform(y) %欧氏距离矩阵

dmax=dist(1,1);

matlab模糊聚类程序

matlab模糊聚类程序

3.数据标准化

(1) 数据矩阵

设论域12345678910,1112U={,,,,,,,,,,}x x x x x x x x x x x x 为被分类的对象,每个

对象又由指标1234567Y ={,,,,,,,,}y y y y y y y y y 表示其性状即1234567891x ={,,,,,,,,,,}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 n

1i n 1i n A(i,k)-{A(i,k)}B(i,k)={A(i,k)}-{A(i,k)}

matlab模糊c均值聚类算法

matlab模糊c均值聚类算法

matlab模糊c均值聚类算法

模糊C均值聚类算法是一种广泛应用于数据挖掘、图像分割等领域的聚类算法。相比

于传统的C均值聚类算法,模糊C均值聚类算法能够更好地处理噪声数据和模糊边界。

模糊C均值聚类算法的基本思想是将样本集合分为K个聚类集合,使得每个样本点属

于某个聚类集合的概率最大。同时,每个聚类集合的中心点被计算为该聚类集合中所有样

本的均值。

具体实现中,模糊C均值聚类算法引入了模糊化权重向量来描述每个样本点属于各个

聚类集合的程度。这些权重值在每次迭代中被更新,直至达到预设的收敛精度为止。模糊

C均值聚类算法的目标函数可以表示为:

J = ∑i∑j(wij)q||xi-cj||2

其中,xi表示样本集合中的第i个样本,cj表示第j个聚类集合的中心点,wij表示第i个样本点属于第j个聚类集合的权重,q是模糊指数,通常取2。

不同于C均值聚类算法,模糊C均值聚类算法对每个样本点都考虑了其属于某个聚类

集合的概率,因此能够更好地处理模糊边界和噪声数据。同时,模糊C均值聚类算法可以

自适应地确定聚类的数量,从而避免了事先设定聚类数量所带来的限制。

在MATLAB中,可以使用fcm函数实现模糊C均值聚类算法。具体来说,fcm函数的使用方法如下:

[idx,center] = fcm(data,k,[options]);

其中,data表示样本矩阵,k表示聚类数量,options是一个包含算法参数的结构体。fcm函数的输出包括聚类标签idx和聚类中心center。

MATLAB中的fcm函数还提供了其他参数和选项,例如模糊权重阈值、最大迭代次数和收敛精度等。可以根据具体应用需求来设置这些参数和选项。

使用Matlab进行模糊聚类分析

使用Matlab进行模糊聚类分析

使用Matlab进行模糊聚类分析概述

模糊聚类是一种非常有用的数据分析方法,它可以帮助我们在数据集中找到隐

藏的模式和结构。在本文中,我们将介绍如何使用Matlab进行模糊聚类分析,以

及该方法的一些应用和局限性。

引言

聚类分析是一种数据挖掘技术,其目的是将数据集中相似的数据点划分为不同

的群组或簇。而模糊聚类则是一种非常强大的聚类方法,它允许数据点属于不同的群组,以及具有不同的隶属度。因此,模糊聚类可以更好地处理一些模糊性或不确定性的情况。

Matlab中的模糊聚类分析工具

Matlab是一种功能强大的数值计算和数据分析软件,它提供了一些内置的模糊

聚类分析工具,可以帮助我们进行模糊聚类分析。其中最常用的是fcm函数

(fuzzy c-means clustering)。

fcm函数是基于fuzzy c-means算法的,它使用隶属度矩阵来度量数据点与不同

类之间的相似性。该函数需要指定聚类的数量和迭代次数,然后根据数据点与聚类中心之间的距离来计算隶属度矩阵,并不断迭代更新聚类中心和隶属度矩阵,直到收敛为止。

例如,假设我们有一个包含N个数据点的数据集X,每个数据点包含M个特征。我们可以使用fcm函数对该数据集进行模糊聚类分析,首先将数据集归一化,并指定聚类的数量(如3个聚类),迭代次数(如100次),并设置模糊指数(如2)。然后,我们可以使用聚类中心来获得每个数据点的隶属度,并根据隶属度矩

阵来进行进一步的数据分析或可视化。

应用实例

模糊聚类分析在实际中有很多应用,下面我们将介绍其中两个常见的应用实例。

1. 图像分割

如何在Matlab中进行模糊聚类分析

如何在Matlab中进行模糊聚类分析

如何在Matlab中进行模糊聚类分析

在数据分析领域,模糊聚类分析是一种常用的技术,它可以应用于各种领域的

数据处理和模式识别问题。而Matlab作为一种功能强大的数据分析工具,也提供

了丰富的函数和工具箱,以支持模糊聚类分析的实施。

1. 引言

模糊聚类分析是一种基于模糊集理论的聚类方法,与传统的硬聚类方法不同,它允许样本属于多个聚类中心。这种方法的优势在于可以更好地应对数据中的不确定性和复杂性,对于某些模糊或模糊边界问题具有更好的解释能力。

2. 模糊聚类算法概述

Matlab提供了多种模糊聚类算法的实现,其中最常用的是基于模糊C均值(Fuzzy C-Means,FCM)算法。FCM算法的基本思想是通过最小化聚类后的模糊

划分矩阵与原始数据之间的距离来确定每个样本所属的聚类中心。

3. 数据预处理与特征提取

在进行模糊聚类分析之前,需要对原始数据进行预处理和特征提取。预处理

包括数据清洗、缺失值处理和异常值处理等;特征提取则是从原始数据中抽取出具有代表性和区分性的特征,用于模糊聚类分析。

4. 模糊聚类分析步骤

在Matlab中,进行模糊聚类分析通常包括以下步骤:

(1) 初始化聚类中心:通过随机选择或基于某种准则的方法初始化聚类中心。

(2) 计算模糊划分矩阵:根据当前的聚类中心,计算每个样本属于各个聚类中心的隶属度。

(3) 更新聚类中心:根据当前的模糊划分矩阵,更新聚类中心的位置。

(4) 判断终止条件:通过设置一定的终止条件,判断是否达到停止迭代的条件。

(5) 输出最终结果:得到最终的聚类结果和每个样本所属的隶属度。

模糊数学MATLAB应用

模糊数学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-1

6.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)

模糊c均值聚类FCM算法的MATLAB代码

模糊c均值聚类FCM算法的MATLAB代码

模糊c均值聚类FCM算法的MATLAB代码我做毕业论文时需要模糊C-均值聚类,找了好长时间才找到这个,分享给大家:

FCM算法的两种迭代形式的MATLAB代码写于下,也许有的同学会用得着:m文件1/7:

function[U,P,Dit,Cluter_Re,Obj_Fcn,iter]=fuzzycm(Data,C,plot flag,M,epm)%模糊C均值聚类FCM:从随机初始化划分矩阵开始迭代%[U,P,Dit,Cluter_Re,Obj_Fcn,iter]=fuzzycm(Data,C,plotflag,M, epm)%输入:

%Data:N某S型矩阵,聚类的原始数据,即一组有限的观测样本集,%Data的每一行为一个观测样本的特征矢量,S为特征矢量%的维数,N为样本点的个数%C:聚类数,1

%plotflag:聚类结果2D/3D绘图标记,0表示不绘图,为缺省值%M:加权指数,缺省值为2

%epm:FCM算法的迭代停止阈值,缺省值为1.0e-6%输出:

%U:C某N型矩阵,FCM的划分矩阵

%P:C某S型矩阵,FCM的聚类中心,每一行对应一个聚类原型%Dit:C 某N型矩阵,FCM各聚类中心到各样本点的距离,聚类中%心i到样本点j

的距离为Dit(i,j)

%Cluter_Re:聚类结果,共C行,每一行对应一类%Obj_Fcn:目标函数

值%iter:FCM算法迭代次数%Seealo:fuzzyditma某

rowffcmplotifnargin<5

epm=1.0e-6;end

ifnargin<4M=2;end

模糊聚类函数的matlab代码

模糊聚类函数的matlab代码

模糊聚类函数的matlab代码

=================================================================== =======

function R = coesim1(datin,m)

% 聚类分析相关系数计算公式1——数量积

% R = coesim1(datin,C)

% m 是乘积和最大值的一个参数,取决于输入数据datin

error(nargchk(2,2, nargin))

[N M] = size(datin);

R=zeros(N,N);

for i = 1:N

for j = 1:N

for k=1:M

R(i,j) = R(i,j) + (datin(i,k)*datin(j,k))/m;

end

end

R(i,i)=1;

end

=================================================================== =======

function R = coesim2(datin)

% 聚类分析相关系数计算公式2——夹角余弦

% R = coesim2(datin)

error(nargchk(1,1, nargin))

[N M] = size(datin);

R=zeros(N,N);

t=zeros(1,3);

for i = 1:N

for j = 1:N

for k=1:M

t(1)=t(1)+datin(i,k)*datin(j,k);

t(2)=t(2)+datin(i,k)^2;

t(3)=t(3)+datin(j,k)^2;

模糊神经和模糊聚类的MATLAB实现

模糊神经和模糊聚类的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函数可以

在Matlab中进行聚类分析的基本步骤

在Matlab中进行聚类分析的基本步骤

在Matlab中进行聚类分析的基本步骤

聚类分析是一种常用的数据分析方法,它可以将相似的数据点划分成不同的组

别或簇。Matlab作为一种常用的科学计算软件,在聚类分析方面提供了丰富而强

大的工具。本文将介绍在Matlab中进行聚类分析的基本步骤。

一、数据准备

在进行聚类分析之前,首先需要准备好待分析的数据。数据可以是一组观测值

的集合,每个观测值可以包含多个特征或属性。在Matlab中,通常将数据存储在

一个矩阵中,其中每一行表示一个观测值,每一列表示一个特征。

二、数据标准化

在进行聚类分析之前,需要对数据进行标准化。标准化可以保证不同特征的量

纲一致,避免某些特征对聚类结果的影响过大。常用的标准化方法包括Z-score标

准化和min-max标准化。

在Matlab中,可以使用内置的函数实现标准化操作。例如,使用zscore函数

可以对数据进行Z-score标准化,使用mapminmax函数可以进行min-max标准化。

三、选择合适的聚类算法

选择合适的聚类算法是进行聚类分析的关键步骤。常用的聚类算法包括K-means聚类、层次聚类和密度聚类等。

在Matlab中,提供了丰富的聚类算法实现。例如,可以使用kmeans函数进行

K-means聚类,使用linkage函数进行层次聚类,使用DBSCAN函数进行密度聚类。

四、确定聚类数目

在进行聚类分析时,需要确定聚类的数目。聚类数目的选择是一个具有挑战性

的问题,需要根据具体的应用情况和领域知识来判断。

Matlab中提供了一些方法来确定聚类数目,例如肘部法则和轮廓系数。肘部法

在Matlab中实现模糊聚类和模糊决策的方法

在Matlab中实现模糊聚类和模糊决策的方法

在Matlab中实现模糊聚类和模糊决策的方法引言:

模糊聚类和模糊决策作为模糊理论的重要应用分支,已经在各个领域得到了广

泛的研究与应用。在实际问题中,常常会面临到数据具有模糊性、不确定性等挑战。而模糊聚类和模糊决策方法能够有效地处理这些问题,为解决实际问题提供了有力的工具。本文将介绍在Matlab中实现模糊聚类和模糊决策的方法,详细介绍模糊

聚类和模糊决策的基本原理和常用方法,并以实例进行说明。

一、模糊聚类方法的基本原理

模糊聚类方法是在传统的聚类算法的基础上引入了模糊理论的思想,将每个样

本与各个聚类中心之间的关系表示为隶属度,从而实现对模糊数据的聚类。在Matlab中,常用的模糊聚类方法有模糊C均值聚类(FCM)和模糊谱聚类(FSC)等。

(1)模糊C均值聚类(FCM):

模糊C均值聚类是模糊聚类方法中最常用的一种方法。其基本原理是通过迭代的方式,更新样本的隶属度和聚类中心,直至收敛。在Matlab中,可以使用fcm

函数来实现模糊C均值聚类。下面是一个示例代码:

```matlab

data = load('data.mat'); % 导入数据

[U, centroids] = fcm(data, k); % 调用fcm函数进行聚类,k是聚类的类别数

```

(2)模糊谱聚类(FSC):

模糊谱聚类是一种基于图论的聚类方法,它通过建立样本的相似度矩阵,然后通过对相似度矩阵进行模糊化处理,进而得到聚类结果。在Matlab中,可以使用fuzzy_spectral_clustering函数来实现模糊谱聚类。下面是一个示例代码:```matlab

matlab模糊c均值聚类算法

matlab模糊c均值聚类算法

matlab模糊c均值聚类算法

Matlab是广泛应用的数学计算软件,其中模糊c均值聚类算法是一种常用的无监督聚类算法。本文将围绕此算法,介绍其原理、实现

步骤以及应用场景。

1.算法原理

模糊c均值聚类算法是继普通k均值聚类算法之后的一种改进算法。通常情况下,k均值聚类算法的核心是将数据集分成k个不同的类簇,使得每个数据点与其所属的类簇中心点距离最小。

而对于模糊c均值聚类算法,每个数据点并不是强制归属于某一

个特定的类簇,而是存在一个隶属度矩阵,代表该数据点属于各个类

簇的概率。同时,每个类簇中心也不是单一的一个坐标点,而是一个

多维向量。

算法的基本步骤为:先随机初始化隶属度矩阵和各个类簇中心,

然后按照一定的迭代公式不断更新隶属度矩阵和类簇中心,直到达到

一定的收敛准则(如最大迭代次数、误差值小于某一阈值等)。

2.算法实现

在Matlab中实现模糊c均值聚类算法,需要先安装fuzzy工具包。以下是实现的三个主要步骤:

①初始化隶属度矩阵和类簇中心。可以使用rand()函数生成一定范围内均匀分布的随机数,将其归一化为各维总和为1的隶属度矩阵。类簇中心可以在数据集范围内随机选择。

②迭代更新隶属度矩阵和类簇中心。根据迭代公式,先计算各数

据点与各类簇中心的距离(可以使用欧几里得距离),得到距离矩阵。然后根据距离矩阵和一个模糊参数,更新隶属度矩阵。根据隶属度矩

阵和原始数据,权重加权计算每个类簇的中心坐标,得到新的类簇中心。

③判断是否达到收敛准则,如果满足收敛准则则停止迭代,否则

回到第②步。常见的收敛准则包括最大迭代次数、前后两次迭代误差

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

function julei(data)

%%%%%%%%%%%%%%%模糊聚类%%%%%%%%%%%%%%%%%%%%%%% DATAFORCLUS=data; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%基于模糊等价关系的模糊

聚类%%%%%%%%%%%%%%%%%%%%%%

%----------构造相似关系-----------%

numrows=size(DATAFORCLUS,1);

numcols=size(DATAFORCLUS,2);

disp('请选择对象之间相似性统计量的方式: ');

disp('<1-相关系数法|2-夹角余弦法>');

wayforr_ij=input('请输入: ');

switch wayforr_ij

case 1, %-----------------------------------相关系数法

for i=1:numrows,

for j=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

case 2, %-----------------------------------夹角余弦法

for i=1:numrows,

for j=1:numrows,

simiR(i,j)=sum(DATAFORCLUS(i,:).*DATAFORCLUS(j,:))/...

(sqrt(sum(DATAFORCLUS(i,:).*DATAFORCLUS(i,:)))*sqrt(sum(DATAFORCLUS(j,: ).*DATAFORCLUS(j,:))));

end

end

end

%-------改造成等价关系----------%

sign=0;

numselfmul=1;

simiRk=eye(numrows);

equi_tem=simiR;

while sign==0,

for i=1:numrows,

for j=1:numrows,

for c=1:numrows,

rij_temp(c)=min([equi_tem(i,c) equi_tem(c,j)]);

end

simiRk(i,j)=max(rij_temp);

end

end

%--------------%

if sum(sum(simiRk-equi_tem,1))~=0,

numselfmul=numselfmul+1;

equi_tem=simiRk;

else

sign=1;

break

end

%--------------%

end

if sign==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判断矩阵

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%捡菜算法

for i=1:numrows,

if sum(comp_vec(1,:)==result_arr(i,:))

temnumeachclass=0;

%numeachclass(clasc)=index-temnumeachclass;

temsave=result_arr(i,:);

for j=1:numrows,

if sum(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

if clasc>=numclass,

tip=1; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%当模糊分类的数目小于等于所给出的类数时退出循环体

disp('成功');

else

clear class;

clear numeachclass;

clear nec;

clasc=0;

index=0;

temnumeachclass=0;

alpha=alpha+0.01;

end

end

%----取聚类结果----%

num=0;

n=0;

for i=1:clasc,

for j=1:nec(i),

num=num+1;

n=n+1;

CLUS(n,:)=DATAFORCLUS(class(num),:);

end

n=n+1;

CLUS(n,:)=inf;

end

%format single(CLUS)

lenexport=size(CLUS,1);

for i=1:lenexport,

RESULT(i,:)=sprintf('%15.2f',CLUS(i,:));

end

相关文档
最新文档