可能性模糊C均值聚类 Python代码
时间: 2023-11-05 16:03:12 浏览: 126
模糊C均值聚类的代码
5星 · 资源好评率100%
以下是使用Python实现模糊C均值聚类算法的示例代码:
```python
import numpy as np
class FuzzyCMeans:
def __init__(self, n_clusters=2, max_iter=100, m=2, error=1e-5):
self.n_clusters = n_clusters
self.max_iter = max_iter
self.m = m
self.error = error
def fit(self, X):
n_samples, n_features = X.shape
# 初始化隶属度矩阵U
U = np.random.rand(n_samples, self.n_clusters)
U = np.divide(U, np.sum(U, axis=1)[:, None])
iter_num = 0
while iter_num <= self.max_iter:
# 计算聚类中心
centroids = np.dot(U.T, X) / np.sum(U, axis=0)[:, None]
# 计算距离矩阵D
D = np.zeros((n_samples, self.n_clusters))
for i in range(self.n_clusters):
D[:, i] = np.linalg.norm(X - centroids[i], axis=1)
# 更新隶属度矩阵U
U_old = U.copy()
U = np.power(D, -2/(self.m-1))
U = np.divide(U, np.sum(U, axis=1)[:, None])
# 判断是否收敛
if np.linalg.norm(U - U_old) < self.error:
break
iter_num += 1
self.centroids = centroids
self.U = U
return centroids, U
if __name__ == '__main__':
X = np.random.rand(100, 2)
fcm = FuzzyCMeans(n_clusters=2)
centroids, U = fcm.fit(X)
print('聚类中心:\n', centroids)
print('隶属度矩阵:\n', U)
```
在上述代码中,我们首先定义了一个名为`FuzzyCMeans`的类,它包含了模糊C均值聚类算法的初始化函数和拟合函数。其中,初始化函数中设置了聚类数量、最大迭代次数、模糊指数和误差阈值等参数。拟合函数则接收一个数据矩阵`X`作为输入,输出聚类中心和隶属度矩阵。
在拟合函数中,我们首先对隶属度矩阵进行了初始化,并在循环中不断更新聚类中心和隶属度矩阵,直到满足误差阈值或达到最大迭代次数为止。最终,我们返回了聚类中心和隶属度矩阵两个结果。
在代码的最后,我们生成了一个随机的二维数据矩阵,并使用上述代码进行了聚类。
阅读全文