建企业网站需要多少钱,域名注册查询阿里云,网站建设仟金手指专业15,叫人做网站后不提供源码【机器学习】13.十大算法之一K均值算法#xff08;K-means#xff09;聚类详细讲解 一摘要二个人简介三K-均值聚类#xff08;K-means#xff09;3.1-K均值算法的基本原理3.1.1- 聚类分析的目标3.1.2- K - means算法算法原理 四K-means聚类算法的收敛性五证明K均值算法的收… 【机器学习】13.十大算法之一K均值算法K-means聚类详细讲解 一·摘要二·个人简介三·K-均值聚类K-means3.1-K均值算法的基本原理3.1.1- 聚类分析的目标3.1.2- K - means算法算法原理 四·K-means聚类算法的收敛性五·证明K均值算法的收敛性六·K-means聚类算法怎么选择合适的K值6.1- 肘部法则Elbow Method6.2- 轮廓系数Silhouette Coefficient6.3- 平均轮廓法 七·总结 一·摘要 K-means聚类算法是一种经典的无监督学习算法它通过迭代过程来对数据进行聚类。聚类的目的在于把具有相似特征的数据分为若干组或簇使得同一组内数据的相似度尽可能高而不同组之间的数据相似度尽可能低。
该算法的基本思想是随机选择K个数据点作为初始聚类中心接着将每个数据点分配到最近的簇中心然后重新计算每个簇的中心点此过程不断迭代进行直至满足停止条件即簇中心的位置不再发生显著变化或达到预设的迭代次数 。
K-means算法的实现主要包括两个关键步骤数据点的分配和簇中心的更新。在数据点的分配阶段算法将计算每个数据点与各个簇中心的距离并将数据点划分到距离最近的簇中。在簇中心的更新阶段算法会根据新分配的数据点重新计算各簇的中心点通常是取簇中所有点的均值作为新的簇中心。
二·个人简介
️️个人主页以山河作礼。 ️️:Python领域新星创作者CSDN实力新星认证CSDN内容合伙人阿里云社区专家博主新星计划导师在职数据分析师。
悲索之人烈焰加身堕落者不可饶恕。永恒燃烧的羽翼带我脱离凡间的沉沦。 希望大家能持续支持共同向前迈进 如果您觉得文章有价值 欢迎留言点赞收藏并关注我们➕。 热门专栏 类型专栏Python基础Python基础入门—详解版Python进阶Python基础入门—模块版Python高级Python网络爬虫从入门到精通Web全栈开发Django基础入门Web全栈开发HTML与CSS基础入门Web全栈开发JavaScript基础入门Python数据分析Python数据分析项目机器学习机器学习算法人工智能人工智能
三·K-均值聚类K-means
3.1-K均值算法的基本原理
3.1.1- 聚类分析的目标
聚类分析旨在将数据集划分为若干个组或簇使得同一簇内的数据对象具有较高的相似性而不同簇之间的数据对象则存在较大的差异性。通过聚类分析能够揭示数据的潜在模式、发现数据内在的结构规律从而为后续的数据分析和决策提供有力支持。 K - means 算法的目标是将数据集划分为 K 个不相交的聚类簇clusters。它通过迭代的方式使得同一聚类簇内的数据点之间的相似度通常是距离的倒数尽可能高而不同聚类簇之间的相似度尽可能低。这样可以帮助我们发现数据中的内在结构和模式例如在客户细分中可以根据客户的特征将他们划分为不同的群体以便采取针对性的营销策略。
3.1.2- K - means算法算法原理
初始化
随机选择 K 个数据点作为初始聚类中心cluster centers。这些初始中心的选择可能会对最终的聚类结果产生一定的影响。在对二维空间中的点进行聚类时如果初始中心恰好位于数据分布较为密集的区域可能会更快地收敛到较好的聚类结果。
分配数据点到最近的聚类中心
对于数据集中的每一个数据点计算它与各个聚类中心的距离通常采用欧氏距离但也可以使用其他距离度量如曼哈顿距离等。然后将该数据点分配给距离它最近的聚类中心所在的聚类簇。如果有三个聚类中心 C1、C2 和 C3对于一个数据点 P如果它到 C2 的距离最小那么 P 就被分配到以 C2 为中心的聚类簇。
更新聚类中心
当所有的数据点都被分配到相应的聚类簇后重新计算每个聚类簇的中心。新的聚类中心是该聚类簇内所有数据点的均值。以一维数据为例假设一个聚类簇包含数据点 {246}那么新的聚类中心就是2 4 6/3 4。
迭代
重复步骤 2 和步骤 3直到满足一定的停止条件。常见的停止条件包括聚类中心的变化小于某个阈值、达到预设的最大迭代次数或者聚类结果不再发生变化。当连续两次迭代后所有聚类中心的位置变化都不超过 0.001 时就可以认为算法已经收敛停止迭代。
四·K-means聚类算法的收敛性
K-means聚类算法的收敛性是指算法在有限次迭代后达到一个稳定的状态即聚类中心不再发生显著变化或者目标函数通常是总误差平方和不再显著减小。 以下是关于K-means聚类算法收敛性的详细解释
目标函数
K-means算法的目标函数是所有数据点到其所属聚类中心的距离平方之和定义为
收敛条件
K-means算法在以下情况下停止迭代
目标函数稳定当连续两次迭代的目标函数值变化小于某个预设的阈值时认为算法收敛。最大迭代次数当达到预设的最大迭代次数时算法停止。
五·证明K均值算法的收敛性
K-means算法的收敛性可以通过以下两点来证明
目标函数单调递减在每次迭代中分配步骤确保每个数据点到其所属聚类中心的距离不会增加因此目标函数值不会增加。更新步骤通过计算均值来最小化每个聚类簇内的距离平方和从而进一步减小目标函数值。因此目标函数值在每次迭代中都是单调递减的。目标函数有下界目标函数值是非负的因为它是距离平方的和。因此目标函数值有下界即0。 由于目标函数值在每次迭代中单调递减且有下界根据单调有界数列的收敛定理K-means算法的目标函数值必然收敛到某个值。
六·K-means聚类算法怎么选择合适的K值
6.1- 肘部法则Elbow Method
肘部法通过观察不同K值下的总误差平方和SSE变化来选择K值。随着K值的增加SSE会逐渐减小但当K值增加到一定程度后SSE的下降速度会显著减缓形成一个“肘部”点。这个点对应的K值通常被认为是最优的。 步骤
选择一个K值范围如1到10。对每个K值运行K-means算法计算SSE。绘制K值与SSE的曲线图。找到曲线的“肘部”点即SSE下降速度开始减缓的点。
代码示例
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs# 创建数据集
X, _ make_blobs(n_samples300, centers4, cluster_std0.60, random_state42)# 初始化SSE列表
sum_of_squared_errors []
cluster_range range(2, 12) # 调整K值范围# 计算不同K值的SSE
for num_clusters in cluster_range:kmeans_model KMeans(n_clustersnum_clusters, random_state42)kmeans_model.fit(X)sum_of_squared_errors.append(kmeans_model.inertia_)# 绘制肘部图
plt.figure(figsize(8, 5))
plt.plot(cluster_range, sum_of_squared_errors, markero, linestyle-, colorblue)
plt.title(Elbow Method to Determine Optimal K)
plt.xlabel(Number of Clusters (K))
plt.ylabel(Sum of Squared Errors (SSE))
plt.grid(True)
plt.show()6.2- 轮廓系数Silhouette Coefficient
轮廓系数用于衡量数据点在所属聚类簇内的紧密程度以及与其他聚类簇的分离程度。轮廓系数的值介于-1到1之间值越接近1表示聚类效果越好。 操作步骤
对一系列K值例如2到10运行K-means算法。计算每个K值的轮廓系数。选择轮廓系数最高的K值作为最佳聚类数。
示例代码
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs
from sklearn.metrics import silhouette_score# 创建模拟数据集
data, _ make_blobs(n_samples300, centers4, cluster_std0.60, random_state42)# 初始化存储轮廓系数的列表
silhouette_results []# 遍历不同的聚类数K
for num_clusters in range(2, 11): # 聚类数从2到10kmeans KMeans(n_clustersnum_clusters, random_state42)labels kmeans.fit_predict(data)silhouette_avg silhouette_score(data, labels) # 计算轮廓系数silhouette_results.append(silhouette_avg)# 绘制轮廓系数与聚类数K的关系图
plt.figure(figsize(8, 5))
plt.plot(range(2, 11), silhouette_results, markers, linestyle-, colorpurple, linewidth1.5)
plt.title(Optimal K Selection using Silhouette Score, fontsize14)
plt.xlabel(Number of Clusters (K), fontsize12)
plt.ylabel(Silhouette Score, fontsize12)
plt.xticks(range(2, 11))
plt.grid(axisy, linestyle--, alpha0.7)
plt.show()6.3- 平均轮廓法
平均轮廓系数法是一种评估聚类质量的方法它综合考虑了每个数据点在所属聚类簇内的紧密程度以及与其他聚类簇的分离程度。轮廓系数的值范围为[-1, 1]值越接近1表示聚类效果越好
轮廓系数的计算步骤
计算a(i)对于每个数据点 i计算其到同一聚类簇内其他点的平均距离 a(i)。计算b(i)计算数据点 i 到最近的其他聚类簇的所有点的平均距离 b(i)。
计算轮廓系数s(i)对于每个数据点 i其轮廓系数 s(i) 定义为
其中s(i) 接近1表示数据点 i 被很好地聚类接近0表示数据点 i 在两个聚类簇之间为负值则表示数据点 i 可能被错误地分配到当前聚类簇。 计算平均轮廓系数整个数据集的平均轮廓系数是所有数据点轮廓系数的均值用于评估整体聚类效果
代码示例
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs
from sklearn.metrics import silhouette_score# 生成模拟数据集
data_points, _ make_blobs(n_samples500, centers5, cluster_std0.8, random_state123)# 初始化用于存储轮廓系数的列表
avg_silhouette_scores []# 测试不同聚类数K的范围
k_values range(2, 12) # 从2到11
for k in k_values:# 对每个K值运行K-means聚类kmeans_model KMeans(n_clustersk, random_state123)cluster_labels kmeans_model.fit_predict(data_points)# 计算平均轮廓系数avg_score silhouette_score(data_points, cluster_labels)avg_silhouette_scores.append(avg_score)# 绘制平均轮廓系数与K值的关系图
plt.figure(figsize(10, 6))
plt.plot(k_values, avg_silhouette_scores, markers, linestyle-, colororange, linewidth2)
plt.title(Average Silhouette Score vs. Number of Clusters (K), fontsize14)
plt.xlabel(Number of Clusters (K), fontsize12)
plt.ylabel(Average Silhouette Score, fontsize12)
plt.xticks(k_values)
plt.grid(axisboth, linestyle--, alpha0.7)
plt.show()七·总结
K-means聚类算法是一种简单而强大的无监督学习方法广泛应用于各种数据挖掘任务中。通过理解其基本原理和收敛性我们可以更好地应用该算法。选择合适的K值是提高聚类效果的关键。肘部法则、轮廓系数和平均轮廓法等方法为我们提供了有效的工具来确定最佳的K值。在实际应用中建议结合多种方法和领域知识以获得最佳的聚类结果。