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

相关推荐
石榴花专场9 分钟前
分类算法中one-vs-rest策略和one-vs-one 策略的区别是什么?
人工智能·python·机器学习·数据挖掘
不辉放弃16 分钟前
第一章:MySQL视图基础
python·mysql
hello_ejb317 分钟前
聊聊Spring AI Alibaba的FeiShuDocumentReader
人工智能·python·spring
深度学习lover17 分钟前
<数据集>小船识别数据集<目标检测>
人工智能·python·yolo·目标检测·计算机视觉·船舶识别
小杰love编程24 分钟前
下载pycharm遇到的问题及解决方法
python·pycharm·django·flask·开发软件
dme.27 分钟前
python爬虫复习
开发语言·爬虫·python
侦探已死48834 分钟前
Python 网络编程:TCP 与 UDP 协议详解及实战代码
网络·python·udp·学习笔记·tcp
Cachel wood39 分钟前
Mysql相关知识2:Mysql隔离级别、MVCC、锁
数据库·python·sql·mysql·中间件·数据分析·django
ccLianLian44 分钟前
Latex科研入门教程
python
_一条咸鱼_1 小时前
Python 语法之变量与常量详解(一)
人工智能·python·深度学习