常见的五种聚类算法总结

常见的聚类算法总结

1. K-Means 聚类

描述

K-Means 是一种迭代优化的聚类算法,它通过最小化样本点到质心的距离平方和来进行聚类。

思想

  • 随机选择 K 个初始质心。
  • 分配每个数据点到最近的质心,形成 K 个簇。
  • 重新计算每个簇的质心。
  • 重复上述步骤,直到质心不再变化或达到最大迭代次数。

代码例子

from sklearn.cluster import KMeans
import numpy as np

# 生成示例数据
X = np.array([[1, 2], [1, 4], [1, 0], 
              [10, 2], [10, 4], [10, 0]])

# 定义 KMeans 模型
kmeans = KMeans(n_clusters=2, random_state=0)

# 训练模型
kmeans.fit(X)

# 获取聚类结果
labels = kmeans.labels_
centroids = kmeans.cluster_centers_

print("聚类标签:", labels)
print("质心:", centroids)

2. 层次聚类 (Hierarchical Clustering)

描述

层次聚类是一种基于树状结构的聚类方法,分为自下而上(凝聚)和自上而下(分裂)两种。

思想

  • 自下而上:每个数据点开始为一个簇,不断合并最相似的簇,直到所有点合并为一个簇或达到预定的簇数。
  • 自上而下:开始时将所有数据点视为一个簇,不断拆分最不相似的簇,直到每个点为一个簇或达到预定的簇数。

代码例子

from sklearn.cluster import AgglomerativeClustering

# 定义层次聚类模型
hierarchical = AgglomerativeClustering(n_clusters=2)

# 训练模型
hierarchical.fit(X)

# 获取聚类结果
labels = hierarchical.labels_

print("聚类标签:", labels)

3. DBSCAN 聚类

描述

DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一种基于密度的聚类算法,能够发现任意形状的簇,同时识别噪声点。

思想

  • 选择一个样本点,如果在其 ε 邻域内的点数不少于 minPts,则将这些点视为一个簇的核心点。
  • 将核心点邻域内的点添加到该簇中,重复这个过程,直到簇不再增长。
  • 标记未分配到任何簇的点为噪声点。

代码例子

from sklearn.cluster import DBSCAN

# 定义 DBSCAN 模型
dbscan = DBSCAN(eps=3, min_samples=2)

# 生成示例数据
X = np.array([[1, 2], [2, 2], [2, 3],
              [8, 7], [8, 8], [25, 80]])

# 训练模型
dbscan.fit(X)

# 获取聚类结果
labels = dbscan.labels_

print("聚类标签:", labels)

4. 均值漂移 (Mean Shift) 聚类

描述

均值漂移是一种基于密度的聚类算法,通过不断移动数据点到高密度区域的中心,找到簇的质心。

思想

  • 对每个点,计算其在一定窗口(带宽)内的密度中心,将点移动到密度中心。
  • 重复上述过程,直到所有点都在其密度中心。
  • 将密度中心附近的点合并为一个簇。

代码例子

from sklearn.cluster import MeanShift
import numpy as np

# 生成示例数据
X = np.array([[1, 2], [2, 2], [2, 3],
              [8, 7], [8, 8], [25, 80]])

# 定义均值漂移模型
meanshift = MeanShift(bandwidth=2)

# 训练模型
meanshift.fit(X)

# 获取聚类结果
labels = meanshift.labels_
centroids = meanshift.cluster_centers_

print("聚类标签:", labels)
print("质心:", centroids)

5. 高斯混合模型 (Gaussian Mixture Model, GMM)

描述

高斯混合模型是一种基于概率模型的聚类方法,假设数据由多个高斯分布组成,通过期望最大化(EM)算法估计参数。

思想

  • 初始化每个高斯分布的参数。
  • E步:计算每个样本属于每个高斯分布的概率。
  • M步:根据概率更新高斯分布的参数。
  • 重复上述过程,直到参数收敛。

代码例子

from sklearn.mixture import GaussianMixture
import numpy as np

# 生成示例数据
X = np.array([[1, 2], [2, 2], [2, 3],
              [8, 7], [8, 8], [25, 80]])

# 定义高斯混合模型
gmm = GaussianMixture(n_components=2, random_state=0)

# 训练模型
gmm.fit(X)

# 获取聚类结果
labels = gmm.predict(X)
centroids = gmm.means_

print("聚类标签:", labels)
print("质心:", centroids)
### 聚类算法概述 聚类分析是一种无监督学习方法,旨在将数据集划分为若干组(簇),使得同一组内的对象具有较高的相似度,而不同组的对象差异较大。以下是五种常见聚类算法及其应用场景。 --- ### 1. K-Means 聚类 K-Means 是一种基于划分的聚类算法,目标是最小化簇内误差平方和 (WSS, Within-Cluster Sum of Squares)[^3]。该算法通过迭代优化质心位置来完成分组。 #### 实现方式 ```python from sklearn.cluster import KMeans import numpy as np data = np.random.rand(100, 2) # 随机生成二维数据 kmeans = KMeans(n_clusters=3).fit(data) labels = kmeans.labels_ centroids = kmeans.cluster_centers_ ``` #### 应用场景 适用于大规模数据集中的简单分区问题,例如客户细分、图像压缩等[^4]。 --- ### 2. 层次聚类 (Hierarchical Clustering) 层次聚类构建一棵树状结构表示数据之间的关系,可分为凝聚型(自底向上)和分裂型(自顶向下)。它不需要预先指定簇的数量。 #### 实现方式 ```python from scipy.cluster.hierarchy import dendrogram, linkage, fcluster import matplotlib.pyplot as plt Z = linkage(data, 'ward') # 使用 Ward 方法计算距离矩阵 plt.figure(figsize=(8, 4)) dendrogram(Z) clusters = fcluster(Z, t=3, criterion='maxclust') ``` #### 应用场景 适合用于基因表达数据分析、文档分类等领域,尤其当需要可视化层级关系时[^5]。 --- ### 3. DBSCAN 密度聚类 DBSCAN 基于密度定义簇,能够发现任意形状的簇并识别噪声点。它的核心概念包括 ε 半径邻域和最小样本数 MinPts。 #### 实现方式 ```python from sklearn.cluster import DBSCAN db = DBSCAN(eps=0.3, min_samples=10).fit(data) core_samples_mask = np.zeros_like(db.labels_, dtype=bool) core_samples_mask[db.core_sample_indices_] = True labels = db.labels_ ``` #### 应用场景 广泛应用于异常检测、地理空间数据分析以及处理含有噪声的数据集合[^6]。 --- ### 4. 谱聚类 (Spectral Clustering) 谱聚类利用图论的思想,通过对拉普拉斯矩阵特征分解找到最优分割方案。其主要步骤包括构造相似性图、标准化拉普拉斯矩阵求解前几大特征向量,并应用传统聚类技术如 K-Means 完成分割[^7]。 #### 实现方式 ```python from sklearn.cluster import SpectralClustering sc = SpectralClustering(n_clusters=3, affinity='nearest_neighbors').fit(data) labels = sc.labels_ ``` #### 应用场景 特别适合解决非凸形分布的数据集问题,在社交网络社区挖掘等方面表现优异[^8]。 --- ### 5. 高斯混合模型 (Gaussian Mixture Model, GMM) 高斯混合模型假设数据由多个正态分布组成,采用期望最大化算法估计参数。相比硬分配策略,GMM 提供软归属概率评估每个实例属于哪个簇的可能性。 #### 实现方式 ```python from sklearn.mixture import GaussianMixture gmm = GaussianMixture(n_components=3).fit(data) labels = gmm.predict(data) probabilities = gmm.predict_proba(data) ``` #### 应用场景 常被用来建模复杂多模式的概率分布情况下的金融风险预测或者生物医学信号处理等问题[^9]。 --- ### 总结表 | **算法名称** | **特点描述** | **典型用途** | |--------------------|--------------------------------------------------------------------------------------------------|---------------------------------------| | K-Means | 简单高效;需预设簇数量 | 图像分割、市场研究 | | 层次聚类 | 可视化清晰;无需提前设定簇数目 | 生物信息学 | | DBSCAN | 自动适应不规则形态;能标记离群点 | 地理信息系统 | | 谱聚类 | 处理复杂拓扑结构良好 | 社交媒体社群探测 | | 高斯混合模型 | 支持不确定性量化 | 数据降维 | ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PeterClerk

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值