基于传递闭包的模糊聚类(计算智能课程设计)

目录

前面的话

正文

1、实验目的

2、背景知识

3、 示例代码

4、实验内容

题目答案

最后的话


前面的话

目的是抛砖引玉,不太建议直接抄。

为爱发电,多点赞可能会导致我更新未来你想要的内容。

正文

1、实验目的


掌握建立模糊等价矩阵的方法,会求传递闭包矩阵;掌握利用传递闭包进行模糊聚类的一般方法;
会使用Python进行模糊矩阵的有关运算。

2、背景知识


“聚类”就是按照一定的要求和规律对事物进行区分和分类的过程, 在这一过程中没有任何关
于分类的先验知识, 仅靠事物间的相似性作为类属划分的准则, 属于无监督分类的范畴。传统的聚类
分析是基于等价关系的一种硬划分, 它把每个待辨识的对象根据等价关系严格地划分到某个类中, 具
有非此即彼的性质, 因此这种分类类别界限是分明的。 但是, 现实的分类往往伴随着模糊性, 即考虑
的不是有无关系, 而是关系的深浅程度, 它们在形态和类属方面存在着中介性, 适合进行软划分。 人
们用模糊的方法来处理聚类问题,并称之模糊聚类分析。常用的模糊聚类方法有(1)基于模糊等价矩阵的
聚类方法(传递闭包法、 Bool 矩阵法);(2)基于模糊相似矩阵的直接聚类法(直接聚类法、最大树法、编
网法);(3)基于目标函数的模糊聚类分析法。三种方法各有优缺点:直接聚类法不用计算模糊等价矩阵,计
算量较小,可以比较直接地进行聚类。基于模糊等价矩阵的聚类方法较之编网法理论上更成熟,当矩阵
阶数较高时,手工计算量较大,但在计算机上还是容易实现的。第三种聚类提出“聚类中心”的概念,这
种方法可以得出某一对象在多大程度上属于某一类,但一般需要知道聚类数。
本实验采用基于传递闭包的模糊聚类方法, 传递闭包法聚类首先需要通过标定的模糊相似矩阵𝑹,
然后求出包含矩阵𝑹的最小模糊传递矩阵,即𝑹的传递闭包𝑻𝑹,最后依据𝑻𝑹进行聚类。 具体包括以下几
个步骤:
1、得到特征指标矩阵

4、采用平方法合成传递闭包
通过上述方法得到的模糊相似矩阵𝑹一般只具有自反性和对称性, 不满足传递性。要对𝑹进行变
换, 使得𝑹成为一个模糊等价关系, 即满足传递性。由于𝑹的传递性不易验证,因此,进行聚类分析时,需
用𝑹的传递闭包 t(𝑹)代替𝑹以此作为𝑹的近似,这种方法称为 Washall 算法, 又称传递闭包法。

3、 示例代码


1. import numpy as np
2.
3. np.set_printoptions(precision=2) # 设置矩阵输出精度,保留两位小数
4.
5. def MaxNormalization(a):
6. """
7. 采用最大值规格化法将数据规格化为
8. """
9. c = np.zeros_like(a, dtype=float)
10. for j in range(c.shape[1]): # 遍历 c 的列
11. for i in range(c.shape[0]): # 遍历 c 的列
12. c[i, j] = a[i, j]/np.max(a[:, j])
13. return c
14.
15. def FuzzySimilarMatrix(a):
16. """
17. 用最大最小法构造得到模糊相似矩阵
18. """
19. a = MaxNormalization(a) # 用标准化后的数据
20. c = np.zeros((a.shape[0], a.shape[0]), dtype=float)
21. mmax = []
22. mmin = []
23. for i in range(c.shape[0]): # 遍历 c 的行
24. for j in range(c.shape[0]): # 遍历 c 的行
25. mmax.extend([np.fmax(a[i, :], a[j, :])]) # 取 i 和和 j 行的最大值,即求 i 行和 j 行的

26. mmin.extend([np.fmin(a[i, :], a[j, :])]) # 取 i 和和 j 行的最大值,即求 i 行和 j 行的

27. for i in range(len(mmax)):
28. mmax[i] = np.sum(mmax[i]) # 求并的和
29. mmin[i] = np.sum(mmin[i]) # 求交的和
30. mmax = np.array(mmax).reshape(c.shape[0], c.shape[1]) #变换为与 c 同型的矩阵
31. mmin = np.array(mmin).reshape(c.shape[0], c.shape[1]) #变换为与 c 同型的矩阵
32. for i in range(c.shape[0]): # 遍历 c 的行
33. for j in range(c.shape[1]): # 遍历 c 的列
34. c[i, j] = mmin[i, j]/mmax[i, j] # 赋值相似度
35. return c
36.
37. def MatrixComposition(a, b):
38. """
39. 合成模糊矩阵 a 和模糊矩阵 b
40. """
41. a, b = np.array(a), np.array(b)
42. c = np.zeros_like(a.dot(b))
43. for i in range(a.shape[0]): # 遍历 a 的行元素
44. for j in range(b.shape[1]): # 遍历 b 的列元素
45. empty = []
46. for k in range(a.shape[1]):
47. empty.append(min(a[i, k], b[k, j])) # 行列元素比小
48. c[i, j] = max(empty) # 比小结果取大
49. return c
50.
51. def TransitiveClosure(a):
52. """
53. 平方法合成传递闭包
54. """
55. a = FuzzySimilarMatrix(a) # 用最大最小法构造得到模糊相似矩阵
56. c = a
57. while True:
58. m = c
59. c = MatrixComposition(MatrixComposition(a, c), MatrixComposition(a, c))
60. if (c == m).all(): # 闭包条件
61. return np.around(c, decimals=2) # 返回传递闭包,四舍五入,保留两位小数
62. break
63. else:
64. continue
65.
66. def CutSet(a):
67. """
68. 水平截集
69. """
70. a = TransitiveClosure(a) # 用传递闭包
71.
72. return np.sort(np.unique(a).reshape(-1))[::-1]
73.
74. def get_classes(temp_pairs):
75. lists = []
76.
77. for item1 in temp_pairs:
78. temp_list = []
79. for item2 in temp_pairs:
80. if item1[0] == item2[1]:
81. temp_list.append(item2[0])
82. lists.append(list(set(temp_list)))
83.

84.
85.
return(list(np.unique(lists)))

86. def Result(a):
87. """
88. 模糊聚类结果
89. """
90. lambdas = CutSet(a)
91. a = TransitiveClosure(a)
92.
93. classes = []
94.
95. for lam in lambdas:
96. if lam == lambdas[0]:
97. classes.append([[a] for a in range(len(a))])

98. else:
99. pairs = np.argwhere(a >= lam)
100. classes.append(get_classes(pairs))
101. return classes
102.
103. def main():
104. """
105. 特性指标矩阵
106. """
107. input = np.array([[17, 15, 14, 15, 16],
108. [18, 16, 13, 14, 12],
109. [18, 18, 19, 17, 18],
110. [16, 18, 16, 15, 18]])
111.
112. print("特性指标矩阵\n", input)
113. print("\n 采用最大值规格化法将数据规格化为\n", MaxNormalization(input))
114. print("\n 用最大最小法构造得到模糊相似矩阵\n", FuzzySimilarMatrix(input))
115. print("\n 平方法合成传递闭包\n", TransitiveClosure(input))
116. print("\n 水平截集为\n", CutSet(input))
117. print("\n 模糊聚类结果\n", Result(input))
118.
119.
120. if __name__ == "__main__":
121. main()


4、实验内容


运行和理解示例代码,回答下列问题:
1)为什么按最大最小法得到的一定是一个方阵? 且一定是自反方阵? 且一定是对称方阵?
2)为什么可以根据水平截集对数据进行分类?(提示:一个等价关系唯一确定一个划分)
3) 请解释代码 72 行中两个-1 的含义:
return np.sort(np.unique(a).reshape(-1))[::-1]
4)在平方法的代码实现中,如何判断平方后的矩阵是否满足传递性? 为什么可以这么判断?
5)请修改代码,将最大最小法替换为算术平均最小法。这会改变最终的聚类结果么?

题目答案

1) 为什么按最大最小法得到的一定是一个方阵? 且一定是自反方阵? 且一定是对称方
阵?
答:
具体公式:

2) 为什么可以根据水平截集对数据进行分类? (提示: 一个等价关系唯一确定一个划分)
答:
模糊相似矩阵本身已经是自反的、 对称的, 其传递闭包也是传递的, 则该矩阵一定是
模糊等价矩阵。
数据水平截集后得到的输出是 0 或 1, 会得到一个确定集合, 只需要一个等价关系就
能能够确定一个划分。
3) 请解释代码 72 行中两个-1 的含义:
return np.sort(np.unique(a).reshape(-1))[::-1]
答:
第一个-1 是保持元素不变将矩阵展平, 将矩阵的形状改变成只有一行。 第二个-1 是
逆转顺序, 取从后向前的元素。
4) 在平方法的代码实现中, 如何判断平方后的矩阵是否满足传递性? 为什么可以这么判
断?
答:
代码:
m = c
c = MatrixComposition(MatrixComposition(a, c), MatrixComposition(a, c))
if (c == m).all(): # 闭包条件
return np.around(c, decimals=2) # 返回传递闭包,四舍五入,保留两位小数
break
else:
continue
使用公式:

进行判断, 自乘之后是原矩阵的子集即满足传递性。
5) 请修改代码, 将最大最小法替换为算术平均最小法。 这会改变最终的聚类结果么?
答:
算术平均最小法的具体公式是:

比较最大最小法的公式, 只需要修改构造得到模糊相似矩阵函数中的部分有关 mmax
的代码:
def FuzzySimilarMatrix(a):
a = MaxNormalization(a) # 用标准化后的数据
c = np.zeros((a.shape[0], a.shape[0]), dtype=float)
mmax = []
mmin = []
for i in range(c.shape[0]): # 遍历 c 的行
for j in range(c.shape[0]): # 遍历 c 的行
mmax.extend([a[i, :]+ a[j, :]]) #修改处
mmin.extend([np.fmin(a[i, :], a[j, :])])
for i in range(len(mmax)):
mmax[i] = np.sum(mmax[i]) / 2 #修改处
mmin[i] = np.sum(mmin[i])
mmax = np.array(mmax).reshape(c.shape[0], c.shape[1]) # 变换为与 c 同型的矩阵
mmin = np.array(mmin).reshape(c.shape[0], c.shape[1]) # 变换为与 c 同型的矩阵
for i in range(c.shape[0]): # 遍历 c 的行
for j in range(c.shape[1]): # 遍历 c 的列
c[i, j] = mmin[i, j]/mmax[i, j] # 赋值相似度
return c
改代码前:

改代码后

比较两者可得结论, 会改变。

最后的话

:)看完点赞让我更快更新到你想要的内容。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值