1. 什么是k-medoids聚类算法?
第一次听说k-medoids这个词时,我也是一头雾水。后来在实际项目中用了几次才发现,这其实就是一种更"接地气"的聚类方法。想象一下你要在小区里开几家便利店,k-medoids就是帮你找出最适合开店的位置——这些位置必须是小区里真实存在的楼栋(我们称之为medoid),而不能是随便在地图上画个点。
和常见的k-means算法相比,k-medoids最大的特点就是它选的中心点必须是数据集中的真实样本。这就好比k-means可以在小区任何位置画圈开店,哪怕这个点在池塘中央;而k-medoids则必须选择现有楼栋作为店铺位置。这个特性让k-medoids对异常值特别"淡定",不会因为几个离群点就乱跑中心位置。
我去年处理过一个传感器网络数据,里面有不少噪声。用k-means时,聚类中心总被几个异常读数带偏;换成k-medoids后,效果立刻稳定多了。这也是为什么在现实数据往往不够"干净"的情况下,很多工程师更偏爱这个方法。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. k-medoids算法原理详解
2.1 算法运行流程
让我们拆解下k-medoids是怎么工作的。假设你要把100个客户分成5个群组:
- 开局随机选:先随便挑5个客户作为初始代表(medoids)
- 分配小弟:让其他95个客户各自加入离自己最近的代表所在的群组
- 重新选老大:在每个群组内部,找出那个到所有组员距离总和最小的客户,让他当新代表
- 判定结局:如果新代表和旧代表是同一个人,游戏结束;否则回到第2步
这个过程中最耗计算的就是第3步。我做过测试,在1000个数据点时,这一步要计算近百万次距离!所以实际使用时,对小数据集很友好,但数据量大时就得考虑优化了。
2.2 与k-means的核心差异
很多人容易混淆k-medoids和k-means,我整理了个对比表格:
| 特性 | k-means | k-medoids |
|---|---|---|
| 中心点性质 |
