分割聚类方法之K-Means实现
时间: 2023-11-28 18:47:50 浏览: 72
K-Means算法是一种常用的聚类方法,它将数据集分成K个簇,每个簇的数据点和簇内其他点的距离最小。下面我们来实现K-Means算法。
1. 首先随机选取K个中心点,可以根据数据集的分布情况来选取。
2. 对于每个数据点,计算它与K个中心点的距离,选择距离最近的中心点所在的簇,并将该数据点加入该簇。
3. 对于每个簇,重新计算该簇的中心点。
4. 重复步骤2-3,直到中心点不再发生变化或达到最大迭代次数。
下面是Python代码实现K-Means算法:
``` python
import numpy as np
class KMeans:
def __init__(self, k=2, max_iter=100):
self.k = k
self.max_iter = max_iter
def fit(self, X):
# 随机选取k个中心点
self.centroids = X[np.random.choice(X.shape[0], self.k, replace=False)]
for i in range(self.max_iter):
# 计算每个数据点所属的簇
clusters = [[] for _ in range(self.k)]
for x in X:
dist = [np.linalg.norm(x - c) for c in self.centroids]
cluster_idx = np.argmin(dist)
clusters[cluster_idx].append(x)
# 重新计算每个簇的中心点
new_centroids = np.zeros((self.k, X.shape[1]))
for i, cluster in enumerate(clusters):
if len(cluster) > 0:
new_centroids[i] = np.mean(cluster, axis=0)
else:
new_centroids[i] = self.centroids[i]
# 判断中心点是否发生变化
if np.allclose(self.centroids, new_centroids):
break
self.centroids = new_centroids
def predict(self, X):
dist = np.array([np.linalg.norm(X - c, axis=1) for c in self.centroids])
return np.argmin(dist, axis=0)
```
以上就是K-Means算法的Python实现,可以通过fit方法对数据进行聚类,predict方法可以预测新的数据点所属的簇。
阅读全文