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

本文介绍了一种基于模糊等价关系的模糊聚类方法,并通过MATLAB实现了从原始数据到模糊聚类的全过程。该方法首先计算相似矩阵,然后通过迭代求得模糊等价矩阵,最后采用阈值聚类完成分类。

Ø  总体概述

模糊数学已经使用到各个领域,其在图像的分割中也是常用的经典方法,而且实时在其基础上能有些创新。本文通过两天来对模糊数学基础知识学习进行个小的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值得到不同的分类结果。

 

### 基于模糊等价关系的聚类算法在头歌实训平台上的实现或教程 基于模糊等价关系的聚类算法是一种高级层次聚类方法,其核心思想是通过定义模糊相似性矩阵来构建模糊等价关系,并在此基础上进行聚类。与传统的凝聚式聚类相比,这种方法能够更好地处理数据中的不确定性[^1]。 #### 模糊等价关系的定义 模糊等价关系是一种特殊的模糊关系,满足自反性、对称性和传递性。在聚类过程中,通常通过计算数据点之间的相似度矩阵,并将其转化为模糊等价矩阵来实现。常见的相似度度量包括欧几里得距离、余弦相似度等[^4]。 #### 在头歌实训平台上的实现 头歌实训平台提供了丰富的机器学习实验资源,但目前官方文档中并未明确提及基于模糊等价关系的聚类算法的具体实现教程。然而,可以通过以下方式自行实现: 1. **数据预处理** 首先加载数据集并进行必要的预处理操作,例如归一化或标准化。这一步对于确保相似度计算的准确性至关重要[^5]。 2. **构建模糊相似性矩阵** 使用合适的相似度度量(如欧几里得距离)计算数据点之间的相似性,并生成初始的模糊相似性矩阵。代码示例如下: ```python import numpy as np from sklearn.preprocessing import StandardScaler def calculate_similarity_matrix(data): scaler = StandardScaler() data_scaled = scaler.fit_transform(data) n = len(data_scaled) similarity_matrix = np.zeros((n, n)) for i in range(n): for j in range(n): similarity_matrix[i][j] = 1 / (1 + np.linalg.norm(data_scaled[i] - data_scaled[j])) return similarity_matrix ``` 3. **生成模糊等价矩阵** 利用传递闭包法或其他方法将模糊相似性矩阵转化为模糊等价矩阵。以下是简单的传递闭包实现: ```python def transitive_closure(similarity_matrix, threshold=0.5): n = len(similarity_matrix) equivalence_matrix = similarity_matrix.copy() for k in range(n): for i in range(n): for j in range(n): equivalence_matrix[i][j] = max(equivalence_matrix[i][j], min(equivalence_matrix[i][k], equivalence_matrix[k][j])) equivalence_matrix[equivalence_matrix < threshold] = 0 return equivalence_matrix ``` 4. **聚类结果提取** 根据模糊等价矩阵,将具有高相似度的数据点划分为同一簇。具体实现可以参考以下代码: ```python def extract_clusters(equivalence_matrix): n = len(equivalence_matrix) clusters = [] visited = [False] * n for i in range(n): if not visited[i]: cluster = [i] visited[i] = True for j in range(n): if equivalence_matrix[i][j] > 0 and not visited[j]: cluster.append(j) visited[j] = True clusters.append(cluster) return clusters ``` 5. **模型评估** 使用轮廓系数等指标对聚类结果进行评估,确保算法的有效性[^5]。 #### 注意事项 - 头歌实训平台支持多种编程语言和工具,建议使用Python进行开发。 - 如果需要交叉验证或其他高级功能,可以参考`cross_val_score()`函数的使用方法[^3]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值