数据挖掘技术与应用课程设计(五) —— AGNES聚类方法算法实例

一、设计目的

  1. 掌握层次聚类算法原理与实现
    深入理解AGNES算法的自底向上聚合策略,包括簇间距离计算(单链接、全链接、均值链接)的核心原理,并能通过代码实现算法核心逻辑(如距离矩阵更新、簇合并策略)。

  2. 探究不同距离度量对聚类结果的影响
    对比最小距离(单链接)、最大距离(全链接)、平均距离(均链接)等度量方式,分析其对簇结构松紧度和异常值敏感性的影响。例如,单链接易产生链式簇,全链接对噪声敏感。

  3. 实现动态可视化与过程分析
    结合Matplotlib动画框架,展示聚类合并的逐步过程,通过树状图(Dendrogram)和散点图直观反映簇间关系与层次结构。动态更新距离矩阵和簇标注,增强算法可解释性。

  4. 培养工程化实现与性能优化能力
    解决大规模数据下的时间复杂度(O(n²))和内存消耗问题,优化距离矩阵存储方式(如上三角矩阵压缩),并验证算法在不同数据集上的扩展性。

二、设计描述

下面给出一个样本书物数据库,如下表所示,并对它实施 AGNES 算法。

表   样本事务数据库

序号 属性 1 属性 2
1 1 1
2 1 2
3 2 1
4 2 2
5 3 4
6 3 5
7 4 4
8 4 5

在所给的数据集上运行 AGNES算法,算法的执行过程如下表所示,设 n=8,用户输入的终止条件为两个簇。初始簇为 {1},{2},{3},{4},{5},{6},{7},{8}(采用欧氏距离进行计算)。

表   AGNES算法执行过程

步骤 最近的簇距离 最近的两个簇 合并后的新簇
1 1 {1},{2} {1,2},{3},{4},{5},{6},{7},{8}
2 1 {3},{4} {1,2},{3,4},{5},{6},{7},{8}
3 1 {5},{6} {1,2},{3,4},{5,6},{7},{8}
4 1 {7},{8} {1,2},{3,4},{5,6},{7,8}
5 1 {1,2},{3,4} {1,2,3,4},{5,6},{7,8}
6 1 {5,6},{7,8} {1,2,3,4},{5,6,7,8}结束

具体步骤如下:

  1. 根据初始簇计算每个簇之间的距离,随机找出距离最小的两个簇,进行合并。点1、2间的欧氏距离 d(1,2)=[(1−1)2+(2−1)2]^1/2=1为最小距离,故将1、2点合并为一个簇。

  2. 对上一次合并后的簇计算簇间距离,找出距离最近的两个簇进行合并,合并后3、4点成为一簇。

  3. 重复第2步的工作,5、6点成为一簇。

  4. 重复第2步的工作,7、8点成为一簇。

  5. 合并{1, 2}, {3, 4}成为一个包含四个点的簇。

  6. 合并{5, 6}, {7, 8},由于合并后的簇的数目已经达到了终止条件,计算完毕。

三、设计过程

3.1 数据预处理

3.1.1 数据结构设计

  • Point类​:封装二维坐标、ID标识,实现欧氏距离计算(calc_distance方法)。
  • 簇存储结构​:使用字典管理簇,键为簇ID,值为点列表和颜色属性,支持动态合并与删除。

3.1.2 数据标准化与加载

  • 硬编码数据集​:包含8个二维点,初始每个点独立成簇。
  • 距离矩阵构建​:计算所有点对的欧氏距离,存储为对称矩阵以减少冗余计算。

3.2 算法设计逻辑

3.2.1 簇间距离计算策略

  • 单链接(最小距离)​​:dist_min函数取两簇最近点距离,适合发现链状簇但易受噪声干扰。
  • 全链接(最大距离)​​:dist_max函数取两簇最远点距离,生成紧凑簇但对异常值敏感。
  • 均链接​:计算两簇所有点对的平均距离,平衡单链接和全链接的优缺点。

3.2.2 簇合并与矩阵更新

  1. 查找最近簇​:遍历距离矩阵上三角,定位最小距离对应的簇索引。
  2. 合并操作​:
    • 生成新簇ID,合并两簇的点集。
    • 冻结原簇在矩阵中的行列(置为无穷大),避免重复计算。
  3. 矩阵更新​:
    • 新增行列存储新簇与其他簇的最小距离(单链接策略)。
    • 时间复杂度优化:仅更新必要部分,避免全矩阵重建。

3.3 核心模块实现

3.3.1 数据结构与初始化模块

class Point:
    def __init__(self, x:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小李独爱秋

你的鼓励将是我加更的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值