机器学习 - K - 中心聚类

摘要:K-中心聚类算法通过选取代表性中心点进行聚类,相比K-均值对异常值更具鲁棒性。其实现步骤包括初始化中心点、分配数据点和迭代更新中心点。使用Python的scikit-learn库可快速实现该算法,其中KMedoids类支持自定义距离度量。虽然算法计算效率较高且支持非欧氏距离,但对簇数k的选择敏感,且在高维数据上性能受限。通过可视化可直观展示聚类结果,中心点以红色叉号标记。

目录

[K - 中心聚类 - 算法](#K - 中心聚类 - 算法)

[Python 实现](#Python 实现)

示例

[K - 中心聚类 - 优势](#K - 中心聚类 - 优势)

[K - 中心聚类 - 劣势](#K - 中心聚类 - 劣势)


K - 中心聚类 - 算法

K - 中心聚类算法可总结如下:

  1. 初始化 k 个中心点 ------ 从数据集中随机选取 k 个数据点作为初始中心点。
  2. 将数据点分配至中心点 ------ 将每个数据点分配给距离其最近的中心点。
  3. 更新中心点 ------ 对于每个簇,选取能使该簇内所有其他数据点到其距离之和最小的数据点,将其设为新的中心点。
  4. 重复步骤 2 和步骤 3,直至算法收敛或达到最大迭代次数。

Python 实现

要在 Python 中实现 K - 中心聚类,我们可以使用 scikit-learn 库。该库提供了 KMedoids 类,可用于对数据集执行 K - 中心聚类。

首先,我们需要导入所需的库:

python 复制代码
from sklearn_extra.cluster import KMedoids
from sklearn.datasets import make_blobs
import matplotlib.pyplot as plt

接下来,我们使用 scikit-learn 库中的 make_blobs() 函数生成一个样本数据集:

python 复制代码
X, y = make_blobs(n_samples=500, centers=3, random_state=42)

此处,我们生成一个包含 500 个数据点 和 3 个簇的数据集。

接下来,我们初始化 KMedoids 类并拟合数据:

python 复制代码
kmedoids = KMedoids(n_clusters=3, random_state=42)
kmedoids.fit(X)

此处,我们将簇的数量设为 3,并使用random_state参数来确保结果的可复现性。

最后,我们可以利用散点图将聚类结果可视化:

python 复制代码
plt.figure(figsize=(7.5, 3.5))
plt.scatter(X[:, 0], X[:, 1], c=kmedoids.labels_, cmap='viridis')
plt.scatter(kmedoids.cluster_centers_[:, 0],
kmedoids.cluster_centers_[:, 1], marker='x', color='red')
plt.show()

示例

以下是基于 Python 的完整实现代码:

python 复制代码
from sklearn_extra.cluster import KMedoids
from sklearn.datasets import make_blobs
import matplotlib.pyplot as plt

# Generate sample data
X, y = make_blobs(n_samples=500, centers=3, random_state=42)

# Cluster the data using KMedoids
kmedoids = KMedoids(n_clusters=3, random_state=42)
kmedoids.fit(X)

# Plot the results
plt.figure(figsize=(7.5, 3.5))
plt.scatter(X[:, 0], X[:, 1], c=kmedoids.labels_, cmap='viridis')
plt.scatter(kmedoids.cluster_centers_[:, 0],
kmedoids.cluster_centers_[:, 1], marker='x', color='red')
plt.show()

输出

在此处,我们将数据点绘制成散点图,并根据其簇标签为数据点着色。同时,我们将中心点绘制成红色叉号。

K - 中心聚类 - 优势

K - 中心聚类算法的优势如下:

  1. 对异常值和噪声鲁棒性强 ------ 与 K - 均值聚类相比,K - 中心聚类对异常值和噪声的鲁棒性更强,因为它采用被称为中心点的代表性数据点来表征簇的中心。

  2. 可适配非欧氏距离度量 ------ K - 中心聚类能够兼容任意距离度量方式,包括曼哈顿距离、余弦相似度等非欧氏距离度量。

  3. 计算效率较高 ------ K - 中心聚类的计算复杂度为 \(O(k*n^2)\),低于 K - 均值聚类的计算复杂度。

K - 中心聚类 - 劣势

K - 中心聚类算法的劣势如下:

  1. 对簇数量 k 的选择敏感 ------ K - 中心聚类的性能表现会受簇数量 k 的选择影响,对 k 值的设定较为敏感。

  2. 不适用于高维数据 ------ K - 中心聚类在高维数据上的表现可能不佳,因为高维场景下的中心点选取过程会产生较高的计算开销。

相关推荐
Hello.Reader3 小时前
一个开源项目,让 AI 做逆向不再靠猜reverse-skill 架构解析与本地实战
人工智能·架构·开源
wespaul4 小时前
VeapAI 自然语言操作实战|第 05 篇:向量与召回——从知识条目到可检索资产
大数据·数据库·人工智能·milvus
mingbaiceping4 小时前
复旦-华盛顿大学EMBA:2026年AI课程矩阵解析
人工智能
李福春4 小时前
技术思考问题17:上了LangChain框架就等于AI-Agent工程化吗?
大数据·人工智能·langchain·深圳同盟·腾讯云架构师技术同盟·llm应用架构·编排抽象
揽秀亭长4 小时前
AIGC 检测原理拆解与论文降 AI 率的可复现处理流程(2026版)
人工智能·aigc
羞儿4 小时前
【DSH】为什么需要-Harness
人工智能·大模型·harness·认知构建
JackLam7 小时前
AI-安装ChatGpt Codex
人工智能
强哥聊算力7 小时前
《算力江湖·英伟达传奇》第七集:ChatGPT出现前夜,英伟达发生了什么?
服务器·人工智能·算法·ai·chatgpt·gpu算力
吴佳浩7 小时前
Run:ai 开源了,我把 GPU 编排摆回 AI 栈里看了一遍
人工智能
IT_Octopus9 小时前
【零基础入门 LLM 开发 · Day 13】:LangChain 的对话记忆——Message 对象版
人工智能·python·langchain