首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
第一章:机器学习概述与Python基础
第二章:数据预处理与特征工程
第三章:监督学习基础
第四章:决策树与随机森林
第五章:支持向量机与核函数
第六章:逻辑回归与多层感知机
第七章:K近邻算法与协同过滤
第八章:聚类分析与层次聚类
第九章:主成分分析与因子分析
第十章:降维技术在机器学习中的应用
第十一章:实战一:手写数字识别
第十二章:实战二:情感分析
第十三章:实战三:新闻分类
第十四章:实战四:推荐系统
第十五章:实战五:股票预测
第十六章:实战六:图像识别
第十七章:实战七:文本生成
第十八章:实战八:异常检测
第十九章:实战九:语音识别
第二十章:实战十:自然语言处理
第二十一章:高级技巧一:Python机器学习库的比较与选择
第二十二章:高级技巧二:特征选择与特征提取
第二十三章:高级技巧三:模型评估与选择
第二十四章:高级技巧四:模型调优与超参数优化
第二十五章:高级技巧五:集成学习方法
第二十六章:高级技巧六:深度学习基础
第二十七章:高级技巧七:神经网络与卷积神经网络
第二十八章:高级技巧八:循环神经网络与长短期记忆网络
第二十九章:高级技巧九:强化学习基础
第三十章:高级技巧十:生成对抗网络
第三十一章:案例分析一:Python机器学习在金融领域的应用
第三十二章:案例分析二:Python机器学习在医疗领域的应用
第三十三章:案例分析三:Python机器学习在推荐系统中的应用
第三十四章:案例分析四:Python机器学习在图像识别中的应用
第三十五章:案例分析五:Python机器学习在自然语言处理中的应用
第三十六章:案例分析六:Python机器学习在语音识别中的应用
第三十七章:案例分析七:Python机器学习在自动驾驶中的应用
第三十八章:案例分析八:Python机器学习在智能家居中的应用
第三十九章:案例分析九:Python机器学习在游戏开发中的应用
第四十章:案例分析十:Python机器学习在物联网中的应用
第四十一章:扩展阅读一:Python机器学习经典书籍与资源
第四十二章:扩展阅读二:Python机器学习框架比较与选择
第四十三章:扩展阅读三:Python机器学习最佳实践
第四十四章:扩展阅读四:Python机器学习性能测试与调优
第四十五章:扩展阅读五:Python机器学习自动化测试与验证
第四十六章:扩展阅读六:Python机器学习代码审查与质量控制
第四十七章:扩展阅读七:Python机器学习持续集成与持续部署
第四十八章:扩展阅读八:Python机器学习开源项目与工具推荐
第四十九章:扩展阅读九:Python机器学习在移动设备上的应用
第五十章:扩展阅读十:从高级程序员到Python机器学习专家之路
第五十一章:高级技巧十一:Python机器学习中的高级特性与技巧
第五十二章:高级技巧十二:Python机器学习中的实时数据传输与同步
第五十三章:高级技巧十三:Python机器学习中的高级性能优化
第五十四章:高级技巧十四:Python机器学习中的内存优化策略
第五十五章:高级技巧十五:Python机器学习中的线程优化策略
第五十六章:高级技巧十六:Python机器学习中的性能瓶颈分析与优化
第五十七章:高级技巧十七:Python机器学习中的安全性与合规性
第五十八章:高级技巧十八:Python机器学习中的自动化测试与验证
当前位置:
首页>>
技术小册>>
Python机器学习实战
小册名称:Python机器学习实战
### 第八章:聚类分析与层次聚类 #### 引言 在机器学习的广阔领域中,聚类分析作为无监督学习的代表,扮演着至关重要的角色。它旨在将数据集中的样本划分为若干个组或“簇”,使得同一簇内的样本相似度较高,而不同簇之间的样本相似度较低。聚类分析不依赖于预定义的标签或类别,这使得它在探索性数据分析、市场细分、图像分割、社交网络分析等众多领域具有广泛的应用。本章将深入探讨聚类分析的基本概念、常用算法,并重点介绍层次聚类这一经典聚类方法,通过实例展示其在实际问题中的应用。 #### 8.1 聚类分析基础 ##### 8.1.1 聚类分析的定义与目的 聚类分析是一种将数据集中的对象分组为多个类或簇的过程,每个簇内的对象彼此相似,而不同簇之间的对象则差异较大。聚类分析的主要目的是发现数据中的潜在结构和模式,而不需要事先知道数据的类别标签。 ##### 8.1.2 聚类算法的分类 聚类算法可以根据不同的划分标准进行分类,常见的分类方式包括: - **基于划分的聚类**:如K-means算法,通过迭代将数据集划分为K个簇,使得簇内平方和最小。 - **基于层次的聚类**:如AGNES(自底向上的合并)和DIANA(自顶向下的分裂),通过构建层次结构来聚类数据。 - **基于密度的聚类**:如DBSCAN算法,根据样本的密度进行聚类,能够发现任意形状的簇。 - **基于网格的聚类**:如STING算法,将数据空间划分为网格单元,然后在网格单元上进行聚类。 - **基于模型的聚类**:如GMM(高斯混合模型),假设数据是由多个高斯分布生成的,通过估计这些分布的参数来聚类数据。 ##### 8.1.3 聚类质量的评估 评估聚类结果的好坏是聚类分析中的一个重要问题。常用的评估指标包括: - **轮廓系数**:结合了簇内紧密度和簇间分离度的概念,值越大表示聚类效果越好。 - **Calinski-Harabasz指数**:也称为方差比准则,通过计算簇内离散度与簇间离散度的比值来评估聚类效果。 - **Davies-Bouldin指数**:基于簇的分离度和相似度来评价聚类效果,值越小表示聚类效果越好。 #### 8.2 层次聚类算法详解 ##### 8.2.1 层次聚类概述 层次聚类算法通过构建一个层次结构来逐步合并或分裂数据集中的样本,从而形成最终的聚类结果。它分为凝聚的层次聚类和分裂的层次聚类两种。 - **凝聚的层次聚类**:从每个样本作为一个单独的簇开始,逐步合并最相似的簇,直到满足某个终止条件(如达到预设的簇数量或簇间相似度低于某个阈值)。 - **分裂的层次聚类**:将所有样本视为一个簇,然后逐步分裂成更小的簇,直到每个簇只包含一个样本或满足其他终止条件。 ##### 8.2.2 AGNES算法(自底向上的合并) AGNES(Agglomerative Nesting)是最典型的凝聚层次聚类算法之一。其算法流程如下: 1. **初始化**:将每个样本视为一个单独的簇。 2. **计算相似度**:计算所有簇对之间的相似度(常用距离作为不相似度的度量,如欧氏距离、曼哈顿距离等)。 3. **合并最相似的簇**:选择相似度最高的两个簇进行合并,形成一个新的簇。 4. **更新相似度矩阵**:重新计算新簇与其他簇之间的相似度。 5. **重复步骤3和4**:直到所有样本都被合并到一个簇中,或者满足其他终止条件(如达到预设的簇数量)。 ##### 8.2.3 层次聚类的优缺点 **优点**: - 不需要预先指定簇的数量。 - 能够发现数据中的层次结构。 - 可以通过可视化手段(如树状图)直观地展示聚类过程。 **缺点**: - 合并或分裂的决策一旦做出,就无法撤销,即不可逆性。 - 计算复杂度较高,特别是对于大数据集。 - 终止条件的选择可能影响聚类结果的质量。 #### 8.3 层次聚类实战 ##### 8.3.1 数据集准备 为了演示层次聚类的应用,我们将使用一个经典的数据集,如鸢尾花(Iris)数据集。该数据集包含150个样本,每个样本有4个特征(花萼长度、花萼宽度、花瓣长度、花瓣宽度),并属于三个不同的类别(Setosa、Versicolour、Virginica)。尽管这里我们知道数据的真实类别,但我们将忽略这些标签,仅使用特征进行聚类分析。 ##### 8.3.2 使用Scikit-learn实现层次聚类 在Python中,我们可以使用Scikit-learn库中的`AgglomerativeClustering`类来实现层次聚类。以下是一个简单的示例代码: ```python from sklearn.datasets import load_iris from sklearn.cluster import AgglomerativeClustering import matplotlib.pyplot as plt from sklearn.preprocessing import StandardScaler # 加载数据 iris = load_iris() X = iris.data # 数据标准化 scaler = StandardScaler() X_scaled = scaler.fit_transform(X) # 执行层次聚类 model = AgglomerativeClustering(n_clusters=3, affinity='euclidean', linkage='ward') labels = model.fit_predict(X_scaled) # 可视化结果 plt.scatter(X_scaled[:, 0], X_scaled[:, 1], c=labels, cmap='viridis', marker='o') plt.title('Agglomerative Clustering of Iris Dataset') plt.xlabel('Sepal Length (scaled)') plt.ylabel('Sepal Width (scaled)') plt.show() ``` 在上述代码中,我们首先加载了鸢尾花数据集,并对数据进行了标准化处理以消除不同特征之间的量纲影响。然后,我们使用`AgglomerativeClustering`类进行了层次聚类,指定了簇的数量为3(尽管我们事先知道类别数为3,但在实际应用中这通常是未知的),并选择了欧氏距离作为相似度度量,Ward方法作为簇间距离的计算方式。最后,我们通过散点图可视化了聚类结果。 ##### 8.3.3 结果分析与讨论 通过对比聚类结果与真实类别,我们可以评估层次聚类的效果。在理想情况下,聚类结果应与真实类别高度一致。然而,由于层次聚类是无监督学习方法,其聚类效果往往受到初始条件、相似度度量方式、簇间距离计算方法等多种因素的影响。因此,在实际应用中,我们可能需要尝试不同的参数组合,并结合领域知识来优化聚类结果。 #### 结论 本章详细介绍了聚类分析的基本概念、常用算法以及层次聚类算法(特别是AGNES算法)的原理和实现方法。通过实例展示了如何在Python中使用Scikit-learn库进行层次聚类分析,并讨论了聚类结果的评估与优化。层次聚类作为无监督学习领域中的一种重要技术,其在数据探索、模式识别等方面的应用价值不容忽视。随着数据科学和机器学习技术的不断发展,我们有理由相信,聚类分析将在更多领域发挥更大的作用。
上一篇:
第七章:K近邻算法与协同过滤
下一篇:
第九章:主成分分析与因子分析
该分类下的相关小册推荐:
Python与办公-玩转PPT
Python高并发编程与实战
Python合辑8-变量和运算符
Python爬虫入门与实战开发(下)
Python与办公-玩转Word
Python编程轻松进阶(五)
剑指Python(万变不离其宗)
Python合辑4-130个字符串操作示例
Python甚础Django与爬虫
Python合辑2-字符串常用方法
实战Python网络爬虫
Python合辑1-Python语言基础