基于MeanShift算法的数据聚类及其中心点提取系统
项目介绍
本项目是一个在MATLAB环境下实现的自动化数据聚类与中心识别系统。系统采用非参数化估计方法,通过均值漂移(MeanShift)算法寻找多维数据空间中的局部密度极大值点。该系统能够有效处理各种复杂分布的数据,包括非球形分布和重叠分布,且无需预先指定聚类数量,能够自适应地发现数据形态。
功能特性
- 自动聚类识别:无需像K-means那样预设K值,系统根据数据自身的密度分布自动确定聚类数量。
- 高斯核加权:利用高斯核函数对邻域内的样本点进行加权平均,能够更平滑地收敛至密度中心。
- 高效矩阵计算:采用MATLAB平台特有的矩阵化编程手段(如bsxfun),显著提升了大规模数据点的迭代计算速度。
- 鲁棒的中心合并逻辑:提供后处理机制,对收敛位置极近的中心点进行合并,确保最终输出的聚类中心具有唯一性和代表性。
- 多维度可视化:实时生成聚类结果散点图,通过颜色区分不同类别,并突出显示最终提取的聚类中心。
使用方法
- 启动MATLAB软件。
- 将项目相关的脚本文件放置在当前工作路径下。
- 直接运行主程序脚本。
- 在命令窗口查看输出的聚类总数及各中心点坐标。
- 在弹出的图形窗口中观察原始样本分布、分类结果及聚类中心的标记效果。
系统要求
- MATLAB R2016b 或更高版本。
- 具备基本的数值计算和图形处理工具箱(通常为标准安装配置)。
核心实现逻辑
程序严格遵循以下计算流程:
1. 模拟数据环境构建
系统首先通过随机数生成器产生三个具有不同均值和协方差的高斯分布点集。共生成450个二维坐标点,为算法提供可验证的测试基准。
2. 预设参数体系
- Bandwidth (带宽):设置为1.0,决定了局部密度搜索的窗口大小。
- Stop Threshold (收敛阈值):设置为1e-4,控制单点迭代的精度。
- Merge Threshold (合并阈值):设置为0.5,用于判断两个收敛点是否属于同一个类中心。
- Max Iter (迭代上限):为每个点设置100次最大偏移尝试,防止复杂情况下陷入死循环。
3. 均值漂移迭代过程
- 距离计算:针对每一个样本点,使用bsxfun计算其与所有样本的欧氏距离平方。
- 核权重应用:应用高斯核公式
exp(-dist^2 / (2 * h^2))。为了提高效率,仅考虑3倍带宽范围内的点,其余点权重置零。 - 位置更新:计算加权平均中心位置,获取新的坐标偏移量。
- 收敛判定:比较新旧位置的偏移距离,若小于设定阈值或达到迭代上限,则停止移动并记录当前位置为该样本的汇聚点。
4. 聚类中心合并与标签分配
由于多个样本点可能汇聚到同一个局部极大值点,系统遍历所有汇聚后的坐标:
- 若当前汇聚点与已记录的中心点距离小于合并阈值,则将其归入该类。
- 若大于阈值,则将该汇聚点视为新的聚类中心,增加类别计数。
5. 结果展示与统计
- 控制台输出:打印检测到的类别总数以及每个类别的中心点精确坐标。
- 图形可视化:
* 使用
scatter 函数绘制半透明的样本点,用不同颜色代表不同簇。
* 使用
plot 函数配合大尺寸圆圈标记聚类中心。
* 利用
text 函数在中心点旁标注类别索引,并自动生成包含带宽参数的动态标题。
关键函数与算法分析
- bsxfun 优化:在计算点与空间的距离差及加权平均时,避开了显式的多层循环,大幅降低了计算开销。
- 非参数估计:算法核心不依赖于对数据分布类型的先验假设,这使得系统在处理非均匀分布的数据时具有极高的稳健性。
- 辅助转换逻辑:内部包含一个辅助函数用于将数值参数转换为字符串,确保在可视化标题生成时能够准确处理浮点型带宽数值。