k-均值聚类算法(k-means Clustering Algorithm)是一种将一组数据分成 k 个不同的簇的聚类算法。该算法基于距离作为相似性度量,即将数据对象划分为 k 个簇,使得每个簇中的数据对象之间的距离尽可能小,而不同簇之间的数据对象之间的距离尽可能大。
k-均值聚类算法的步骤如下:
- 随机选择 k 个数据对象作为初始聚类中心。
- 计算每个数据对象与各个聚类中心的距离,将数据对象分配给距离最近的聚类中心。
- 更新聚类中心,即将每个簇的中心替换为该簇内所有数据对象的均值。
- 重复步骤 2 和 3,直到聚类中心不再发生变化或达到预设的迭代次数。
在实际应用中,k-均值聚类算法常用于数据挖掘、图像处理、文本分析等领域。例如,在数据挖掘中,该算法可以用于发现潜在的客户群体;在图像处理中,可以用于图像分割和物体识别;在文本分析中,可以用于主题分类和情感分析等。
以下是一个使用 Python 实现的 k-均值聚类算法的简单示例:
import numpy as np
def k_means_clustering(data, k, max_iterations=100):
# 随机选择 k 个数据对象作为初始聚类中心
centroids = data[np.random.choice(data.shape[0], k, replace=False)]
# 初始化聚类结果
labels = np.zeros(data.shape[0])
# 进行最大迭代次数
for _ in range(max_iterations):
# 计算每个数据对象与各个聚类中心的距离,将数据对象分配给距离最近的聚类中心
distances = np.linalg.norm(data[:, np.newaxis] - centroids, axis=2)
labels = np.argmin(distances, axis=1)
# 更新聚类中心
centroids = np.array([data[labels == i].mean(axis=0) for i in range(k)])
return centroids, labels
示例数据
data = np.array([[1, 2], [2, 2], [2, 3], [3, 3], [3, 4], [4, 4], [4, 5], [5, 5]])
进行 k-均值聚类
k, centroids, labels = k_means_clustering(data, 3)
输出聚类结果
print("k:", k)
print("Centroids:", centroids)
print("Labels:", labels)
CopyCopy
在这个示例中,我们首先定义了一个名为 k_means_clustering
的函数,用于计算输入数据序列的 k-均值聚类。然后,我们创建了一个包含 8 个数据对象的示例数据集,并调用 k_means_clustering
函数计算其 k-均值聚类结果。最后,我们输出了聚类的中心点和标签。