除了使用scikit-learn
库之外,您还可以手动实现KMeans算法来更好地理解其工作原理。这里是一个简单的手动实现KMeans的例子:
import numpy as np
def kmeans(X, n_clusters, max_iter=300, tol=1e-4):
"""
执行KMeans聚类算法。
参数:
- X: 数据矩阵 (n_samples, n_features)
- n_clusters: 聚类的数量
- max_iter: 最大迭代次数
- tol: 收敛阈值
返回:
- labels: 每个样本的标签
- centroids: 聚类中心
"""
# 初始化质心
centroids = X[np.random.choice(X.shape[0], n_clusters, replace=False)]
for _ in range(max_iter):
# 分配每个样本到最近的质心
labels = np.argmin(np.linalg.norm(X[:, np.newaxis] - centroids, axis=2), axis=1)
# 更新质心
new_centroids = np.array([X[labels == i].mean(axis=0) for i in range(n_clusters)])
# 检查收敛
if np.linalg.norm(new_centroids - centroids) < tol:
break
centroids = new_centroids
return labels, centroids
# 示例数据
X = np.array([[1, 2], [1, 4], [1, 0],
[4, 2], [4, 4], [4, 0]])
# 应用KMeans
labels, centroids = kmeans(X, n_clusters=2)
print("Labels:", labels)
print("Centroids:", centroids)
这个例子中,我们定义了一个kmeans
函数,该函数接受数据矩阵X
、聚类数量n_clusters
以及可选的最大迭代次数和收敛阈值。函数返回每个数据点的标签以及聚类中心。
如果你需要使用真实的数据集,你可以使用Pandas来加载数据并对其进行预处理,然后再应用上述函数。