企业网站备案意义,阿里云域名注册官网叫什么,外国网站后台设计,酒店网站建设 源码K-Means 是一种常用的无监督学习算法#xff0c;广泛应用于数据聚类分析。本文将详细讲解 K-Means 算法的原理、步骤、公式以及 Python 实现#xff0c;帮助你深入理解这一经典算法。
什么是 K-Means 算法#xff1f;
K-Means 算法是一种基于原型的聚类算法#xff0c;其…K-Means 是一种常用的无监督学习算法广泛应用于数据聚类分析。本文将详细讲解 K-Means 算法的原理、步骤、公式以及 Python 实现帮助你深入理解这一经典算法。
什么是 K-Means 算法
K-Means 算法是一种基于原型的聚类算法其目标是将数据集分成K个簇clusters使得同一簇内的数据点尽可能相似不同簇之间的数据点尽可能不同。每个簇由其中心即质心centroid表示。
K-Means 算法的步骤
K-Means 算法的主要步骤如下
初始化随机选择 K个数据点作为初始质心。分配簇将每个数据点分配到距离其最近的质心对应的簇。更新质心计算每个簇的质心即簇内所有数据点的平均值。重复步骤 2 和 3直到质心不再发生变化或变化很小或者达到预设的迭代次数。
详细步骤解释 初始化 从数据集中随机选择K 个点作为初始质心。这些质心可以是数据集中的实际点也可以是随机生成的点。 分配簇 计算每个数据点到所有质心的距离通常使用欧氏距离。对于数据点 ( x i ) \ (x_i ) (xi) 和质心 ( μ j ) (\mu_j) (μj)欧氏距离计算公式为 d ( x i , μ j ) ∑ m 1 M ( x i m − μ j m ) 2 \ d(x_i, \mu_j) \sqrt{\sum_{m1}^M (x_{im} - \mu_{jm})^2} \ d(xi,μj)m1∑M(xim−μjm)2 将每个数据点分配到距离其最近的质心对应的簇即 C i { x p : ∥ x p − μ i ∥ ≤ ∥ x p − μ j ∥ , ∀ j , 1 ≤ j ≤ k } \ C_i \{ x_p : \| x_p - \mu_i \| \leq \| x_p - \mu_j \|, \forall j, 1 \leq j \leq k \} \ Ci{xp:∥xp−μi∥≤∥xp−μj∥,∀j,1≤j≤k} 更新质心 对每个簇 ( C i ) \ ( C_i ) (Ci)计算簇内所有数据点的平均值并将该平均值作为新的质心。新的质心计算公式为 μ i 1 ∣ C i ∣ ∑ x j ∈ C i x j \ \mu_i \frac{1}{|C_i|} \sum_{x_j \in C_i} x_j \ μi∣Ci∣1xj∈Ci∑xj 重复 重复分配簇和更新质心的步骤直到质心位置不再发生变化或达到最大迭代次数。
K-Means 算法的优化目标
K-Means 算法的优化目标是最小化所有数据点到其所属簇质心的距离平方和。优化目标函数可以表示为 J ∑ i 1 k ∑ x j ∈ C i ∥ x j − μ i ∥ 2 \ J \sum_{i1}^k \sum_{x_j \in C_i} \| x_j - \mu_i \|^2 \ Ji1∑kxj∈Ci∑∥xj−μi∥2
该目标函数也称为聚类内的总平方误差Total Within-Cluster Sum of Squares简称 TSS。
K-Means 算法的优缺点
优点
简单易懂K-Means 算法原理简单容易实现。速度快算法收敛速度快适合处理大规模数据集。适用范围广在许多实际问题中表现良好。
缺点
选择 ( k ) 值的困难需要预先指定簇的数量 ( k )而合适的 ( k ) 值通常不易确定。对初始值敏感初始质心的选择会影响最终结果可能陷入局部最优解。对异常值敏感异常值可能会显著影响质心的位置。
K-Means 算法的 Python 实现
下面通过 Python 代码实现 K-Means 算法并以一个示例数据集展示其应用。
导入库
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_blobs
from sklearn.cluster import KMeansplt.rcParams[font.sans-serif] [SimHei] # 用来正常显示中文标签
plt.rcParams[axes.unicode_minus] False # 用来正常显示负号生成示例数据集
# 生成示例数据集
X, y make_blobs(n_samples300, centers4, cluster_std0.60, random_state0)
plt.scatter(X[:, 0], X[:, 1], s50)
plt.show()应用 K-Means 算法
# 应用 K-Means 算法
kmeans KMeans(n_clusters4)
kmeans.fit(X)
y_kmeans kmeans.predict(X)# 可视化聚类结果
plt.scatter(X[:, 0], X[:, 1], cy_kmeans, s50, cmapviridis)centers kmeans.cluster_centers_
plt.scatter(centers[:, 0], centers[:, 1], cred, s200, alpha0.75, markerx)
plt.show()结果解释
在上面的示例中我们生成了一个有 4 个簇的示例数据集并使用 K-Means 算法对其进行聚类。最终我们通过可视化展示了聚类结果以及每个簇的质心。
总结
K-Means 算法是一种简单而有效的聚类算法广泛应用于各种数据分析和机器学习任务中。本文详细介绍了 K-Means 算法的原理、步骤、公式以及 Python 实现。虽然 K-Means 算法有一些缺点但通过合理选择参数和预处理数据可以在许多实际应用中取得良好的效果。希望本文能帮助你更好地理解和应用 K-Means 算法。