赞
踩
在机器学习中,聚类是一种无监督学习方法,用于将数据集中的样本划分为若干个簇,使得同一簇内的样本相似度高,不同簇之间的样本相似度低。KMeans聚类是一种常用的聚类算法之一,本文将介绍KMeans算法的原理、流程、聚类质量评价方法、优缺点以及KMeans++算法,并通过Python实现一个简单的KMeans聚类算法示例。
KMeans算法的流程如下:
初始化质心: 从数据集中随机选择K个样本作为初始质心。
样本分配: 将每个样本分配到距离最近的质心所属的簇中。
更新质心: 计算每个簇的新质心,即该簇中所有样本的平均值。
重复步骤2和步骤3,直到满足停止条件为止: 常见的停止条件包括质心不再改变、达到最大迭代次数等。
常用的聚类质量评价方法包括簇内离差平方和(WCSS)、轮廓系数等。其中,簇内离差平方和(WCSS)用于评估簇内样本的紧密程度,其定义如下:
W C S S = ∑ i = 1 K ∑ x ∈ C i ∥ x − μ i ∥ 2 WCSS = \sum_{i=1}^{K} \sum_{x \in C_i} \|x - \mu_i\|^2 WCSS=i=1∑Kx∈Ci∑∥x−μi∥2
其中, K K K是簇的个数, C i C_i Ci 是第 i i i个簇, μ i \mu_i μi是第 i i i个簇的质心, ∥ x − μ i ∥ \|x - \mu_i\| ∥x−μi∥是样本 x x x到质心 μ i \mu_i μi的欧氏距离。
KMeans++算法是KMeans算法的改进版,通过改进初始质心的选择,提高了算法的效率和稳定性。KMeans++算法的初始质心选择步骤如下:
以下是使用Python实现的简单KMeans聚类算法示例:
import numpy as np from sklearn.datasets import make_blobs import matplotlib.pyplot as plt # 生成样本数据 X, _ = make_blobs(n_samples=300, centers=4, cluster_std=0.6, random_state=42) # 定义KMeans聚类算法 class KMeans: def __init__(self, n_clusters, max_iters=300): self.n_clusters = n_clusters self.max_iters = max_iters def fit(self, X): n_samples, n_features = X.shape centroids_indices = np.random.choice(n_samples, self.n_clusters, replace=False) centroids = X[centroids_indices] for _ in range(self.max_iters): distances = np.sqrt(((X - centroids[:, np.newaxis])**2).sum(axis=2)) labels = np.argmin(distances, axis=0) new_centroids = np.array([X[labels == k].mean(axis=0) for k in range(self.n_clusters)]) if np.all(centroids == new_centroids): break centroids = new_centroids self.labels_ = labels self.cluster_centers_ = centroids # 使用KMeans算法聚类 kmeans = KMeans(n_clusters=4) kmeans.fit(X) # 可视化聚类结果 plt.figure(figsize=(8, 6)) plt.scatter(X[:, 0], X[:, 1], c=kmeans.labels_, cmap='viridis') plt.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:, 1], marker='x', color='red', s=200, label='Centroids') plt.title('KMeans Clustering') plt.xlabel('Feature 1') plt.ylabel('Feature 2') plt.legend() plt.show()
以上代码使用make_blobs
函数生成了一个样本数据集,并使用自定义的KMeans
类实现了KMeans聚类算法。最后,通过可视化展示了聚类的结果。
KMeans聚类是一种常用的无监督学习算法,通过迭代计算样本的簇心和样本的簇分配,将样本划分为不同的簇。本文介绍了KMeans算法的原理、流程、聚类质量评价方法、优缺点以及KMeans++算法,并通过Python实现了一个简单的KMeans聚类算法示例。KMeans聚类算法可以应用于许多领域,如数据分析、模式识别和图像分割等。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。