用python写一个k-means算法
时间: 2024-05-10 11:20:02 浏览: 101
以下是一个简单的 Python 实现 k-means 算法的示例代码:
```python
import random
import numpy as np
def kmeans(X, k, max_iterations=100):
# 随机选择 k 个点作为初始聚类中心
centroids = random.sample(X, k)
for i in range(max_iterations):
# 将数据点分配给最近的聚类中心
clusters = [[] for _ in range(k)]
for x in X:
distances = [np.linalg.norm(x - c) for c in centroids]
cluster_index = np.argmin(distances)
clusters[cluster_index].append(x)
# 计算新的聚类中心
new_centroids = []
for cluster in clusters:
new_centroid = np.mean(cluster, axis=0)
new_centroids.append(new_centroid)
# 如果聚类中心不变则停止迭代
if np.allclose(centroids, new_centroids):
break
centroids = new_centroids
return clusters, centroids
```
在上述代码中,输入参数 X 是一个 n×m 的矩阵,其中 n 是数据点的数量,m 是每个数据点的特征数。k 是需要聚类的簇的数量。max_iterations 是最大迭代次数。
在函数的开头,我们随机选择 k 个点作为初始聚类中心。然后,我们将数据点分配给最近的聚类中心,并计算新的聚类中心。如果新的聚类中心和旧的聚类中心相同,则停止迭代。
最后,函数返回聚类后的簇以及聚类中心。
阅读全文