Python——Kmeans聚类算法
时间: 2023-10-25 16:10:10 浏览: 139
Kmeans聚类算法是一种无监督学习算法,用于将数据集划分为不同的簇。它是一个迭代算法,通过计算每个数据点与簇中心的距离,将数据点分配到最近的簇中心。然后,根据分配的数据点更新簇中心。重复这个过程,直到簇中心不再变化或达到预设的迭代次数。
下面是一个使用Python实现Kmeans聚类算法的示例:
``` python
import numpy as np
import matplotlib.pyplot as plt
# 生成随机数据
np.random.seed(0)
X = np.random.randn(100, 2)
# 初始化K个簇中心
K = 3
centers = X[np.random.choice(len(X), K, replace=False)]
# 迭代聚类
for i in range(10):
# 计算每个数据点最近的簇中心
distances = np.linalg.norm(X[:, np.newaxis, :] - centers, axis=2)
labels = np.argmin(distances, axis=1)
# 更新簇中心
for k in range(K):
centers[k] = np.mean(X[labels == k], axis=0)
# 可视化聚类结果
colors = ['r', 'g', 'b']
for k in range(K):
plt.scatter(X[labels == k, 0], X[labels == k, 1], c=colors[k])
plt.scatter(centers[:, 0], centers[:, 1], marker='*', s=200, c='#050505')
plt.show()
```
在这个例子中,我们生成了一个随机数据集,然后初始化了3个簇中心。然后,我们执行10次迭代,计算每个数据点最近的簇中心,并根据分配的数据点更新簇中心。最后,我们可视化聚类结果,其中每个簇用不同的颜色表示,簇中心用星号表示。
Kmeans聚类算法是一种简单有效的聚类算法,但它有一些缺点。例如,它需要预先指定簇的数量K,这可能不是很容易确定。此外,它对初始簇中心的选择很敏感,可能会导致陷入局部最优解。因此,在实际应用中,需要对它进行改进,例如Kmeans++算法和层次聚类算法等。
阅读全文