首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
1.1 为何选择机器学习
1.1.1 机器学习能够解决的问题
1.1.2 熟悉任务和数据
1.2 为何选择Python
1.3 scikit-learn
1.4 必要的库和工具
1.4.1 Jupyter Notebook
1.4.2 NumPy
1.4.3 SciPy
1.4.4 matplotlib
1.4.5 pandas
1.4.6 mglearn
1.5 Python 2 与Python 3 的对比
1.7 第 一个应用:鸢尾花分类
1.7.1 初识数据
1.7.2 衡量模型是否成功:训练数据与测试数据
1.7.3 要事第 一:观察数据
1.7.4 构建第 一个模型:k 近邻算法
1.7.5 做出预测
1.7.6 评估模型
2.1 分类与回归
2.2 泛化、过拟合与欠拟合
2.3 监督学习算法
2.3.1 一些样本数据集
2.3.2 k 近邻
2.3.3 线性模型
2.3.4 朴素贝叶斯分类器
2.3.5 决策树
2.3.6 决策树集成
2.3.7 核支持向量机
2.3.8 神经网络(深度学习)
2.4 分类器的不确定度估计
2.4.1 决策函数
2.4.2 预测概率
2.4.3 多分类问题的不确定度
3.1 无监督学习的类型
3.2 无监督学习的挑战
3.3 预处理与缩放
3.3.1 不同类型的预处理
3.3.2 应用数据变换
3.3.3 对训练数据和测试数据进行相同的缩放
3.3.4 预处理对监督学习的作用
3.4 降维、特征提取与流形学习
3.4.1 主成分分析
3.4.2 非负矩阵分解
3.4.3 用t-SNE 进行流形学习
3.5 聚类
3.5.1 k 均值聚类
3.5.2 凝聚聚类
3.5.3 DBSCAN
3.5.4 聚类算法的对比与评估
3.5.5 聚类方法小结
当前位置:
首页>>
技术小册>>
Python机器学习基础教程(上)
小册名称:Python机器学习基础教程(上)
### 3.5.4 聚类算法的对比与评估 在机器学习的广阔领域中,聚类分析作为一种无监督学习方法,扮演着至关重要的角色。它旨在将数据集中的样本划分为若干个类或簇,使得同一簇内的样本相似度较高,而不同簇间的样本相似度较低。由于聚类算法种类繁多,每种算法都有其独特的优势、适用场景及潜在的限制,因此在实际应用中,对聚类算法进行对比与评估显得尤为重要。本章将深入探讨几种常见的聚类算法,并介绍如何有效评估聚类效果,以便读者能够根据具体需求选择合适的聚类方法。 #### 3.5.4.1 常见聚类算法概述 **1. K-means聚类** K-means是最经典的聚类算法之一,它基于距离度量将数据划分为K个簇,使得每个点到其所属簇的质心(即簇内所有点的均值)的距离之和最小。K-means算法简单高效,适用于大规模数据集,但其对初始质心的选择敏感,且只能处理球形簇,对于非凸形状的簇效果不佳。 **2. 层次聚类** 层次聚类算法通过构建聚类树(树状图)来逐步合并或分裂簇。它可以是凝聚的(自底向上合并)或分裂的(自顶向下分裂)。层次聚类不需要预先指定簇的数量,但选择合适的停止条件或簇的数量较为困难,且计算复杂度较高。 **3. DBSCAN(基于密度的空间聚类应用噪声)** DBSCAN是一种基于密度的聚类算法,它根据样本的密集程度来划分簇,能够识别任意形状的簇,并能够有效处理噪声点。DBSCAN不需要预先指定簇的数量,但需要设定两个关键参数:邻域大小ε和最小点数MinPts,这两个参数的选择对聚类结果有直接影响。 **4. 谱聚类** 谱聚类是一种基于图论的聚类方法,它将数据点视为图中的顶点,数据点之间的相似度作为边的权重,通过图的分割来实现聚类。谱聚类能够发现任意形状的簇,且对噪声数据不敏感,但其计算复杂度较高,尤其是对于大规模数据集。 **5. 模糊C均值(Fuzzy C-Means, FCM)** 模糊C均值是传统K-means聚类的一种扩展,它允许每个数据点以一定的隶属度属于多个簇,从而更灵活地描述数据的模糊性。FCM在处理具有重叠区域的簇时表现优异,但计算复杂度较高,且需要指定模糊系数来平衡簇的清晰度和数据的模糊性。 #### 3.5.4.2 聚类算法的对比 **算法特性对比** - **K-means**:适合大规模数据集,计算效率高,但初始质心敏感,只能处理球形簇。 - **层次聚类**:无需预先指定簇数,但计算复杂度高,停止条件选择困难。 - **DBSCAN**:基于密度,能识别任意形状簇,处理噪声点能力强,但需选择合适的ε和MinPts。 - **谱聚类**:能发现任意形状簇,对噪声不敏感,但计算复杂度高,尤其适用于中小规模数据集。 - **FCM**:处理重叠簇效果好,但计算复杂度高,需设定模糊系数。 **适用场景对比** - 当数据集规模较大,且簇的形状大致为球形时,K-means是不错的选择。 - 若需逐步探索聚类结构,且不介意计算成本,层次聚类可提供灵活的解决方案。 - 数据集中存在复杂形状簇或噪声点时,DBSCAN表现出色。 - 对于需要高精度聚类且数据集规模适中的情况,谱聚类是一个强有力的工具。 - 数据集中存在重叠簇时,FCM能够提供更为细致的聚类结果。 #### 3.5.4.3 聚类效果的评估 聚类作为无监督学习方法,其效果评估比有监督学习更为复杂。通常,我们无法直接通过准确率等指标来衡量聚类的好坏,而是采用一系列内部和外部评估指标来综合考量。 **内部评估指标** - **轮廓系数(Silhouette Coefficient)**:结合了凝聚度和分离度两种因素,值越大表示聚类效果越好。 - **Calinski-Harabasz指数**:通过簇内方差与簇间方差之比来衡量聚类效果,值越大越好。 - **Davies-Bouldin指数**:基于簇的分离度和簇内紧密度,值越小表示聚类效果越好。 **外部评估指标** 当存在已知标签(即“真实”簇划分)时,可以使用外部评估指标来比较聚类结果与真实标签的一致性。 - **调整兰德指数(Adjusted Rand Index, ARI)**:衡量两个划分之间的相似度,值越大越好。 - **互信息(Mutual Information, MI)**:评估聚类结果与真实标签之间的共享信息量,通过归一化后的互信息(NMI)来消除聚类数量对结果的影响。 - **Fowlkes-Mallows指数**:基于精度和召回率的几何平均,衡量聚类结果与真实标签的一致性。 #### 3.5.4.4 实践建议 1. **数据预处理**:聚类前应进行必要的数据清洗、归一化等预处理工作,以消除异常值、量纲差异等对聚类结果的影响。 2. **算法选择**:根据数据集的特点(如规模、形状、噪声水平等)和具体需求(如是否需要指定簇数、对计算复杂度的要求等)选择合适的聚类算法。 3. **参数调优**:对于需要设置参数的聚类算法(如K-means的K值、DBSCAN的ε和MinPts),应通过交叉验证等方法来寻找最优参数。 4. **多算法对比**:尝试使用多种聚类算法对数据进行聚类,并通过内部和外部评估指标来比较不同算法的聚类效果,选择最适合当前任务的算法。 5. **结果解释**:聚类结果可能不是唯一的,且不一定完全符合实际情况。因此,在解释聚类结果时,应充分考虑数据的背景和聚类算法的局限性。 通过本章的学习,读者应能对常见的聚类算法有较为深入的理解,并掌握聚类效果的评估方法及实践中的注意事项,从而在实际应用中更加灵活地选择和应用聚类技术。
上一篇:
3.5.3 DBSCAN
下一篇:
3.5.5 聚类方法小结
该分类下的相关小册推荐:
Python合辑7-集合、列表与元组
Python面试指南
Python机器学习基础教程(下)
Python合辑11-闭包函数
Python数据分析与挖掘实战(上)
Python高并发编程与实战
Python爬虫入门与实战开发(下)
Python合辑10-函数
Python合辑8-变量和运算符
Python3网络爬虫开发实战(上)
Python数据分析与挖掘实战(下)
Python自动化办公实战