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

相关推荐
心情好的小球藻23 分钟前
Python应用进阶DAY9--类型注解Type Hinting
开发语言·python
都叫我大帅哥24 分钟前
LangChain加载HTML内容全攻略:从入门到精通
python·langchain
惜.己34 分钟前
使用python读取json数据,简单的处理成元组数组
开发语言·python·测试工具·json
都叫我大帅哥2 小时前
Python的Optional:让你的代码优雅处理“空值”危机
python
曾几何时`4 小时前
基于python和neo4j构建知识图谱医药问答系统
python·知识图谱·neo4j
写写闲篇儿6 小时前
Python+MongoDB高效开发组合
linux·python·mongodb
杭州杭州杭州7 小时前
Python笔记
开发语言·笔记·python
路人蛃9 小时前
通过国内扣子(Coze)搭建智能体并接入discord机器人
人工智能·python·ubuntu·ai·aigc·个人开发
qiqiqi(^_×)9 小时前
卡在“pycharm正在创建帮助程序目录”
ide·python·pycharm
Ching·10 小时前
esp32使用ESP-IDF在Linux下的升级步骤,和遇到的坑Traceback (most recent call last):,及解决
linux·python·esp32·esp_idf升级