1. k-medoids聚类算法解析与MATLAB实现
在数据分析和机器学习领域,聚类算法一直扮演着重要角色。今天我要分享的是k-medoids这一经典聚类方法,以及如何在MATLAB中实现它。与大家熟悉的k-means不同,k-medoids选择实际数据点作为聚类中心(称为medoid),这使得算法对异常值具有更强的鲁棒性。
1.1 算法核心思想
k-medoids的基本思想很简单:将n个数据点划分为k个簇,每个簇由其medoid代表。medoid是簇中到其他所有点距离之和最小的那个点。这与k-means使用虚拟的几何中心(均值点)不同,k-medoids的聚类中心必须是数据集中的真实点。
这种设计带来了两个显著优势:
- 对噪声和异常值不敏感,因为medoid必须是实际存在的点
- 可以应用于任何能够定义距离度量的数据类型,而不仅限于数值型数据
1.2 与k-means的对比
虽然k-medoids和k-means都是基于划分的聚类方法,但它们在几个关键方面存在差异:
| 特性 | k-means | k-medoids |
|---|---|---|
| 中心点类型 | 虚拟均值点 | 实际数据点 |
| 对异常值敏感度 | 高 | 低 |
| 计算复杂度 | O(n) | O(n²) |
| 适用距离度量 | 欧氏距离为主 | 任意距离度量 |
| 收敛速度 | 快 | 慢 |
在实际应用中,当数据包含噪声或异常值时,k-medoids通常是更好的选择。然而,对于大型数据集,k-means的计算效率优势可能更为重要。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. MATLAB实现详解
现在让我们深入探讨如何在MATLAB中实现k-medoids算法。我将分步骤解析代码,并解释每个环节的设计考虑。
2.1 数据准备与导入
matlab复制% 导入数据,这里用鸢尾花数据集举例
load fisheriris;
X = meas(:,3:4); % 取花瓣长度和宽度两列
这里我们使用了MATLAB自带的鸢尾花数据集作为示例。选择花瓣长度和宽度两个特征是为了便于可视化展示聚类结果。在实际项目中,你可以通过以下方式导入自己的数据:
matlab复制% 从CSV文件导入数据
data = re
