使用python实现kmean算法

  • Post category:Python

K均值聚类算法是一种常用的无监督学习算法,它可以将数据集分成K个簇,每个簇包含相似的数据点。在本文中,我们将介绍如何使用Python实现K均值聚类算法。

K均值聚类算法的原理

K均值聚类算法的原理非常简单,它的基本思想是将数据集分成K个簇,每个簇包含相似的数据点。具体步骤如下:

  1. 随机选择K个数据点作为初始质心。
  2. 将每个数据点分配到最近的质心所在的簇中。
  3. 重新计算每个簇的质心。
  4. 重复步骤2和步骤3,直到质心不再发生变化或达到最大迭代次数。

使用Python实现K均值聚类算法

下面是一个使用Python实现K均值聚类算法的示例代码:

import numpy as np
import matplotlib.pyplot as plt

def kmeans(X, K, max_iters=100):
    # 随机初始化K个质心
    centroids = X[np.random.choice(len(X), K, replace=False)]

    for i in range(max_iters):
        # 计算每个数据点到质心的距离
        distances = np.sqrt(((X - centroids[:, np.newaxis])**2).sum(axis=2))

        # 将每个数据点分配到最近的质心所在的簇中
        labels = distances.argmin(axis=0)

        # 重新计算每个簇的质心
        new_centroids = np.array([X[labels == k].mean(axis=0) for k in range(K)])

        # 如果质心不再发生变化,则退出循环
        if np.all(centroids == new_centroids):
            break

        centroids = new_centroids

    return centroids, labels

# 生成随机数据
np.random.seed(0)
X = np.random.randn(100, 2)

# 调用K均值聚类算法
centroids, labels = 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()

在这个示例中,我们首先定义了一个kmeans函数,它接受一个数据集X、簇的数量K和最大迭代次数max_iters,并返回质心和每个数据点所属的簇。然后,我们生成了一个随机数据集X,并调用kmeans函数进行聚类。最后,我们使用matplotlib库绘制了聚类结果。

使用sklearn库实现K均值聚类算法

除了手动实现K均值聚类算法之外,我们还可以使用sklearn库中的KMeans类来实现K均值聚类算法。下面是一个使用sklearn库实现K均值聚类算法的示例代码:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans

# 生成随机数据
np.random.seed(0)
X = np.random.randn(100, 2)

# 调用KMeans类进行聚类
kmeans = KMeans(n_clusters=3, random_state=0).fit(X)

# 绘制聚类结果
plt.scatter(X[:, 0], X[:, 1], c=kmeans.labels_)
plt.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:, 1], marker='x', s=200, linewidths=3, color='r')
plt.show()

在这个示例中,我们首先生成了一个随机数据集X,然后使用sklearn库中的KMeans类进行聚类。最后,我们使用matplotlib库绘制了聚类结果。

总结

K均值聚类算法是一种常用的无监督学习算法,它可以将数据集分成K个簇,每个簇包含相似的数据点。在本文中,我们介绍了如何使用Python手动实现K均值聚类算法,并使用sklearn库中的KMeans类实现K均值聚类算法。