模糊聚类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中有多种不同类型的模糊函数,例如高斯模糊、均值模糊和运动模糊等。下面将逐一介绍这些模糊函数代码的实现方式。
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实现
英文回答:
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均值聚类进行图像分
析的技巧
在图像分析领域,模糊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-模糊聚类(聚类分析)
模糊聚类
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模糊聚类程序
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均值聚类算法
模糊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是一种功能强大的数值计算和数据分析软件,它提供了一些内置的模糊
聚类分析工具,可以帮助我们进行模糊聚类分析。其中最常用的是fcm函数
(fuzzy c-means clustering)。
fcm函数是基于fuzzy c-means算法的,它使用隶属度矩阵来度量数据点与不同
类之间的相似性。该函数需要指定聚类的数量和迭代次数,然后根据数据点与聚类中心之间的距离来计算隶属度矩阵,并不断迭代更新聚类中心和隶属度矩阵,直到收敛为止。
例如,假设我们有一个包含N个数据点的数据集X,每个数据点包含M个特征。我们可以使用fcm函数对该数据集进行模糊聚类分析,首先将数据集归一化,并指定聚类的数量(如3个聚类),迭代次数(如100次),并设置模糊指数(如2)。然后,我们可以使用聚类中心来获得每个数据点的隶属度,并根据隶属度矩
阵来进行进一步的数据分析或可视化。
应用实例
模糊聚类分析在实际中有很多应用,下面我们将介绍其中两个常见的应用实例。
1. 图像分割
如何在Matlab中进行模糊聚类分析
如何在Matlab中进行模糊聚类分析
在数据分析领域,模糊聚类分析是一种常用的技术,它可以应用于各种领域的
数据处理和模式识别问题。而Matlab作为一种功能强大的数据分析工具,也提供
了丰富的函数和工具箱,以支持模糊聚类分析的实施。
1. 引言
模糊聚类分析是一种基于模糊集理论的聚类方法,与传统的硬聚类方法不同,它允许样本属于多个聚类中心。这种方法的优势在于可以更好地应对数据中的不确定性和复杂性,对于某些模糊或模糊边界问题具有更好的解释能力。
2. 模糊聚类算法概述
Matlab提供了多种模糊聚类算法的实现,其中最常用的是基于模糊C均值(Fuzzy C-Means,FCM)算法。FCM算法的基本思想是通过最小化聚类后的模糊
划分矩阵与原始数据之间的距离来确定每个样本所属的聚类中心。
3. 数据预处理与特征提取
在进行模糊聚类分析之前,需要对原始数据进行预处理和特征提取。预处理
包括数据清洗、缺失值处理和异常值处理等;特征提取则是从原始数据中抽取出具有代表性和区分性的特征,用于模糊聚类分析。
4. 模糊聚类分析步骤
在Matlab中,进行模糊聚类分析通常包括以下步骤:
(1) 初始化聚类中心:通过随机选择或基于某种准则的方法初始化聚类中心。
(2) 计算模糊划分矩阵:根据当前的聚类中心,计算每个样本属于各个聚类中心的隶属度。
(3) 更新聚类中心:根据当前的模糊划分矩阵,更新聚类中心的位置。
(4) 判断终止条件:通过设置一定的终止条件,判断是否达到停止迭代的条件。
(5) 输出最终结果:得到最终的聚类结果和每个样本所属的隶属度。
模糊数学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代码写于下,也许有的同学会用得着: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代码
=================================================================== =======
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实现
模糊神经网络(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中,通常将数据存储在
一个矩阵中,其中每一行表示一个观测值,每一列表示一个特征。
二、数据标准化
在进行聚类分析之前,需要对数据进行标准化。标准化可以保证不同特征的量
纲一致,避免某些特征对聚类结果的影响过大。常用的标准化方法包括Z-score标
准化和min-max标准化。
在Matlab中,可以使用内置的函数实现标准化操作。例如,使用zscore函数
可以对数据进行Z-score标准化,使用mapminmax函数可以进行min-max标准化。
三、选择合适的聚类算法
选择合适的聚类算法是进行聚类分析的关键步骤。常用的聚类算法包括K-means聚类、层次聚类和密度聚类等。
在Matlab中,提供了丰富的聚类算法实现。例如,可以使用kmeans函数进行
K-means聚类,使用linkage函数进行层次聚类,使用DBSCAN函数进行密度聚类。
四、确定聚类数目
在进行聚类分析时,需要确定聚类的数目。聚类数目的选择是一个具有挑战性
的问题,需要根据具体的应用情况和领域知识来判断。
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均值聚类算法是一种常用的无监督聚类算法。本文将围绕此算法,介绍其原理、实现
步骤以及应用场景。
1.算法原理
模糊c均值聚类算法是继普通k均值聚类算法之后的一种改进算法。通常情况下,k均值聚类算法的核心是将数据集分成k个不同的类簇,使得每个数据点与其所属的类簇中心点距离最小。
而对于模糊c均值聚类算法,每个数据点并不是强制归属于某一
个特定的类簇,而是存在一个隶属度矩阵,代表该数据点属于各个类
簇的概率。同时,每个类簇中心也不是单一的一个坐标点,而是一个
多维向量。
算法的基本步骤为:先随机初始化隶属度矩阵和各个类簇中心,
然后按照一定的迭代公式不断更新隶属度矩阵和类簇中心,直到达到
一定的收敛准则(如最大迭代次数、误差值小于某一阈值等)。
2.算法实现
在Matlab中实现模糊c均值聚类算法,需要先安装fuzzy工具包。以下是实现的三个主要步骤:
①初始化隶属度矩阵和类簇中心。可以使用rand()函数生成一定范围内均匀分布的随机数,将其归一化为各维总和为1的隶属度矩阵。类簇中心可以在数据集范围内随机选择。
②迭代更新隶属度矩阵和类簇中心。根据迭代公式,先计算各数
据点与各类簇中心的距离(可以使用欧几里得距离),得到距离矩阵。然后根据距离矩阵和一个模糊参数,更新隶属度矩阵。根据隶属度矩
阵和原始数据,权重加权计算每个类簇的中心坐标,得到新的类簇中心。
③判断是否达到收敛准则,如果满足收敛准则则停止迭代,否则
回到第②步。常见的收敛准则包括最大迭代次数、前后两次迭代误差
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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