基于MATLAB的正向云发生器与K均值聚类算法实现
项目介绍
本项目旨在提供一套完整的不确定性模拟与数据分类工具。通过结合云模型理论与聚类分析算法,实现了从定性概念到定量数据的映射,并对生成的模拟数据进行科学的无监督分类。项目核心价值在于演示了如何利用云模型的三个数字特征(期望、熵、超熵)产生具有模糊性和随机性的样本点,并进一步利用K-means算法对这些具有特定分布特征的数据进行识别和划分。
功能特性
- 高度可控的云滴生成:支持通过调整期望(Ex)、熵(En)和超熵(He)来精确控制模拟数据的中心位置、覆盖范围和离散程度。
- 纯内部函数实现:所有核心逻辑均采用手写代码实现,不依赖MATLAB额外的工具箱,方便学习算法底层逻辑。
- 完善的聚类机制:包含了随机初始化质心、类分配优化、质心更新以及针对空簇的异常处理机制。
- 直观的对比可视化:程序自动生成对比图表,上方展示正向云发生器的原始分布,下方展示K-means算法的实际聚类效果。
功能实现逻辑
程序运行流程严格遵循以下三个阶段:
第一阶段:正向云模型生成
程序首先定义了三组不同的云模型参数,分别代表不同性质的定性概念。通过循环调用云发生器逻辑,利用正态随机数发生器产生离散的云滴。每个云滴包含两个维度的特征:一个是定量数值(x坐标),另一个是代表该数值属于该概念的确定度(y坐标)。最终,三组共1200个云滴被整合进一个待处理的数据集。
第二阶段:K-means 聚类运算
数据构造完成后,程序进入聚类分析阶段。算法将每个云滴的[位置, 确定度]作为输入特征,设定聚类数目为3。算法启动后,首先在样本空间中随机选取初始质心,随后进入迭代优化环节:计算每个点到质心的欧氏距离并归类,接着根据各簇的成员更新质心位置。
第三阶段:结果可视化与验证
程序最后利用绘图引擎将两部分结果呈现在同一个窗口中:
- 原始分布图:展示按照生成逻辑划分的三个云簇,用于观察云模型的不确定性特征。
- 聚类结果图:展示经算法计算后的分类结果,并用明显的“X”标记出最终确定的聚类中心,方便用户对比算法分类的准确性。
关键算法及实现细节
正向云发生器算法
这是云模型从定性向定量转换的核心。程序通过以下数学步骤实现:
- 随机性模拟:首先生成以En(熵)为期望、He(超熵)为标准差的正态分布变量 En'。
- 数值生成:产生以Ex(期望)为中心、以生成的 En' 为标准差的具体数值 x。
- 隶属度计算:利用高斯隶属函数公式计算确定度 $mu = exp(-(x - Ex)^2 / (2 cdot En'^2))$。
这种机制确保了云滴既围绕期望值分布,又在边缘具有较高的模糊性。
K-means 聚类算法细节
- 距离度量:使用欧氏距离平方作为样本点与质心之间相似性的衡量标准。
- 收敛判据:程序会对比当前迭代与前一次迭代的分类标签,如果标签不再发生变化,则判定算法收敛并提前结束迭代。
- 健壮性处理:在更新质心阶段,程序包含了空簇保护机制。如果某个类别在迭代中没有分配到任何点,程序将随机从现有样本中选取一个点作为新的质心,防止计算中途崩。
- 复现性控制:代码开头显式设置了固定随机种子,确保用户每次运行看到的云滴分布和初始质心位置完全一致。
系统要求
- 软件环境:MATLAB R2016a 或更高版本(支持基础数学运算及绘图功能即可)。
- 硬件环境:无特殊配置要求,主流办公电脑均可流畅运行。
使用方法
- 打开 MATLAB 软件。
- 将包含主程序的脚本文件载入编辑器。
- 点击“运行”按钮或在命令行窗口输入主程序名称。
- 观察弹出的 Figure 窗口:
- 图1(上方)显示的是基于云模型理论生成的原始数据。
- 图2(下方)显示的是 K-means 算法对上述数据进行分类后的结果,不同颜色代表不同的预测类别。
- 查看命令行窗口输出,获取算法收敛的具体迭代次数。