k-means聚类算法代码
时间: 2023-07-06 18:36:39 浏览: 34
以下是Python中k-means聚类算法的示例代码:
```
import numpy as np
import matplotlib.pyplot as plt
# 随机生成数据
np.random.seed(0)
X = np.vstack((np.random.randn(10, 2) + [2, 2], np.random.randn(10, 2) + [0, -2], np.random.randn(10, 2) + [-2, 2]))
# 定义k-means算法
def kmeans(X, k):
# 随机初始化质心
centroids = X[np.random.choice(X.shape[0], k, replace=False)]
while True:
# 计算每个点到质心的距离
distances = np.sqrt(((X - centroids[:, np.newaxis])**2).sum(axis=2))
# 找到距离最近的质心
labels = np.argmin(distances, axis=0)
# 更新质心
new_centroids = np.array([X[labels == i].mean(axis=0) for i in range(k)])
# 如果质心不再变化,则停止迭代
if np.all(centroids == new_centroids):
break
centroids = new_centroids
return labels, centroids
# 调用k-means算法
labels, centroids = kmeans(X, 3)
# 绘制聚类结果
plt.scatter(X[:, 0], X[:, 1], c=labels)
plt.scatter(centroids[:, 0], centroids[:, 1], s=100, marker='x', c='red')
plt.show()
```
其中,参数`X`为数据集,参数`k`为聚类个数。该函数返回每个点的标签以及聚类的质心。在代码中,我们使用随机初始化的方式来初始化质心,计算每个点到质心的距离,找到距离最近的质心,并更新质心,直到质心不再变化为止。最后,我们使用散点图将聚类结果可视化。