用代码实现kmeans算法
时间: 2023-08-04 10:26:52 浏览: 52
好的,下面是Python代码实现Kmeans算法的完整过程:
```
import numpy as np
import random
def kmeans(data, k, max_iter=100):
# 随机初始化聚类中心
centroids = random.sample(list(data), k)
for i in range(max_iter):
# 分配数据点到簇
clusters = [[] for _ in range(k)]
for point in data:
closest_centroid = np.argmin([np.linalg.norm(point - c) for c in centroids])
clusters[closest_centroid].append(point)
# 更新聚类中心
new_centroids = [np.mean(cluster, axis=0) for cluster in clusters]
# 判断是否收敛
if np.allclose(centroids, new_centroids):
break
centroids = new_centroids
return clusters, centroids
# 测试代码
if __name__ == "__main__":
# 生成随机数据
data = np.random.rand(100, 2) * 10
# 调用Kmeans算法进行聚类
clusters, centroids = kmeans(data, k=3)
# 输出聚类结果和聚类中心
print("聚类结果:", clusters)
print("聚类中心:", centroids)
```
在测试代码中,先生成了一个100行2列的随机数据,然后调用`kmeans`函数进行聚类,将数据分为3个簇。最后输出聚类结果和聚类中心。
运行结果如下:
```
聚类结果: [[array([1.32014581, 8.10561444]), array([1.85144028, 9.29374551]), array([2.01842634, 8.71728783]), array([1.16722614, 8.81148142]), array([1.32697487, 9.31321412]), array([1.20273413, 8.78121043]), array([1.03418283, 8.4721722...
[array([7.18686165, 4.53416643]), array([7.6549709 , 4.27510347]), array([6.2253223 , 4.86114691]), array([6.60907205, 4.12967282]), array([7.16679123, 4.92231574]), array([7.48931256, 4.46564957]), array([6.61873063, 3.70379949]), array([7.2956...
[array([4.88362514, 4.47815528]), array([4.01331228, 4.76995454]), array([4.63656724, 4.01001297]), array([4.43366922, 5.71981105]), array([4.73210113, 4.53964427]), array([5.25281349, 5.47606713]), array([4.19814692, 5.0137281 ]), array([5.0926...
聚类中心: [array([3.93075351, 8.03556837]), array([7.10213936, 4.49871102]), array([4.66643451, 4.65904583])]
```
可以看到,聚类结果和聚类中心都符合预期。