什么是KMeans聚类算法?
KMeans聚类算法是一种无监督学习算法,主要用于将数据集分割成K个簇(Cluster),其中K是一个预先设定的整数。每个簇内的数据点彼此相似,而不同簇之间的数据点则相对不同。KMeans算法的目标是使每个簇内的数据点与簇中心的距离之和最小化。
KMeans算法的基本原理
KMeans算法的工作流程如下:
- 选择K个中心点:从数据集中随机选择K个点作为初始中心点。
- 分配数据点:计算每个数据点到所有中心点的距离,并将数据点分配到最近的中心点所在的簇。
- 更新中心点:计算每个簇的新中心点,即将簇内所有数据点的平均值作为簇的中心。
- 重复步骤2和3:重复步骤2和3,直到簇中心不再发生显著变化。
KMeans算法的编程实现
下面以Python为例,介绍如何使用KMeans算法进行聚类。
安装必要的库
首先,确保你已经安装了numpy和matplotlib库:
pip install numpy matplotlib
编写KMeans算法代码
以下是一个简单的KMeans算法实现:
import numpy as np
class KMeans:
def __init__(self, n_clusters=3, max_iter=100, tol=1e-4):
self.n_clusters = n_clusters
self.max_iter = max_iter
self.tol = tol
def fit(self, X):
# 初始化中心点
self.centroids_ = X[np.random.choice(X.shape[0], self.n_clusters, replace=False)]
for _ in range(self.max_iter):
# 分配数据点
distances = np.linalg.norm(X[:, np.newaxis] - self.centroids_, axis=2)
self.labels_ = np.argmin(distances, axis=1)
# 更新中心点
new_centroids = np.array([X[self.labels_ == k].mean(axis=0) for k in range(self.n_clusters)])
if np.linalg.norm(new_centroids - self.centroids_) < self.tol:
break
self.centroids_ = new_centroids
def predict(self, X):
distances = np.linalg.norm(X[:, np.newaxis] - self.centroids_, axis=2)
return np.argmin(distances, axis=1)
使用KMeans算法进行聚类
现在,我们可以使用这个KMeans类来对数据进行聚类:
# 加载数据集
X = np.array([[1, 2], [1, 4], [1, 0],
[10, 2], [10, 4], [10, 0]])
# 创建KMeans实例
kmeans = KMeans(n_clusters=2)
# 训练模型
kmeans.fit(X)
# 预测标签
labels = kmeans.predict(X)
# 绘制聚类结果
import matplotlib.pyplot as plt
plt.scatter(X[:, 0], X[:, 1], c=labels)
plt.show()
在上面的例子中,我们使用了一个简单的二维数据集,将数据点聚成了两个簇。
总结
通过上述内容,我们了解了KMeans聚类算法的基本原理和编程实现。动手实践是学习算法的最好方式,希望这篇文章能够帮助你轻松掌握KMeans算法的编程技巧。
