python实现k均值算法示例(k均值聚类算法)

  • Post category:Python

下面是详细讲解“python实现k均值算法示例(k均值聚类算法)”的完整攻略,包含两个示例说明。

K均值算法简介

K均值算法是一种基于距离的聚类算法,它的基本思想是将数据分成K个簇,使得同一簇内的数据距离尽可能小,不同簇之间的数据距离尽可能大。K均值算法的优点是简单易用,适用于大模数据集,但是需要预先指定簇的数量K。

Python实现K均值算法

下面是Python实现K均值算法的代码:

import numpy as np

class KMeans:
    def __init__(self, n_clusters, max_iter=300):
        self.n_clusters = n_clusters
        self.max_iter = max_iter

    def fit(self, X):
        # 随机初始化簇中心
        self.centers = X[np.random.choice(len(X), self.n_clusters, replace=False)]

        for i in range(self.max_iter):
            # 计算每个样本到簇中心的距离
            distances = np.linalg.norm(X[:, np.newaxis, :] - self.centers, axis=2)

            # 分配样本到最近的簇
            labels = np.argmin(distances, axis=1)

            # 更新簇中心
            for j in range(self.n_clusters):
                self.centers[j] = np.mean(X[labels == j], axis=0)

    def predict(self, X):
        distances = np.linalg.norm(X[:, np.newaxis, :] - self.centers, axis=2)
        return np.argmin(distances, axis=1)

这个代码实现了K均值算法的训练和预测过程。在这个代码中,我们首先随机初始化簇中心,然后进行迭代优化。在每次迭代中,我们计算每个样本到簇中心的距离,然后将样本分配到最近的簇中。接着,我们更新簇中心。最后,我们可以使用训练好的模型对新数据进行预测。

示例1:使用K均值算法对随机数据进行聚类

让我们使用K均值算法对随机数据进行聚类。我们将使用以下代码:

import numpy as np
import matplotlib.pyplot as plt
from kmeans import KMeans

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

# 使用K均值算法进行聚类
kmeans = KMeans(n_clusters=3)
kmeans.fit(X)
labels = kmeans.predict(X)

# 可视化聚类结果
plt.scatter(X[:, 0], X[:, 1], c=labels)
plt.show()

这个代码使用K均值算法对随机数据进行聚类。我们首先生成随机数据然后使用K均值算法进行聚类。最后,我们可视化聚类结果。

示例2:使用K均值算法对图像进行分割

让我们使用K均值算法对图像进行分割。我们将使用以下代码:

import numpy as np
import matplotlib.pyplot as plt
from kmeans import KMeans
from skimage import io

# 读取图像
image = io.imread('image.jpg')

# 将图像转换为二维数组
X = image.reshape(-1, 3)

# 使用K均值算法进行聚类
kmeans = KMeans(n_clusters=16)
kmeans.fit(X)
labels = kmeans.predict(X)

# 将聚类结果转换为图像
segmented_image = kmeans.centers[labels].reshape(image.shape)

# 可视化分割结果
plt.imshow(segmented_image)
plt.show()

这个代码使用K均值算法对图像进行分割。我们首先读取图像,然后将图像转换为二维数组。接着,我们使用K均值算法进行聚类。最后,我们将聚类结果转换为图像,并可视化分割结果。

希望这个攻略能帮助你理解如何使用Python实现K均值算法!