基于MATLAB的竞争学习型数据挖掘分类系统
项目简介
本项目是一个基于MATLAB环境开发的完整数据挖掘工具,核心算法基于无监督的竞争神经网络(Competitive Learning Neural Network)。该系统采用“胜者为王”(Winner-Take-All, WTA)策略,通过计算输入数据与神经元权重之间的欧几里得距离,动态调整获胜神经元的权重,从而实现对特征空间的自组织划分。
该代码是一个独立的脚本,集成了数据生成、预处理、核心训练算法、评估统计以及多维可视化展示等全套功能,适用于演示和研究聚类分析、向量量化及模式识别的基本原理。
功能特性
- 模拟数据生成:内置数据生成器,可自动生成包含三个簇的二维高斯分布数据,带有随机噪声。
- 数据预处理:实现了Min-Max归一化算法,将特征数据缩放至[0, 1]区间,消除量纲差异。
- 竞争学习算法:
* 支持自定义神经元数量(聚类中心数)。
* 实现了基于欧式距离的WTA竞争策略。
* 具备动态学习率调整机制,随迭代次数线性递减。
* 包含基于误差变化的自动收敛检测功能。
- 全流程可视化:提供包含四个子图的综合面板,分别展示误差曲线、决策边界、聚类结果及权重学习轨迹。
- 量化评估:输出每个类别的样本统计、原始中心点坐标及实际类内均值对比。
系统要求
- MATLAB R2016b 或更高版本。
- Statistics and Machine Learning Toolbox(用于部分统计和绘图函数,如
gscatter)。
使用方法
直接运行脚本主函数即可启动系统。程序将依次执行数据生成、预处理、网络训练、预测评估,最终弹出可视化窗口并在命令行窗口输出统计信息。
---
详细功能与实现逻辑
本项目按逻辑流程划分为六个主要功能模块,以下是各模块的具体实现细节:
1. 数据生成与预处理
程序首先通过设定固定的随机种子(
rng(42))来确保结果的可复现性。
- 数据合成:定义了3个真实的中心点坐标,以此为中心生成每簇150个样本的数据集,并叠加标准差为0.08的高斯噪声。
- 数据打乱:为避免训练顺序对网络造成偏差,对生成的数据集进行了随机全排列打乱。
- 归一化:计算特征维度的最大值和最小值,利用
(数据 - 最小值) / (最大值 - 最小值) 公式将所有样本映射到[0, 1]的标准空间。
2. 参数配置
算法设置了关键的超参数:
- 网络结构:设定竞争层神经元数量为3(对应3个聚类簇)。
- 训练控制:最大迭代次数设为100轮,初始学习率为0.5,收敛阈值为1e-6。
3. 网络初始化
为了避免“死神经元”问题(即某些神经元从未获胜,导致无法更新),代码采用了一种基于样本的初始化策略:从归一化后的数据集中随机抽取3个样本作为神经元的初始权重向量。同时,系统初始化了用于记录权重变化轨迹和误差曲线的存储矩阵。
4. 竞争学习核心算法(WTA策略)
这是系统的核心循环部分:
- 学习率衰减:在每一轮迭代(epoch)开始时,计算当前学习率。公式采用线性递减策略,随着迭代进行,学习率逐渐趋近于0,以保证训练后期的稳定性。
- 样本随机化:每轮迭代内部,再次随机重排样本的处理顺序。
- 胜者为王判别:
1. 计算当前输入样本与所有神经元权重向量之间的平方欧氏距离。
2. 找出距离最小的神经元作为“获胜者”(Winner)。
- 权重更新:仅对获胜的神经元进行权重更新。更新公式为:
新权重 = 旧权重 + 学习率 * (输入向量 - 旧权重)。这使得获胜神经元向当前输入样本的方向移动。 - 收敛检测:计算每轮的平均量化误差(MSE),若相邻两轮的误差变化小于预设阈值(epsilon),则提前终止训练。
5. 预测与评估
训练结束后,系统将权重从归一化空间反向映射回原始数据空间。
- 最终分类:遍历所有样本,将其归类到距离最近的最终权重(原型向量)所代表的类别中。
- 统计输出:计算并打印每个聚类的样本数量、算法学习到的中心点(原型向量)坐标以及该类样本的实际均值,以便用户评估聚类的准确性。
6. 全局可视化
代码会在一个新的图形窗口中绘制四个子图:
- 误差收敛曲线:展示平均量化误差随迭代次数下降的趋势,用于分析网络的收敛速度。
- 决策边界与分类区域:通过在整个特征空间生成网格点并计算其所属类别,绘制出等高线填充背景图,直观展示不同类别的决策边界(Voronoi图区域),同时叠加显示数据点。
- 聚类结果与原型中心:使用不同颜色标记分类后的样本点,并用醒目的标记(如黄色五角星或点)标出最终训练得到的神经元权重位置。
- 权重学习轨迹:在归一化空间内,绘制每个神经元从初始位置到最终位置的移动路径。起始点用圆圈标记,终点用叉号标记,清晰展现了算法寻找聚类中心的动态过程。