传递闭包法做模糊聚类的代码
时间: 2023-07-26 20:03:31 浏览: 101
论文研究-模糊聚类分析C程序实现 .pdf
传递闭包法(Transitive Closure Clustering,TCC)是一种常用的模糊聚类算法。下面给出使用Python实现TCC算法的示例代码:
```python
import numpy as np
def TCC(X, delta):
"""
传递闭包法模糊聚类算法
:param X: 样本集合,每行为一个样本
:param delta: 簇间距离阈值
:return: 聚类结果,每个元素表示一个样本所属的簇
"""
n = X.shape[0] # 样本数
D = np.zeros((n, n)) # 距离矩阵
for i in range(n):
for j in range(i+1, n):
D[i][j] = np.linalg.norm(X[i]-X[j]) # 计算欧氏距离
D[j][i] = D[i][j]
# 初始化传递闭包矩阵
T = np.zeros((n, n))
for i in range(n):
for j in range(n):
if D[i][j] <= delta:
T[i][j] = 1
# 传递闭包
for k in range(n):
for i in range(n):
for j in range(n):
T[i][j] = T[i][j] or (T[i][k] and T[k][j])
# 聚类
C = np.zeros(n)
c = 0
for i in range(n):
if C[i] == 0:
c += 1
C[i] = c
for j in range(i+1, n):
if T[i][j] and T[j][i]:
C[j] = c
return C.astype(int)
```
使用示例:
```python
import numpy as np
# 生成数据
np.random.seed(0)
X = np.random.rand(30, 2)
# 聚类并可视化结果
import matplotlib.pyplot as plt
C = TCC(X, 0.3)
plt.scatter(X[:,0], X[:,1], c=C)
plt.show()
```
其中,`X`是样本集合,每行为一个样本;`delta`为簇间距离阈值,即两个样本之间的欧氏距离小于等于`delta`时认为它们属于同一个簇。函数返回的是聚类结果,每个元素表示一个样本所属的簇。
阅读全文