掘金 人工智能 2小时前
不同数据场景下的聚类算法
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文深入探讨了数据分析和机器学习领域中常用的聚类算法,包括原型聚类(如k-均值、学习向量量化、高斯混合聚类)、密度聚类(DBSCAN)和层次聚类(AGNES)。文章详细介绍了各种算法的原理、适用场景,并通过代码示例演示了如何使用这些算法,为读者提供了全面的聚类分析知识。

💡**原型聚类**:这类算法以“中心点”代表簇,其中k-均值聚类将数据划分为k个簇,通过迭代计算质心来优化聚类效果,适用于数据分布均匀的场景,如市场细分。学习向量量化(LVQ)使用原型向量代表每个簇,通过学习调整原型向量的位置来优化聚类,适用于数据点分布密集、簇边界清晰的场景。高斯混合聚类(GMM)假设数据由多个高斯分布混合生成,能够处理形状不规则的簇,如金融异常交易分析。

📐**密度聚类**:DBSCAN是一种基于密度的聚类算法,通过定义邻域半径和最小点数来识别簇,能够发现任意形状的簇并识别噪声点,适用于数据分布不均匀、簇形状复杂且存在噪声的场景,例如地理数据热点区域分析。

🌳**层次聚类**:AGNES是一种自底向上的层次聚类算法,从每个数据点作为一个单独的簇开始,逐步合并距离最近的簇,构建数据的层次结构,适用于需要逐步分析数据层次结构的场景,如生物分类学或文档聚类。

📊**聚类算法对比**:文章对比了K-Means、GMM、DBSCAN和AGNES等聚类算法的优缺点和典型应用场景,K-Means计算效率高,但需要预设K值;GMM能处理椭圆分布,但计算复杂度较高;DBSCAN能发现任意形状,但参数敏感;AGNES可以可视化层次结构,但计算复杂度较高,帮助读者选择合适的聚类方法。

在数据分析和机器学习领域,聚类是一种非常重要的无监督学习方法,它可以帮助我们发现数据中的内在结构,将相似的数据点分组到一起。

本文将介绍几种常见的聚类算法,包括原型聚类(如 k-均值、学习向量量化、高斯混合聚类)、密度聚类(DBSCAN)和层次聚类(AGNES)。

通过浅显易懂的方式介绍它们的原理,探讨它们的适用场景,并通过代码演示如何使用这些算法。

1. 原型聚类:以"中心点"代表群体

1.1. k-均值聚类

k-均值聚类K-Means Clustering)是一种非常直观的聚类方法。

它的目标是将数据划分为kk个簇,每个簇由一个**“中心点”**(质心)代表。

算法的步骤如下:

    随机选择kk个数据点作为初始质心。将每个数据点分配到最近的质心所在的。重新计算每个簇的质心(即簇内所有点的均值)。重复上述步骤,直到质心不再变化或达到预设的迭代次数。

k-均值聚类适用于数据分布较为均匀且簇形状较为规则的场景。

例如,对用户群体进行市场细分,或者对图像中的像素进行颜色聚类。

基于scikit-learn的代码示例如下:

import matplotlib.pyplot as pltfrom sklearn.cluster import KMeansfrom sklearn.datasets import make_blobs# 生成模拟数据X, _ = make_blobs(n_samples=300, centers=4, random_state=42)# 使用 KMeans 聚类kmeans = KMeans(n_clusters=4, random_state=42)kmeans.fit(X)labels = kmeans.labels_centroids = kmeans.cluster_centers_# 可视化结果plt.scatter(X[:, 0], X[:, 1], c=labels, cmap='viridis')plt.scatter(centroids[:, 0], centroids[:, 1], s=300, c='red', marker='X')plt.title("K-Means 聚类")plt.show()

1.2. 学习向量量化

LVQLearning Vector Quantization) 是一种受神经网络启发的聚类方法。

它使用一组**“原型向量”**来代表每个簇,算法通过迭代调整这些原型向量的位置,使其更接近属于该簇的数据点,远离其他簇的数据点。

LVQ核心思想是通过学习来优化原型向量的位置。

LVQ 适用于数据点分布较为密集且簇边界较为清晰的场景,它在图像识别模式分类中表现良好。

虽然scikit-learn没有直接提供 LVQ 的实现,但我们可以使用sklvq库来实现。

安装方式: pip install sklvq

代码示例如下:

from sklvq import GLVQ  # 使用 GLVQ(Generalized Learning Vector Quantization)from sklearn.datasets import make_blobsimport matplotlib.pyplot as plt# 生成模拟数据X, y = make_blobs(n_samples=300, centers=4, random_state=42)# 使用 GLVQ 聚类glvq = GLVQ(random_state=42)glvq.fit(X, y)# 获取聚类结果labels = glvq.predict(X)# 获取中心点(原型向量)prototypes = glvq.prototypes_# 可视化结果plt.scatter(X[:, 0], X[:, 1], c=labels, cmap="viridis")plt.scatter(    prototypes[:, 0], prototypes[:, 1], s=300, c="red", marker="X", label="Prototypes")plt.title("广义学习向量量化 (GLVQ)")plt.show()

1.3. 高斯混合聚类

高斯混合聚类Gaussian Mixture Clustering)假设数据是由多个高斯分布的混合生成的。

每个高斯分布代表一个,算法通过估计每个高斯分布的参数均值协方差矩阵权重)来确定簇的形状和位置。

高斯混合聚类比** k-均值**更灵活,因为它可以捕捉到簇的形状和大小的变化。

高斯混合聚类适用于簇形状不规则或数据分布较为复杂的情况。

例如,对金融数据中的异常交易进行聚类分析。

代码示例如下:

from sklearn.mixture import GaussianMixturefrom sklearn.datasets import make_blobsimport matplotlib.pyplot as plt# 生成模拟数据X, _ = make_blobs(n_samples=300, centers=4, random_state=42)# 使用高斯混合聚类gmm = GaussianMixture(n_components=4, random_state=42)gmm.fit(X)labels = gmm.predict(X)# 可视化结果plt.scatter(X[:, 0], X[:, 1], c=labels, cmap='viridis')plt.title("高斯混合聚类")plt.show()

2. 密度聚类:发现任意形状的簇

DBSCANDensity-Based Spatial Clustering of Applications with Noise)是一种基于密度的聚类算法。

它的核心思想是:如果一个点的邻域内有足够的点(即密度足够高),那么这些点可以被划分为同一个簇。

DBSCAN 使用两个参数:

DBSCAN的优点是可以发现任意形状的簇,并且能够识别噪声点。

DBSCAN适用于数据分布不均匀、簇形状复杂且存在噪声的场景。

例如,对地理数据中的热点区域进行分析。

代码示例如下:

from sklearn.cluster import DBSCANfrom sklearn.datasets import make_moonsimport matplotlib.pyplot as plt# 生成模拟数据X, _ = make_moons(n_samples=300, noise=0.05, random_state=42)# 使用 DBSCAN 聚类dbscan = DBSCAN(eps=0.2, min_samples=5)labels = dbscan.fit_predict(X)# 可视化结果plt.scatter(X[:, 0], X[:, 1], c=labels, cmap='viridis')plt.title("DBSCAN 聚类")plt.show()

3. 层次聚类:构建数据家族树

AGNESAgglomerative Nesting)是一种自底向上的层次聚类算法。

它从每个数据点作为一个单独的簇开始,然后逐步合并距离最近的簇,直到达到预设的簇数量或满足其他停止条件。

AGNES 的关键在于如何定义簇之间的距离,常见的方法包括单链接法全链接法平均链接法

AGNES 适用于需要逐步分析数据层次结构的场景,例如生物分类学或文档聚类。

代码示例如下:

from sklearn.cluster import AgglomerativeClusteringfrom sklearn.datasets import make_blobsimport matplotlib.pyplot as plt# 生成模拟数据X, _ = make_blobs(n_samples=300, centers=4, random_state=42)# 使用 AGNES 聚类agnes = AgglomerativeClustering(n_clusters=4)labels = agnes.fit_predict(X)# 可视化结果plt.scatter(X[:, 0], X[:, 1], c=labels, cmap='viridis')plt.title("AGNES 聚类")plt.show()

4. 聚类算法对比

常用的几种聚类算法的对比如下:

算法类型优点局限性典型应用场景
K-Means计算效率高需预设K值客户分群、图像压缩
GMM处理椭圆分布计算复杂度较高异常检测、语音识别
DBSCAN发现任意形状参数敏感地理数据、离群点检测
AGNES可视化层次结构计算复杂度O(n³)生物分类、文档聚类

5. 总结

聚类算法的选择取决于数据的特性、问题的需求以及对结果的解释性要求。

k-均值简单高效,但对簇形状有较强假设;DBSCAN 能够处理复杂形状和噪声;层次聚类则提供了数据的层次结构。

在实际应用中,我们通常需要尝试多种算法,并根据具体问题选择最适合的聚类方法。

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

聚类算法 K-Means DBSCAN AGNES 机器学习
相关文章