K-means聚类算法原理及python实现
时间: 2023-11-01 21:05:37 浏览: 54
基于python的K-Means聚类算法设计与实现
K-means聚类算法是一种无监督学习算法,用于将数据点分成不同的聚类。该算法的目标是将数据点分成k个聚类,并且每个聚类的中心尽可能接近其中的数据点。
原理:
1. 初始化k个聚类中心,可以随机选择或通过其他方式选择。
2. 对于每个数据点,计算其到k个聚类中心的距离,将其归为距离最近的聚类。
3. 对于每个聚类,重新计算其聚类中心,即将该聚类中所有数据点的坐标取平均值,得到新的聚类中心。
4. 重复步骤2和3,直到聚类中心不再改变或达到指定的迭代次数。
Python实现:
```python
import numpy as np
def kmeans(X, k, max_iters=100):
# 随机选择k个聚类中心
centers = X[np.random.choice(len(X), k, replace=False)]
for _ in range(max_iters):
# 计算每个数据点到聚类中心的距离
distances = np.sqrt(((X - centers[:, np.newaxis])**2).sum(axis=2))
# 将每个数据点归为距离最近的聚类
labels = np.argmin(distances, axis=0)
# 计算新的聚类中心
new_centers = np.array([X[labels == i].mean(axis=0) for i in range(k)])
# 如果聚类中心不再改变,停止迭代
if np.all(centers == new_centers):
break
centers = new_centers
return labels, centers
```
其中,X是形状为(n, d)的数据矩阵,n为数据点数量,d为特征数量;k为聚类数量;max_iters为最大迭代次数。函数返回每个数据点的聚类标签和聚类中心坐标。
阅读全文