Maison > Article > développement back-end > Comment écrire un algorithme de clustering K-means en Python ?
Comment écrire un algorithme de clustering K-means en Python ?
K-均值聚类算法是一种常用的数据挖掘和机器学习算法,能够将一组数据按照其属性进行分类和聚类。本文将介绍如何用Python编写K-均值聚类算法,并提供具体的代码示例。
在开始编写代码之前,我们需要了解K-均值聚类算法的基本原理。
K-均值聚类算法的基本步骤如下:
现在我们可以开始编写代码了。
首先,我们需要导入必要的库,如numpy和matplotlib。
import numpy as np import matplotlib.pyplot as plt
我们需要准备一组用于聚类的数据。这里我们使用numpy随机生成一组二维数据。
data = np.random.randn(100, 2)
我们需要为聚类算法初始化k个质心。这里我们使用numpy随机选择k个数据点作为初始质心。
k = 3 centroids = data[np.random.choice(range(len(data)), k, replace=False)]
我们需要定义一个函数来计算数据点与质心的距离。这里我们使用欧几里得距离。
def compute_distances(data, centroids): return np.linalg.norm(data[:, np.newaxis] - centroids, axis=2)
我们需要定义一个函数来将每个数据点分配到最近的质心所代表的类别。
def assign_clusters(data, centroids): distances = compute_distances(data, centroids) return np.argmin(distances, axis=1)
我们需要定义一个函数来更新质心的位置,即将其设置为该类别中所有数据点的平均值。
def update_centroids(data, clusters, k): centroids = [] for i in range(k): centroids.append(np.mean(data[clusters == i], axis=0)) return np.array(centroids)
最后,我们需要迭代聚类过程,直到质心的位置不再变化为止。
def kmeans(data, k, max_iter=100): centroids = data[np.random.choice(range(len(data)), k, replace=False)] for _ in range(max_iter): clusters = assign_clusters(data, centroids) new_centroids = update_centroids(data, clusters, k) if np.all(centroids == new_centroids): break centroids = new_centroids return clusters, centroids
现在我们可以运行聚类算法,得到每个数据点所属的类别和最终的质心。
clusters, centroids = kmeans(data, k)
最后,我们可以使用matplotlib将结果可视化。将每个数据点按照其所属的类别进行颜色标记,并将质心的位置用红色圆圈表示。
plt.scatter(data[:, 0], data[:, 1], c=clusters) plt.scatter(centroids[:, 0], centroids[:, 1], s=100, c='red', marker='o') plt.show()
通过以上的代码示例,我们可以用Python实现K-均值聚类算法。你可以根据自己的需求调整聚类的个数k,以及其他参数。希望本文对你理解和实现K-均值聚类算法有所帮助!
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!