可能性模糊C均值聚类 Python代码
时间: 2023-11-05 10:01:42 浏览: 40
以下是可能性模糊C均值聚类的Python代码:
```python
import numpy as np
class FuzzyCMeans():
def __init__(self, n_clusters=2, m=2, max_iter=100, tol=1e-4):
self.n_clusters = n_clusters
self.m = m
self.max_iter = max_iter
self.tol = tol
def fit(self, X):
self.centers = self._initialize_centers(X)
for i in range(self.max_iter):
membership_mat = self._get_membership_mat(X)
new_centers = self._get_new_centers(X, membership_mat)
if self._stop_criteria(self.centers, new_centers):
break
self.centers = new_centers
self.labels_ = self.predict(X)
def _initialize_centers(self, X):
idx = np.random.choice(X.shape[0], self.n_clusters, replace=False)
return X[idx]
def _get_membership_mat(self, X):
distances = self._get_distances(X)
powered_distances = np.power(distances, 2/(self.m-1))
return 1 / np.sum((powered_distances / np.expand_dims(np.sum(powered_distances, axis=1), axis=1)), axis=1)
def _get_distances(self, X):
return np.sqrt(np.sum((X - np.expand_dims(self.centers, axis=1))**2, axis=2))
def _get_new_centers(self, X, membership_mat):
powered_membership_mat = np.power(np.expand_dims(membership_mat, axis=1), self.m)
return np.sum((np.expand_dims(powered_membership_mat, axis=2) * np.expand_dims(X, axis=1)), axis=0) / np.expand_dims(np.sum(powered_membership_mat, axis=0), axis=1)
def _stop_criteria(self, centers, new_centers):
return np.max(np.abs(new_centers - centers)) < self.tol
def predict(self, X):
distances = self._get_distances(X)
return np.argmin(distances, axis=1)
```
这个类的`fit`方法可以被用于拟合数据,其中`X`是`n_samples x n_features`的数组。`_initialize_centers`方法初始化聚类中心。`_get_membership_mat`方法计算每个数据点对每个聚类中心的隶属度。`_get_distances`方法计算每个数据点到每个聚类中心的距离。`_get_new_centers`方法计算新的聚类中心。`_stop_criteria`方法确定是否应该停止迭代。`predict`方法预测每个数据点所属的聚类。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![jpg](https://img-home.csdnimg.cn/images/20210720090814.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)