kmeans python代码

以下是一个简单的kmeans聚类算法的Python代码示例:

import numpy as np
import matplotlib.pyplot as plt

def kmeans(X, K, max_iters=100):
    # 随机初始化K个聚类中心
    centroids = X[np.random.choice(range(len(X)), K, replace=False)]
    # 迭代Kmeans算法
    for i in range(max_iters):
        # 计算每个样本到K个聚类中心的距离
        distances = np.sqrt(((X - centroids[:, np.newaxis])**2).sum(axis=2))
        # 分配每个样本到最近的聚类中心
        labels = np.argmin(distances, axis=0)
        # 更新聚类中心
        for k in range(K):
            centroids[k] = X[labels == k].mean(axis=0)
    return labels, centroids

# 生成随机数据
np.random.seed(0)
X = np.vstack([np.random.randn(100, 2) + [2, 2],
               np.random.randn(100, 2) + [-2, -2],
               np.random.randn(100, 2) + [2, -2]])
# 调用Kmeans算法
labels, centroids = kmeans(X, K=3)
# 可视化聚类结果
plt.scatter(X[:, 0], X[:, 1], c=labels)
plt.scatter(centroids[:, 0], centroids[:, 1], marker='x', s=200, linewidths=3, color='r')
plt.show()

该代码使用numpy和matplotlib库实现了一个简单的kmeans聚类算法。首先,随机初始化K个聚类中心,然后迭代Kmeans算法,直到收敛或达到最大迭代次数。在每次迭代中,计算每个样本到K个聚类中心的距离,然后将每个样本分配到最近的聚类中心。最后,更新聚类中心为每个聚类的样本均值。最终,将聚类结果可视化。

接下来我会对这段代码进行详细解释。

首先,我们导入了numpy和matplotlib.pyplot库,这两个库分别用于数值计算和可视化。

接着,我们定义了一个kmeans函数,该函数接受三个参数:X表示输入数据,K表示聚类数,max_iters表示最大迭代次数。在函数内部,我们首先随机初始化K个聚类中心,然后迭代Kmeans算法,直到收敛或达到最大迭代次数。在每次迭代中,我们计算每个样本到K个聚类中心的距离,然后将每个样本分配到最近的聚类中心。最后,我们更新聚类中心为每个聚类的样本均值。

最后,我们生成了随机数据,并调用了kmeans函数进行聚类。最终,我们将聚类结果可视化,其中每个聚类用不同的颜色表示,聚类中心用红色的叉号表示。

这段代码实现了一个简单的kmeans聚类算法,并将聚类结果可视化,方便我们对聚类效果进行观察和评估。