社区课程活动导航作者申请报告
CxHub客户体验社区-用户研究、体验爱好者学习交流社区,专注客户体验(CX)研究。
社交媒体
官方合作伙伴
联系我们
联系邮箱:longguofu1024@gmail.com
公司地址:深圳市宝安区华联城市全景 G 座1117
网站首页友情链接关于我们商务合作隐私政策
© 2025 CxHub | 粤ICP备18009813号-6
社区课程活动导航作者申请报告

基础聚类方法_K-Medoids聚类

基础聚类方法_K-Medoids聚类

基础认识

K-Medoids是一种基于中心的聚类算法,是K-Means的“兄弟”,又称Partitioning Around Medoids,简称PAM。

"Partitioning Around Medoids" 可以翻译成“围绕中心点的划分”或“基于质心的分区”。“Medoids”是指每个聚类类别中最典型或最具代表性的对象。

Medoids必须是原始数据集中真实存在的对象,类似于K-means算法中的中心点(centroid),但不像K-means那样计算出的平均值。

PAM算法通过迭代调整每个聚类的Medoids以及将数据点重新分配到最近的Medoid所属聚类中。

这对于异常值更加鲁棒,因为它不受单个远离中心点的数据点的影响。

鲁棒:常用于描述统计模型或算法对于数据中的离群值、噪声或偏差的抵抗能力。鲁棒的统计方法能够在数据存在异常时仍能提供可靠的结果。

意味着K-Medoids能够更好应对非凸形状的数据分布和含有异常值的情况,因为它使用的中心总是数据集中真实的数据点。

(图片仅为示例)

计算步骤

① 选择初始中心点:从数据集中随机选择K个对象作为初始中心点。

② 计算距离:计算每个对象与中心点的距离,将其分配到最近中心点所在的簇。

③ 更新中心点:对于每个簇,计算簇内所有对象的平均距离,选择距离最小的对象作为新中心点。

④ 重复步骤2与3,直至满足停止条件(如中心点变化小于设定阈值或达到最大迭代次数)。

(图片仅为示例)

前提条件

① 确定聚类数量k:需要预先设定聚类的数目k,可以通过肘部法则、领域知识等方法来确定。

详见《聚类分析如何“科学”确定聚类数?》

② 数据集准备:数据预处理,包括数据清洗、缺失值处理、标准化或归一化等。

③ 数据可量化:K-Medoids适用于数值型或类别型数据(经过编码),且数据集应该足够大。

④ 针对凸型数据:更适合于球形or凸形状的簇,因为是基于距离度量来计算簇之间的相似性。

(图片仅为示例)

优势

① 抗异常值干扰:由于选取的是实际数据点作为中心,因此对异常值不敏感。

② 分布适应性强:对于不规则形状的集群,K-Medoids较K-Means有更好的聚类效果。

③ 直观易解释:聚类中心是真实存在的数据点,便于理解和可视化。

劣势

① 对初始化敏感:如果初始的medoids选择不当,可能会陷入局部最优解。

② 计算成本较高:K-Medoids比K-Means算法更为复杂,尤其当数据规模增大时,计算效率较低。

实现工具

实现K-Medoids聚类的软件工具有R、Python。 

R:可以使用cluster包中的pam函数实现。

Python:可以使用pyclustering库进行。

代码实现

以R语言实现为例。

在R中,K-Medoids聚类算法的具体实现通常是通过pam()函数来完成,它会采用相同初始中心点和迭代停止条件,或使用了固定随机种子以确保结果的可重复性。

因此,如果在R中多次运行K-Medoids聚类算法,使用相同的初始条件和停止条件,通常情况下会得到相似or相同的结果。

(代码方案及结果可视化,采用肘部法则时聚类数为3降幅变缓)
(代码方案及结果可视化,样本被划分为三类)

样本被划分仅仅是研究工作的开始,需要把每个样本的聚类标签导出(生成一个新的文档),后续再进行相应的分析工作。

注意事项

由于初始中心点是随机选取的,采用默认的聚类算法包实现的聚类结果存在偶然偏差性,为提升聚类效果,可尝试以下方法:

① 使用不同的初始中心点初始化算法,可尝试多次运行以迭代到最好的结果(最常用方法)。

② 调整迭代停止条件,例如增加迭代次数或设置更严格的收敛条件。

③ 改变聚类数量,观察不同数量下的聚类效果。

④ 更换其他不依赖于初始状态选取的聚类算法,如DBSCAN 聚类等。

以方法1作为示例

(图一为系统默认选取初始中心点的聚类结果)
(图二为使用不同的初始medoids集合运行20次的聚类结果)

这段代码使用了pam()函数执行K-Medoids聚类算法。其中,参数k表示要分成的簇的数量,这里设置为3;参数nstart表示随机选择初始中心点的次数,这里设置为20。

在每次迭代中,pam()函数会随机选择不同的初始中心点,然后根据这些初始中心点进行聚类分析。通过多次迭代,可以得到多个不同的聚类结果。

在所有20次运行结束后,pam()函数会根据SSE(误差平方和)在所有运行中找到的最佳聚类结果,即数据点到其medoid的距离之和最小的聚类。

最后,这段代码会返回一个包含最佳聚类结果的对象kmed。 

应用场景

① 客户细分:最核心的应用场景。通过对客户数据进行聚类,识别不同的客户群体,进而进行策略制定。

② 市场趋势预测:通过对市场数据的聚类分析,发现市场中的潜在趋势和机会。

③ 其他的与大部分的聚类算法类似,不再一一描述。

拓展延伸

稍微提一下K-medians算法(每个簇中心点是其成员数据点在每个维度上的中位数),这种方法同样减少异常值的影响。但这种方法已经在K-means聚类的文章中有所提及,整体上三者原理类似,就不在后续文章中单独赘述。

END

基础聚类方法
数据指标
聚类算法
版权声明:本文为 CxHub 作者【 谭炜锋 】的原创文章,转载请联系作者。
该文观点仅代表作者本人,CxHub客户体验社区平台仅提供信息存储空间服务。
复制文本链接
谭炜锋
49文章
23读者
数据分析驱动用户研究
全部评论
热门
最新
请先登录后评价
关注作者,不错过精彩内容