基于MATLAB的四种典型聚类算法源代码及应用示例库
项目介绍
本项目是一个集成了四种主流聚类算法的MATLAB工具包,旨在为算法学习者、研究人员及工程师提供高质量的参考代码和实战范例。与调用现成工具箱不同,本项目中的核心算法(K-Means, FCM, 层次聚类, DBSCAN)均为原生代码实现,不依赖MATLAB的高级统计工具箱函数。这种底层实现方式有助于用户深入理解算法的数学原理和迭代过程。
项目通过一个主程序演示了从数据生成、算法配置、核心迭代到结果可视化的完整流程,适合作为高校课程设计、算法研究的基础素材,也支持用户替换数据集进行二次开发。
功能特性
- 核心算法原生实现:包含K-Means、模糊C均值(FCM)、凝聚层次聚类(Agglomerative Hierarchical)和基于密度的DBSCAN算法的完整底层源码。
- 模拟数据生成:内置数据生成模块,可自动生成包含多个高斯分布簇和随机噪声的二维测试数据,用于验证算法的鲁棒性。
- 多维度可视化:提供专门的可视化辅助函数,在一个窗口内通过四个子图对比不同算法的聚类效果,支持绘制簇颜色、噪声点(特定标记)及聚类中心。
- 算法评估指标:在可视化图表中直观展示了各算法的关键运行指标,如K-Means的迭代次数、FCM的收敛目标函数值、DBSCAN发现的簇数量等。
- 模块化设计:所有算法均封装为独立的子函数,输入输出接口定义清晰,便于移植和调试。
系统要求
- MATLAB R2016a 或更高版本(代码主要使用基础矩阵运算,兼容性较好)。
- 无需特殊工具箱(Statistics and Machine Learning Toolbox 非必须,因为算法均为手写实现)。
使用方法
- 将完整代码保存为
main.m文件。 - 在MATLAB命令窗口或编辑器中运行
main 函数。 - 程序将自动执行以下步骤:
* 初始化环境并固定随机种子。
* 生成包含三个主要簇和背景噪声的模拟数据集。
* 依次运行四种聚类算法。
* 弹出绘图窗口,展示四种算法的聚类结果对比图。
详细功能与实现逻辑
本项目的主程序 main.m 严格按照以下逻辑流程执行,集成了数据处理、算法计算与结果展示:
1. 数据准备
程序首先固定随机数种子(Seed=42)以确保结果可复现。接着生成模拟二维数据,数据由三部分组成:
- 簇1:以 (2,2) 为中心的正态分布数据。
- 簇2:以 (8,8) 为中心的正态分布数据。
- 簇3:以 (8,2) 为中心的正态分布数据。
- 噪声:叠加了少量的均匀分布随机噪声点。
2. 算法实现细节
A. K-Means 聚类 (my_kmeans)
1. 随机选择K个样本作为初始中心。
2. 计算每个样本到各个中心的距离,将其分配给最近的中心。
3. 记录误差平方和(SSE)作为目标函数。
4. 重新计算每个簇的平均值更新中心位置。
5. 若中心变化小于阈值或达到最大迭代次数则停止。
6. 处理空簇情况:如果某次迭代产生空簇,随机重新分配一个中心。
B. 模糊C均值聚类 FCM (my_fcm)
- 原理:基于隶属度的软聚类,样本可以属于多个簇。
- 逻辑:
1. 初始化隶属度矩阵U,并进行归一化。
2. 根据模糊因子
m=2.0 计算加权聚类中心。
3. 计算目标函数J(加权距离平方和)。
4. 根据距离更新隶属度矩阵U。
5. 当目标函数变化小于
epsilon 时收敛。
6. 最终取最大隶属度对应的类别作为硬聚类结果用于绘图。
C. 层次聚类 (my_hierarchical)
- 原理:自底向上的凝聚策略(Agglomerative)。
- 逻辑:
1. 初始化阶段,将每个样本视为一个独立的簇。
2. 计算全样本间的初始欧氏距离矩阵。
3.
合并策略:在循环中寻找距离最近的两个簇进行合并。
4.
距离度量:采用了
平均连接(Average Linkage)策略。代码中通过向量化计算两组点之间的所有配对距离的平均值,来更新簇与簇之间的距离矩阵。
5. 重复合并直到簇的数量降至预设值K。
6. 最终根据合并记录生成样本标签,并计算几何中心用于展示。
D. 基于密度的 DBSCAN (my_dbscan)
- 原理:基于核心点和密度直达关系的聚类,无需预设簇数,可识别噪声。
- 逻辑:
1. 计算全距离矩阵以加速邻域搜索。
2. 遍历每个点,若该点未被访问,则检查其
epsilon 半径内的邻居数量。
3. 若邻居数少于
minPts,暂时标记为噪声(-1)。
4. 若邻居数满足条件,创建一个新簇,并从该点开始进行
广度优先搜索(类似队列扩展),将密度可达的所有点加入当前簇。
5. 扩展过程中会修正之前误判为噪声的边界点。
6. 最终输出仅包含有效簇中心的结果(忽略噪声点)。
3. 可视化模块 (plot_clusters)
- 通用绘图函数,接收数据矩阵、标签索引和聚类中心。
- 根据标签数量自动生成配色方案。
- 特殊处理:能够识别标签中的
0 或 -1(通常代表噪声),并将其统一用黑色散点绘制,不应用彩色簇标记。 - 绘制聚类中心时使用 叉号(x)和圆圈(o)双重标记,增强视觉辨识度。