K-Means 聚类算法是一种无监督学习算法,用于将相似的数据点归为同一个簇。它是一种迭代算法,通过最小化簇内距离来对数据进行分类。
原理
- 选择初始中心点:从数据集中随机选择 K 个点作为初始中心点。
- 分配数据点:将每个数据点分配到最近的中心点,形成 K 个簇。
- 更新中心点:计算每个簇的中心点(簇内所有点的平均值)。
- 重复步骤 2 和 3:重复分配数据点和更新中心点的步骤,直到中心点不再发生显著变化。
实现
下面是一个简单的 K-Means 聚类算法实现:
def k_means(data, k):
# 选择初始中心点
centers = select_random_centers(data, k)
# 迭代过程
for _ in range(max_iterations):
clusters = [[] for _ in range(k)]
# 分配数据点
for point in data:
closest_center = min(centers, key=lambda c: distance(point, c))
clusters[centers.index(closest_center)].append(point)
# 更新中心点
new_centers = []
for cluster in clusters:
if cluster:
new_centers.append(calculate_center(cluster))
if set(new_centers) == set(centers):
break
centers = new_centers
return clusters, centers
例子
假设我们有一组二维数据点,想要将其分为 3 个簇:
data = [(1, 2), (1, 4), (1, 0), (10, 2), (10, 4), (10, 0)]
k = 3
clusters, centers = k_means(data, k)
运行上述代码后,clusters
将包含分组后的数据点,centers
将包含每个簇的中心点。
更多内容
想要了解更多关于 K-Means 聚类算法的内容,请阅读 K-Means 聚类算法详解。