kmeans算法python源码
时间: 2023-08-01 21:02:09 浏览: 96
K均值聚类算法是一种常用的无监督学习算法,用于将样本数据划分为K个不同的簇。以下是一个使用Python编写的K均值算法的简单源码示例:
```python
import numpy as np
def kmeans(data, K, max_iters=100):
# 随机初始化质心
centroids = data[np.random.choice(len(data), K, replace=False), :]
for _ in range(max_iters):
# 分配样本到最近的质心
distances = np.linalg.norm(data[:, np.newaxis] - centroids, axis=2)
cluster_assignment = np.argmin(distances, axis=1)
# 更新质心
new_centroids = np.zeros_like(centroids)
for i in range(K):
new_centroids[i] = np.mean(data[cluster_assignment == i], axis=0)
# 判断是否收敛
if np.all(centroids == new_centroids):
break
centroids = new_centroids
return centroids, cluster_assignment
# 测试
data = np.array([[1, 2], [1, 4], [1, 0], [4, 2], [4, 4], [4, 0]])
K = 2
centroids, cluster_assignment = kmeans(data, K)
print("质心:")
print(centroids)
print("样本分配结果:")
print(cluster_assignment)
```
上述源码实现了K均值算法的基本步骤。首先随机初始化K个质心,然后重复以下过程直到收敛。首先计算每个样本与质心的距离,将样本分配到最近的质心,并根据分配结果更新质心。最后,返回最终的质心和样本的分配结果。
在代码中,我们使用了numpy库进行向量化运算,提高了代码的效率。测试部分使用了一个简单的二维样本数据集,并打印了最终的质心和样本的分配结果。
注意,上述代码只是一个简单的示例,实际应用中可能需要根据具体问题进行适当的调整和优化。
阅读全文