用Python写一个kmeans聚类,要求可以自由调整簇的数量
时间: 2023-05-19 15:01:54 浏览: 73
好的,以下是一个简单的 Python K-means 聚类算法实现,可以自由调整簇的数量:
```python
import numpy as np
def kmeans(X, k):
# 随机初始化 k 个聚类中心
centers = X[np.random.choice(len(X), k, replace=False)]
while True:
# 计算每个样本到聚类中心的距离
distances = np.linalg.norm(X[:, np.newaxis] - centers, axis=2)
# 找到每个样本距离最近的聚类中心
labels = np.argmin(distances, axis=1)
# 更新聚类中心
new_centers = np.array([X[labels == i].mean(axis=0) for i in range(k)])
# 如果聚类中心不再变化,退出循环
if np.allclose(centers, new_centers):
break
centers = new_centers
return labels
```
使用方法:
```python
# 生成随机数据
X = np.random.randn(100, 2)
# 聚类数量为 3
k = 3
# 调用 kmeans 函数
labels = kmeans(X, k)
```
这个算法会返回一个长度为样本数量的数组,表示每个样本所属的聚类编号。
阅读全文