线性模糊支持向量机 (FSVM) MATLAB 实现项目
项目介绍
本项目提供了一个基于 MATLAB 的线性模糊支持向量机(Fuzzy Support Vector Machine, FSVM)的完整实现方案。传统的支持向量机(SVM)在面对包含噪声或离群点的数据时容易产生过拟合,且分类超平面易受异常值干扰。本项目通过引入模糊理论,为每个输入样本分配一个隶属度因子,从而在构建优化目标时动态调整不同样本对分类决策的影响力。隶属度较高的样本在模型训练中占主导地位,而离群点由于隶属度较低,其对超平面的偏移影响被显著抑制。该项目特别适用于处理数据质量参差不齐或存在异常值干扰的二分类任务。
功能特性
- 数据模拟与噪声生成:内置合成数据生成器,可创建线性可分的正态分布数据,并支持通过参数控制离群点(Outliers)的产生比例,用于验证算法的稳健性。
- 动态模糊隶属度计算:实现了基于类中心距离的隶属度分配算法。模型通过计算样本到所属类别均值中心的欧几里得距离,自动为样本赋予 [0.01, 1] 之间的权重。
- 二次规划求解器集成:利用 MATLAB 内置的优化工具箱求解 FSVM 的对偶问题。
- 参数化配置:允许用户自定义惩罚参数 C、每类样本数量以及人工噪声的比例。
- 多维度结果可视化:程序能够生成包含决策边界、间隔边界(Margin)、支持向量标记以及样本隶属度大小(通过散点大小映射)的综合统计图表。
核心功能实现逻辑
1. 实验环境初始化与数据构建
- 程序首先定义惩罚参数 C。
- 利用多重正态分布随机数生成两类样本数据。
- 引入异常点逻辑:将部分类别 1 的样本坐标替换为类别 2 区域附近的坐标,反之亦然。这种处理模拟了真实世界中常见的标注错误或监测误差。
2. 模糊隶属度分配策略
这是本算法区别于标准 SVM 的核心环节:
- 识别每类样本的中心点(均值)。
- 计算每个样本点到其所属类中心的欧氏距离。
- 隶属度映射:计算公式为 $s_i = 1 - d_i / (max(d) + delta)$。这意味着距离类中心越近的点,隶属度越高;距离越远(即越可能是噪声或离群点)的点,隶属度越低。
- 最终对隶属度进行线性缩放,确保其处于 [0.01, 1] 之间,防止权重过低导致样本信息完全丢失。
3. 对偶问题构造与求解
- 海森矩阵 (H) 构造:基于标签向量和样本特征矩阵的内积计算 H 矩阵,并添加微小的扰动(1e-9)以保证矩阵的正定性,从而提高数值计算的稳定性。
- 不等式约束映射:在 FSVM 中,每个拉格朗日乘子 $alpha_i$ 的上界不再是常数 C,而是受隶属度 $s_i$ 约束,即 $0 leq alpha_i leq s_i cdot C$。
- 等式约束:保持 $sum y_i alpha_i = 0$。
- 调用
quadprog 函数,使用内点法逻辑求解上述带约束的二次规划问题。
4. 模型参数提取与分类评价
- 权重向量 w:根据 $alpha$、标签 $y$ 和样本 $X$ 的线性组合计算。
- 偏置项 b:通过寻找处于边界约束内部的支持向量(即满足 $0 < alpha_i < s_i C$ 的点),利用 $y_i - w cdot x_i$ 的均值求得。
- 预测逻辑:通过计算测试样本在超平面上的投影得分并取符号函数,得出预测类别。
关键算法与细节分析
- 线性模型定位:程序采用线性核函数(即原始特征空间内的点积),这使得算法逻辑清晰,易于理解 FSVM 的数学本质。
- 支持向量筛选:代码严格定义了支持向量的阈值判定逻辑,区分了严格支持向量与落在间隔内的点。
- 鲁棒性控制:通过将隶属度 $s$ 作为参数嵌入到二次规划的
ub(Upper Bound)向量中,实现了对每个样本贡献度的精细化控制。离群点的 $alpha$ 被限制在很小的范围内,从而减小了它们对 $w$ 和 $b$ 的贡献。
系统要求
- 软件环境:MATLAB R2016b 或更高版本。
- 必要工具箱:
- Optimization Toolbox(用于执行
quadprog 函数)。
- Statistics and Machine Learning Toolbox(用于执行
mvnrnd 生成模拟数据)。
使用方法
- 打开 MATLAB 软件。
- 将程序文件所在的文件夹设置为当前工作路径。
- 在命令行窗口直接运行主程序脚本。
- 程序将自动弹出可视化窗口,展示分类结果、决策边界及支持向量,并同步在命令行输出训练报告(包括样本数、权重向量、偏置值及分类准确率)。