专栏名称: 学姐带你玩AI
这里有人工智能前沿信息、算法技术交流、机器学习/深度学习经验分享、AI大赛解析、大厂大咖算法面试分享、人工智能论文技巧、AI环境工具库教程等……学姐带你玩转AI!
目录
相关文章推荐
Clinic門诊新视野  ·  郑刚教授:糖尿病动脉粥样硬化新出现的机制和作 ... ·  9 小时前  
医脉通临床指南  ·  2025 ECMM念珠菌病指南发布!来看诊断建议 ·  3 天前  
德大器械注册与临床  ·  【知识分享】医疗器械委托生产管理难点 ·  3 天前  
医学美图  ·  名称故事丨蚕豆病 ·  3 天前  
51好读  ›  专栏  ›  学姐带你玩AI

超强总结!十大聚类算法!附Python实现

学姐带你玩AI  · 公众号  ·  · 2025-01-22 18:01

正文

来源:投稿  作者:sunny
编辑:学姐

在数据科学领域,聚类分析是一种无监督学习方法,旨在将数据集划分为多个组或簇,使得同一簇内的数据点彼此相似,而不同簇间的数据点差异较大。

本文将详细介绍十大常用的聚类算法,阐述其基本原理,并提供相应的Python代码示例,帮助读者深入理解并实践这些算法。

1. K-means聚类

原理 :K-means算法是最常见的聚类算法之一,其目标是将数据点分组到K个簇中,使得簇内的点尽可能相似,而簇间的点尽可能不同。算法通过迭代优化簇中心的位置,以最小化簇内的平方误差总和。

步骤

  1. 随机选择K个数据点作为初始簇中心。
  2. 将每个数据点分配给最近的簇中心。
  3. 重新计算每个簇的中心(即簇内所有点的均值)。
  4. 重复步骤2和3,直到簇中心不再发生变化或达到预设的迭代次数。

Python代码

import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs

# 生成模拟数据
np.random.seed(0)
X, y = make_blobs(n_samples=300, centers=4, cluster_std=0.60, random_state=0)

# 应用K-means算法
kmeans = KMeans(n_clusters=4)
kmeans.fit(X)
y_kmeans = kmeans.predict(X)

# 绘制数据点和聚类中心
plt.scatter(X[:, 0], X[:, 1], c=y_kmeans, s=50, cmap='viridis')
centers = kmeans.cluster_centers_
plt.scatter(centers[:, 0], centers[:, 1], c='red', s=200, alpha=0.5)
plt.title("K-means Clustering")
plt.xlabel("Feature 1")
plt.ylabel("Feature 2")
plt.show()

2. 层次聚类

原理 :层次聚类通过构建数据点之间的层次结构来进行聚类,可以是自底向上的凝聚方法或自顶向下的分裂方法。凝聚型层次聚类从每个点作为单独的簇开始,逐渐合并最近的簇;分裂型则相反。

步骤 (以凝聚型为例):

  1. 将每个数据点视为一个单独的簇。
  2. 找到最相似的两个簇并将它们合并。
  3. 重复步骤2,直到所有数据点都合并到一个簇中或达到预定的簇数量。

Python代码

from scipy.cluster.hierarchy import dendrogram, linkage
import matplotlib.pyplot as plt

# 生成层次聚类的链接矩阵
Z = linkage(X, method='ward')

# 绘制树状图
plt.figure(figsize=(105))
plt.title('Hierarchical Clustering Dendrogram')
plt.xlabel('Sample index')
plt.ylabel('Distance')
dendrogram(Z)
plt.show()

3. DBSCAN(基于密度的空间聚类)

原理 :DBSCAN是一种基于密度的聚类算法,能够识别任意形状的簇,同时对噪声和离群点具有较好的鲁棒性。它不需要事先指定簇的数量,能有效处理异常点。

步骤

  1. 标记所有点为核心点、边界点或噪声点。
  2. 删除噪声点。
  3. 为剩余的核心点创建簇,如果一个核心点在另一个核心点的邻域内,则将它们放在同一个簇中。
  4. 将每个边界点分配给与之关联的核心点的簇。

Python代码

from sklearn.cluster import DBSCAN

# 应用DBSCAN算法
dbscan = DBSCAN(eps=0.5, min_samples=5)
clusters = dbscan.fit_predict(X)

# 绘制聚类结果
plt.scatter(X[:, 0], X[:, 1], c=clusters, cmap='viridis', marker='o', s=50)
plt.title("DBSCAN Clustering")
plt.xlabel("Feature 1")
plt.ylabel("Feature 2")
plt.show()

4. 谱聚类

原理 :谱聚类使用数据的相似性矩阵来进行聚类,特别适用于复杂形状的数据集。它首先将数据映射到一个图表示,然后基于图的拉普拉斯矩阵的特征向量进行聚类。

(由于谱聚类的实现相对复杂,且通常依赖于特定的库函数,此处不提供详细代码,但可查阅scikit-learn等库的文档了解实现方法。)

5. 高斯混合模型(GMM)

原理 :高斯混合模型是一种基于概率模型的聚类方法,适用于估计子群体的分布。它假设所有数据点都是从有限数量的高斯分布中生成的,每个高斯分布代表一个簇。

(GMM的实现同样依赖于库函数,如scikit-learn的GaussianMixture,此处不展示代码。)

6. 模糊C-means(FCM)

原理 :模糊C-means与K-means相似,但允许一个数据点属于多个簇,每个簇都有一定的隶属度或概率。它通过优化目标函数(通常是隶属度矩阵和簇中心的函数)来找到最佳簇划分。

(FCM的实现同样需要特定的库支持,如sklearn-fuzzy或pyfuzzy等,此处不展示代码。)

7. K-medoids

原理 :K-medoids与K-means类似,但使用数据点(medoids)而不是均值作为簇的中心。这使得K-medoids对噪声和异常值更加鲁棒。

(K-medoids的实现通常依赖于特定的库函数,如sklearn-extra等,此处不展示代码。)

8. Mean Shift

原理 :Mean Shift是一种基于密度的非参数聚类算法,通过迭代地更新候选簇中心点来寻找数据点密度最高的区域。它不需要事先指定簇的数量。

(Mean Shift的实现同样依赖于库函数,如scikit-learn的MeanShiftClustering,此处不展示代码。)

9. OPTICS(基于密度的聚类排序)

原理 :OPTICS是DBSCAN的一种扩展,能够处理不同密度的数据集。它通过构建一个可达性图来展示数据点的密度连接性,从而允许用户根据数据集的密度结构选择适当的簇划分。

(OPTICS的实现相对复杂,且通常依赖于特定的库函数,如sklearn-extra或pyclustering等,此处不展示代码。)

10. BIRCH(平衡迭代规约和聚类使用层次结构)

原理 :BIRCH是一种专为大型数据集设计的层次聚类方法。它使用特征树(CF Tree)来存储和概括数据,从而有效地减少内存使用和计算时间。

(BIRCH的实现依赖于特定的库函数,如sklearn-extra或pyclustering等,此处不展示代码。)

-- END --







请到「今天看啥」查看全文