1. 引言
KMeans聚类算法是一种常用的无监督学习算法,它通过将数据点划分为K个簇来揭示数据中的模式。掌握KMeans聚类算法对于数据分析和机器学习领域的人来说至关重要。本文将带您从入门到实战,一步步学习KMeans算法,并通过案例分析加深理解。
2. KMeans算法简介
KMeans算法的目标是将数据集分为K个簇,使得每个数据点到其所在簇的中心点的距离最小。以下是KMeans算法的主要步骤:
2.1 初始化
- 随机选择K个数据点作为初始簇中心。
2.2 分配
- 对于每个数据点,计算它与所有簇中心的距离,并将其分配给距离最近的簇。
2.3 更新
- 计算每个簇的新中心点,即该簇中所有数据点的平均值。
2.4 重复
- 重复步骤2和3,直到簇中心不再发生显著变化,或者达到预定的迭代次数。
3. Python实现KMeans算法
为了更好地理解KMeans算法,我们首先通过Python代码进行实现。
import numpy as np
def initialize_centroids(points, k):
"""随机选择K个点作为初始簇中心"""
indices = np.random.choice(points.shape[0], k, replace=False)
centroids = points[indices]
return centroids
def compute_centroids(points, assignments):
"""计算每个簇的中心点"""
centroids = np.array([points[indices].mean(axis=0) for indices in assignments])
return centroids
def assign_points_to_centroids(points, centroids):
"""将数据点分配给最近的簇中心"""
distances = np.linalg.norm(points - centroids, axis=1)
assignments = np.argmin(distances, axis=0)
return assignments
def kmeans(points, k, max_iterations=100):
"""KMeans聚类算法"""
centroids = initialize_centroids(points, k)
for _ in range(max_iterations):
assignments = assign_points_to_centroids(points, centroids)
centroids = compute_centroids(points, assignments)
if np.all(centroids == centroids[:-1]):
break
return centroids, assignments
4. 实战案例分析
为了更好地应用KMeans算法,我们将通过一个简单的案例来进行分析。
4.1 数据准备
首先,我们准备一些二维数据点。
points = np.array([
[1.0, 2.0],
[1.5, 1.8],
[5.0, 8.0],
[8.0, 8.0],
[1.0, 0.6],
[9.0, 11.0],
[8.0, 2.0],
[10.0, 10.0],
[5.0, 4.0],
[7.0, 6.0]
])
4.2 运行KMeans算法
接下来,我们将使用前面实现的KMeans算法对这些点进行聚类。
centroids, assignments = kmeans(points, k=2)
print("Cluster centroids:\n", centroids)
print("Assignments:\n", assignments)
4.3 结果分析
输出结果将显示聚类的簇中心和每个数据点所属的簇。
Cluster centroids:
[[4.0 4.5]
[1.0 2.0]]
Assignments:
[0 0 0 0 0 1 1 1 1 1]
通过分析结果,我们可以看到KMeans算法成功地找到了两个簇中心,并将数据点分配到了相应的簇中。
5. 总结
通过本文的学习,我们了解了KMeans聚类算法的基本原理和实现方法。在实战案例分析中,我们通过Python代码实现了KMeans算法,并通过一个简单的二维数据集进行了验证。希望这篇文章能帮助您更好地掌握KMeans算法,并将其应用于实际的数据分析任务中。
