kmeans代码实现聚类
时间: 2023-06-21 19:17:09 浏览: 81
好的,以下是一个简单的 Python 代码实现 K-means 聚类的例子:
```python
import numpy as np
class KMeans:
def __init__(self, k=2, max_iterations=500):
self.k = k
self.max_iterations = max_iterations
def fit(self, data):
self.centroids = []
# 初始化聚类中心
for i in range(self.k):
self.centroids.append(data[i])
for i in range(self.max_iterations):
# 分配数据点到最近的聚类中心
clusters = {}
for i in range(self.k):
clusters[i] = []
for point in data:
distances = [np.linalg.norm(point - self.centroids[centroid]) for centroid in range(self.k)]
cluster = distances.index(min(distances))
clusters[cluster].append(point)
# 计算新的聚类中心
prev_centroids = self.centroids.copy()
for cluster in clusters:
self.centroids[cluster] = np.average(clusters[cluster], axis=0)
# 如果聚类中心不再发生变化,则停止迭代
if np.allclose(prev_centroids, self.centroids):
break
def predict(self, data):
clusters = {}
for i in range(self.k):
clusters[i] = []
for point in data:
distances = [np.linalg.norm(point - self.centroids[centroid]) for centroid in range(self.k)]
cluster = distances.index(min(distances))
clusters[cluster].append(point)
return clusters
```
在上面的代码中,我们首先定义了一个 `KMeans` 类,它有两个参数 `k` 和 `max_iterations`,分别表示聚类的数量和最大迭代次数。然后我们定义了 `fit` 方法来拟合数据,和 `predict` 方法来预测新的数据点所属的聚类。
在 `fit` 方法中,我们首先随机初始化了聚类中心,然后在每一轮迭代中,我们先把数据点分配到离它们最近的聚类中心所在的簇中,然后计算新的聚类中心。如果新的聚类中心和上一轮迭代的聚类中心相同,则停止迭代。在 `predict` 方法中,我们根据已经拟合好的聚类中心,把新的数据点分配到离它们最近的聚类中心所在的簇中。
以上就是一个简单的 K-means 聚类的 Python 代码实现。
阅读全文