用python写kmeans代码
时间: 2023-06-10 09:07:21 浏览: 84
好的,下面是一个简单的 Python 脚本来实现 k-means 聚类:
```python
import numpy as np
import matplotlib.pyplot as plt
def distance(p1, p2):
return np.sqrt(np.sum((p1 - p2)**2))
def find_nearest_centroid(point, centroids):
distances = [distance(point, centroid) for centroid in centroids]
return np.argmin(distances)
def kmeans(X, k, max_iterations=100):
# 随机选择 k 个点作为初始质心
centroids = X[np.random.choice(X.shape[0], size=k, replace=False), :]
labels = np.zeros(X.shape[0])
for i in range(max_iterations):
# 分配每个点到最近的质心
for j in range(X.shape[0]):
labels[j] = find_nearest_centroid(X[j], centroids)
# 更新质心位置
for j in range(k):
centroids[j] = np.mean(X[labels == j], axis=0)
return labels, centroids
# 生成一些随机数据
X = np.random.rand(100, 2)
# 聚类个数
k = 3
# 执行 k-means
labels, centroids = kmeans(X, k)
# 绘制聚类结果
colors = ['r', 'g', 'b']
for i in range(k):
plt.scatter(X[labels == i, 0], X[labels == i, 1], c=colors[i])
plt.scatter(centroids[i, 0], centroids[i, 1], marker='x', s=200, linewidths=3, color='k')
plt.show()
```
这个代码实现了一个简单的 k-means 聚类,它使用了 numpy 和 matplotlib 库。在这个示例中,我们生成了一些随机数据,并将其分为 3 个簇。执行 k-means 后,我们绘制了聚类结果。
阅读全文