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聚类算法,并将聚类结果可视化,方便我们对聚类效果进行观察和评估。