K-Means 聚类算法 Python 实现详解
以下是一个使用 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 个不同的簇。该算法的步骤如下:
- **初始化聚类中心:**随机选择 k 个数据点作为初始聚类中心。
- **分配数据点:**将每个数据点分配到与其最近的聚类中心的簇中。
- **更新聚类中心:**计算每个簇中所有数据点的均值,并将该均值作为新的聚类中心。
- **重复步骤 2 和 3:**直到聚类中心不再变化或达到最大迭代次数。
K-Means 算法的优点
- 算法简单易懂,易于实现。
- 效率高,尤其适用于大数据集。
- 可用于各种数据类型,例如数值数据、文本数据等。
K-Means 算法的缺点
- 需要预先指定簇的个数 k。
- 对初始聚类中心的选取敏感。
- 不适合处理非凸数据。
K-Means 算法的应用
- 客户细分
- 图像压缩
- 文档分类
- 异常检测
- 基因组分析
总结
K-Means 聚类算法是一种简单而有效的聚类算法,广泛应用于各种数据挖掘和机器学习任务中。本文介绍了该算法的原理、实现步骤、优点、缺点和应用,希望能够帮助读者更好地理解和运用该算法。
原文地址: https://www.cveoy.top/t/topic/X5W 著作权归作者所有。请勿转载和采集!