以下是一个使用 Python 实现 K-Means 聚类算法的示例代码:

import numpy as np

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

    def fit(self, X):
        self.centroids = X[np.random.choice(range(X.shape[0]), self.n_clusters, replace=False)]
        for _ in range(self.max_iter):
            clusters = [[] for _ in range(self.n_clusters)]
            for x in X:
                distances = [np.linalg.norm(x - c) for c in self.centroids]
                cluster_idx = np.argmin(distances)
                clusters[cluster_idx].append(x)
            new_centroids = []
            for cluster in clusters:
                new_centroids.append(np.mean(cluster, axis=0))
            if np.all(self.centroids == new_centroids):
                break
            self.centroids = new_centroids

    def predict(self, X):
        distances = [np.linalg.norm(X - c, axis=1) for c in self.centroids]
        cluster_idx = np.argmin(distances, axis=0)
        return cluster_idx

# 示例用法
X = np.array([[1, 2], [1, 4], [1, 0], [4, 2], [4, 4], [4, 0]])
kmeans = KMeans(n_clusters=2)
kmeans.fit(X)
print(kmeans.centroids)
print(kmeans.predict(X))

在这个示例中,我们定义了一个KMeans类,其中fit方法用于训练模型,predict方法用于预测样本的类别。我们使用欧氏距离作为距离度量,并在每次迭代中更新聚类中心,直到收敛或达到最大迭代次数。在示例用法中,我们使用一个简单的二维数据集进行演示,并打印出聚类中心和样本的预测类别。

K-Means 聚类算法的原理

K-Means 算法是一种无监督学习算法,用于将数据点划分为 k 个不同的簇。该算法的步骤如下:

  1. **初始化聚类中心:**随机选择 k 个数据点作为初始聚类中心。
  2. **分配数据点:**将每个数据点分配到与其最近的聚类中心的簇中。
  3. **更新聚类中心:**计算每个簇中所有数据点的均值,并将该均值作为新的聚类中心。
  4. **重复步骤 2 和 3:**直到聚类中心不再变化或达到最大迭代次数。

K-Means 算法的优点

  • 算法简单易懂,易于实现。
  • 效率高,尤其适用于大数据集。
  • 可用于各种数据类型,例如数值数据、文本数据等。

K-Means 算法的缺点

  • 需要预先指定簇的个数 k。
  • 对初始聚类中心的选取敏感。
  • 不适合处理非凸数据。

K-Means 算法的应用

  • 客户细分
  • 图像压缩
  • 文档分类
  • 异常检测
  • 基因组分析

总结

K-Means 聚类算法是一种简单而有效的聚类算法,广泛应用于各种数据挖掘和机器学习任务中。本文介绍了该算法的原理、实现步骤、优点、缺点和应用,希望能够帮助读者更好地理解和运用该算法。

K-Means 聚类算法 Python 实现详解

原文地址: https://www.cveoy.top/t/topic/X5W 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录