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 算法对噪声和异常值不敏感,适用于小规模数据集和任意形状的簇,但计算复杂度较高。在实际应用中,需要根据具体问题选择合适的算法。

相关推荐
农夫山泉2号15 分钟前
【python】—conda新建python3.11的环境报错
python·conda·python3.11
ZHOU_WUYI1 小时前
Flask Docker Demo 项目指南
python·docker·flask
码上淘金6 小时前
【Python】Python常用控制结构详解:条件判断、遍历与循环控制
开发语言·python
Brilliant Nemo6 小时前
四、SpringMVC实战:构建高效表述层框架
开发语言·python
2301_787552876 小时前
console-chat-gpt开源程序是用于 AI Chat API 的 Python CLI
人工智能·python·gpt·开源·自动化
懵逼的小黑子6 小时前
Django 项目的 models 目录中,__init__.py 文件的作用
后端·python·django
Y3174297 小时前
Python Day23 学习
python·学习
Ai尚研修-贾莲7 小时前
Python语言在地球科学交叉领域中的应用——从数据可视化到常见数据分析方法的使用【实例操作】
python·信息可视化·数据分析·地球科学
qq_508576098 小时前
if __name__ == ‘__main__‘
python
学地理的小胖砸8 小时前
【Python 基础语法】
开发语言·python