Kmeans与KMedoids聚类对比以及python实现

在机器学习领域,聚类算法是一种常用的无监督学习方法,用于将数据集中的样本划分为若干个簇,使得同一簇内的样本尽可能相似,而不同簇之间的样本尽可能不同。K-Means 和 K-Medoids 是两种经典的聚类算法,它们都基于划分的思想,但在具体实现和应用场景上存在一些差异。

一、算法原理

1. K-Means:

  • 中心点选择: K-Means 算法通过计算簇内所有样本的均值来确定中心点(centroid)。

  • 距离度量: 通常使用欧氏距离来衡量样本与中心点之间的距离。

  • 迭代过程: 算法通过不断迭代更新中心点和样本所属簇,直到中心点不再变化或达到最大迭代次数。

2. K-Medoids:

  • 中心点选择: K-Medoids 算法从簇内选择一个实际存在的样本作为中心点(medoid)。

  • 距离度量: 可以使用任意距离度量方法,例如曼哈顿距离、欧氏距离等。

  • 迭代过程: 与 K-Means 类似,K-Medoids 也通过迭代更新中心点和样本所属簇,直到中心点不再变化或达到最大迭代次数。

二、异同点

特性 K-Means K-Medoids
中心点 虚拟点(均值) 实际存在的样本点
距离度量 通常使用欧氏距离 可以使用任意距离度量
对噪声和异常值的敏感性 敏感 不敏感
计算复杂度 较低 较高
适用场景 大规模数据集,簇形状为凸形 小规模数据集,簇形状任意

三、适用场景

K-Means:

  • 数据集规模较大,计算效率要求高。

  • 簇的形状为凸形,例如球形、椭圆形等。

  • 数据集中噪声和异常值较少。

K-Medoids:

  • 数据集规模较小,计算效率要求不高。

  • 簇的形状任意,例如非凸形、流形等。

  • 数据集中存在噪声和异常值。

四、Python 代码示例

K-Means:

复制代码
from sklearn.cluster import KMeans
import numpy as np

# 生成随机数据
X = np.random.rand(100, 2)

# 创建 KMeans 模型
kmeans = KMeans(n_clusters=3)

# 拟合模型
kmeans.fit(X)

# 获取聚类结果
labels = kmeans.labels_
centroids = kmeans.cluster_centers_

# 打印结果
print("Labels:", labels)
print("Centroids:", centroids)

K-Medoids:

复制代码
from sklearn_extra.cluster import KMedoids
import numpy as np

# 生成随机数据
X = np.random.rand(100, 2)

# 创建 KMedoids 模型
kmedoids = KMedoids(n_clusters=3)

# 拟合模型
kmedoids.fit(X)

# 获取聚类结果
labels = kmedoids.labels_
medoids = kmedoids.cluster_centers_

# 打印结果
print("Labels:", labels)
print("Medoids:", medoids)

五、总结

K-Means 和 K-Medoids 都是常用的聚类算法,它们各有优缺点,适用于不同的场景。K-Means 算法计算效率高,适用于大规模数据集和凸形簇,但对噪声和异常值敏感。K-Medoids 算法对噪声和异常值不敏感,适用于小规模数据集和任意形状的簇,但计算复杂度较高。在实际应用中,需要根据具体问题选择合适的算法。

相关推荐
好开心啊没烦恼12 分钟前
Python 数据分析:numpy,说人话,说说数组维度。听故事学知识点怎么这么容易?
开发语言·人工智能·python·数据挖掘·数据分析·numpy
面朝大海,春不暖,花不开25 分钟前
使用 Python 实现 ETL 流程:从文本文件提取到数据处理的全面指南
python·etl·原型模式
2301_805054562 小时前
Python训练营打卡Day59(2025.7.3)
开发语言·python
万千思绪2 小时前
【PyCharm 2025.1.2配置debug】
ide·python·pycharm
微风粼粼3 小时前
程序员在线接单
java·jvm·后端·python·eclipse·tomcat·dubbo
云天徽上4 小时前
【PaddleOCR】OCR表格识别数据集介绍,包含PubTabNet、好未来表格识别、WTW中文场景表格等数据,持续更新中......
python·ocr·文字识别·表格识别·paddleocr·pp-ocrv5
你怎么知道我是队长4 小时前
python-input内置函数
开发语言·python
叹一曲当时只道是寻常4 小时前
Python实现优雅的目录结构打印工具
python
hbwhmama5 小时前
python高级变量XIII
python
费弗里6 小时前
Python全栈应用开发利器Dash 3.x新版本介绍(3)
python·dash