基于模糊等价关系的模糊聚类程序实现

Ø  总体概述

模糊数学已经使用到各个领域,其在图像的分割中也是常用的经典方法,而且实时在其基础上能有些创新。本文通过两天来对模糊数学基础知识学习进行个小的poject巩固。本文标题兼主要内容为基于模糊等价关系的模糊聚类程序实现

为什么要把模糊聚类分析基于模糊等价关系之上呢?模糊等价关系是同时满足自反性、对称性和传递性的模糊关系,因此必定有如下特性:

1)自反性:保证关系中元素和元素本身是同一类

2)对称性:保证元素AB同类,则BA也同类

3)传递性:若AB同类,BC同类,则AC同类

一般的聚类分析流程图如下

%作者:夏侯佐鑫

%日期:2012-07-15

%功能:模糊聚类分析

 

clc

% 1)原始矩阵

disp('1)原始矩阵')

A = [5 5 3 2;

    2 3 4 5;

    5 5 2 3;

    1 5 3 1;

    2 4 5 1]

% 2)计算相似矩阵M

disp('2)计算相似矩阵M')

M = abs_sub(A, 5, 4)

% 3)计算模糊等价矩阵

disp('3)计算模糊等价矩阵')

N = matrix_com(M, 5)

% 4)λ聚类分析

r = 0.4;

sprintf('4)λ聚类分析(λ=%0.1f)', r)

Q = cluster(N, r)

 

 

Ø  下面分步骤实现每个过程中的调用函数

1)获取原始矩阵

 

地方

空气

土壤

植被

A

5

5

3

2

B

2

3

4

5

C

5

5

2

3

D

1

5

3

1

E

2

4

5

1

由上表很容易一一对应获得矩阵

A = [5 5 3 2;

     2 3 4 5;

     5 5 2 3;

     1 5 3 1;

     2 4 5 1]

矩阵的行代表对象,矩阵的列代表对象具有的性质。

2)计算相似矩阵

方法很多,这里使用很简单的绝对值减法,其数学公式如下

代表相似矩阵中的第i行第j列元素,代表A矩阵的第i行第j列元素。

%作者:夏侯佐鑫

%日期:2012-07-15

%功能:绝对值减数法计算相对矩阵

 

function y = abs_sub(array, m, n);

% array - Input array original array

% m - number of objects

% n - number of properties

c = 0.1;

temp = 0;

for i = 1:m

   for j = 1:m

       for k = 1:n

           temp = temp + abs(array(i,k)-array(j,k));     

       end

       y(i,j) = 1 - c*temp;

       temp = 0;

   end

end

(3)计算模糊等价矩阵

这里利用离散数学里面的关系的合成运算方法,通过迭代计算等价矩阵。

%作者:夏侯佐鑫

%日期:2012-07-15

%功能:模糊矩阵合成计算传递闭包

 

function y = matrix_com(array, m);

% array - Input array original array

% m - number of objects

% n - number of properties

 

flag = 0; %是否找到传递闭包的标志

temp = 0;

cnt = 0;

while ~flag

   y  = temp;

   for i=1:m

       for j=1:m

           temp(i,j) = 0;

           for k=1:m

               if cnt==0

                   temp(i,j)=max(temp(i,j),min(array(i,k), array(k,j)));

               else

                   temp(i,j)=max(temp(i,j),min(y(i,k), y(k,j)));

               end

           end

       end

   end

   cnt = cnt + 1;

   if y == temp

       flag = 1; %传递闭包已找到

   end

end

(4)截值聚类分析

很简单,比如有矩阵

A = [5 5 3 2;

     2 3 4 5;

     5 5 2 3;

     1 5 3 1;

     2 4 5 1]

使用截值r=3,则将A矩阵中比3小的值置0,大于等于3的值置1。结果为

A = [1 1 1 0;

     0 1 1 1;

     1 1 0 1;

     0 1 1 0;

     0 1 1 0]

使用简单的matlab程序实现如下

%作者:夏侯佐鑫

%日期:2012-07-15

%功能:λ聚类分析

 

function y = cluster(array, r);

% array -模糊相似矩阵或模糊等价矩阵

% r -聚类截距

 

if r>1 | r<0

   error('第二个参数必须小于1');

end

len = length(array);

for i=1:len

   for j=1:len

       if array(i,j)>=r

           y(i,j) = 1;

       else

           y(i,j) = 0;

       end

   end

end

 

Ø  最后通过matlab输出结果进一步认识整个模糊聚类的过程

1)原始矩阵

A =

       5              5              3              2      

       2              3              4              5      

       5              5              2              3      

       1              5              3              1      

       2              4              5              1      

2)计算相似矩阵M

M =

       1              1/10           4/5            1/2            3/10   

       1/10           1              1/10           1/5            2/5    

       4/5            1/10           1              3/10           1/10   

       1/2            1/5            3/10           1              3/5    

       3/10           2/5            1/10           3/5            1      

3)计算模糊等价矩阵

N =

       1              2/5            4/5            1/2            1/2    

       2/5            1              2/5            2/5            2/5    

       4/5            2/5            1              1/2            1/2    

       1/2            2/5            1/2            1              3/5    

       1/2            2/5            1/2            3/5            1      

4)λ聚类分析(λ=0.6)

Q =

       1              0              1              0              0      

       0              1              0              0              0      

       1              0              1              0              0      

       0              0              0              1              1      

       0              0              0              1              1       

 所以,当r=0.6时,最终分类结果为{A,C},{D,E},{B,C}三组。选择不同的r值得到不同的分类结果。

 

你可能感兴趣的:(c,function,matlab,input,Matrix)