K-均值聚类算法是一种常用的无监督学习算法,它将一组数据点分成K个类别。K-均值聚类算法的基本思想是:将数据点分成K个簇(cluster),每个簇中的数据点距离该簇的质心最近,并且所有数据点到各自所在簇的质心的距离之和最小。
K-均值聚类算法的步骤如下:
- 随机选择K个点作为初始质心;
- 根据每个数据点与各个质心的距离,把每个数据点分入最近的质心所在的簇中;
- 计算每个簇的质心;
- 重复步骤2和3,直到质心的位置不再发生变化或达到最大迭代次数。
K-均值聚类算法的优点主要有:
- 简单、易于实现;
- 可用于大规模数据集的聚类,速度比较快;
- 可以对非常规数据(如文本、图像等)进行聚类。
K-均值聚类算法的缺点主要有:
- 初始聚类中心的选择对算法的结果有很大影响,随机选择可能会导致局部最优解;
- 对于不同形状的簇,K-均值聚类的表现不如其他聚类算法;
- 对于离群点(outlier)比较敏感,可能会影响聚类的效果。
为了增强K-均值聚类算法的鲁棒性,可以使用改进的K-均值聚类算法,比如K-means++算法,它通过选择更合适的质心初始值来降低随机选择初始聚类中心的影响,从而得到更好的聚类结果。
import numpy as np
from sklearn.cluster import KMeans
# 生成随机数据
X = np.random.randn(100, 2)
# 设置簇的数量
kmeans = KMeans(n_clusters=3)
# 训练模型
kmeans.fit(X)
# 获取预测的簇标签
labels = kmeans.predict(X)
# 获取聚类中心
centers = kmeans.cluster_centers_