基于最小互信息的向量特征选择与分类器优化系统
项目介绍
本项目是一套基于MATLAB开发的高效特征选择与分类优化工具。系统核心采用了最小冗余最大相关(mRMR, Minimum Redundancy Maximum Relevance)算法原理,利用信息论中的互信息指标来衡量特征的重要性及特征间的冗余度。
该系统通过内置的模拟数据生成模块,构建包含强相关、冗余和噪声的高维数据集,自动完成数据标准化和离散化处理,并执行mRMR特征选择算法筛选最优特征子集。最终,系统利用支持向量机(SVM)和K近邻(KNN)分类器,对比分析全特征集与优选特征集在分类性能上的差异,验证了降维算法在去除噪声、提升计算效率和保持模型精度方面的有效性。
功能特性
- 自动化数据集模拟:能够生成包含有效特征(强相关)、冗余特征(线性组合加噪声)和无关特征(纯高斯噪声)的高维模拟数据集,用于算法验证。
- 完整的数据预处理流程:
*
标准化:对连续数值进行Z-score标准化,适配SVM和KNN等对距离敏感的分类器。
*
离散化:基于直方图分箱法将连续特征转化为离散索引,以满足信息论熵值的计算需求。
- mRMR特征选择算法:实现了基于贪婪搜索策略的特征选择,权衡特征与标签的相关性以及特征之间的冗余性。
- 多模型对比评估:集成线性SVM和KNN(k=5)分类器,通过留出法(HoldOut)交叉验证评估模型表现。
- 多维评价指标:计算并输出准确率(Accuracy)、召回率(Recall)和F1-Score。
- 丰富的可视化展示:自动生成特征相关性分布图、mRMR优化得分曲线、性能对比柱状图以及混淆矩阵。
系统要求
- MATLAB R2018b 或更高版本
- Statistics and Machine Learning Toolbox(统计与机器学习工具箱)
使用方法
- 确保MATLAB路径中包含本项目脚本。
- 直接运行主函数
main。 - 系统将自动执行以下流程:生成数据 -> 预处理 -> 特征选择 -> 模型训练与测试 -> 绘图与结果打印。
- 运行结束后,屏幕将显示包含各项性能指标的文本报告,并弹出可视化窗口。
详细功能实现逻辑
该项目的 main 函数严格按照以下五个步骤执行:
1. 数据集构建与划分
程序首先固定随机数种子以保证结果可复现。随后调用数据生成函数创建一个400个样本、50维特征的数据集。这50维特征有着明确的结构设计:前5维与标签强相关,第6-10维是前5维的线性变换(冗余),剩余40维为纯噪声。数据按7:3的比例划分为训练集和测试集。
2. 数据预处理
- 标准化:计算训练集的均值和标准差,对训练集和测试集进行Z-score归一化。该数据用于后续SVM和KNN的训练与预测。
- 离散化:为了计算互信息,需要将连续特征转化为离散值。程序将所有特征划分为10个区间(Bins),将数值映射为1到10的整数索引。该数据专门用于mRMR算法计算。
3. mRMR 特征选择核心算法
这是系统的核心逻辑。程序设定目标选取的特征数量为10个,并执行以下贪婪搜索过程:
- 计算相关性(Relevance):遍历所有50个特征,分别计算每个特征与类别标签之间的互信息 $I(X_i; Y)$。
- 迭代搜索:在每一轮迭代中,评估所有未入选的候选特征。
- 计算冗余性(Redundancy):对于每个候选特征,计算其与当前已选特征集中所有特征的平均互信息。
- 互信息差值最大化:计算 $Score = Relevance - Redundancy$,选择该得分最高的特征加入优选集。
这一过程确保了选出的特征既能提供最多的分类信息,又在彼此之间保持最低的重复性。
4. 分类器构建与评估
系统分别针对“全特征集(50维)”和“优选特征集(10维)”构建分类方案:
- SVM分类器:使用线性核函数,不再次进行内部标准化(因预处理已完成)。
- KNN分类器:设置邻居数 $k=5$。
程序利用训练集拟合模型,并在测试集上进行预测,计算混淆矩阵并推导出准确率、召回率和F1分数。
5. 结果可视化与报告
系统会在控制台打印详细的对比表格。同时生成包含四个子图的图表:
- 特征相关性分布:展示所有特征与标签的互信息,并用红色高亮被选中的特征(预期应主要命中前5个特征)。
- mRMR得分曲线:展示特征选择过程中优化得分的变化趋势。
- 性能对比图:直观对比SVM和KNN在特征选择前后的准确率差异。
- 混淆矩阵:展示基于优选特征训练的SVM模型在测试集上的分类混淆情况。
关键算法与技术细节
信息熵与互信息计算
代码中未直接调用工具箱函数,而是手动实现了信息论基础计算:
- 香农熵 (Entropy):基于概率分布 $P(x)$ 计算 $-sum P(x) log_2 P(x)$。
- 互信息 (Mutual Information):利用公式 $I(X;Y) = H(X) + H(Y) - H(X,Y)$。
- 联合熵处理:为了计算 $H(X,Y)$,代码通过组合两个向量并查找唯一行(Unique Rows)的方式来构建联合概率分布。
特征生成策略
数据生成函数
generate_synthetic_data 明确模拟了真实世界数据的复杂性:
- 强相关特征:直接由标签 $Y$ 加上噪声生成。
- 冗余特征:由强相关特征线性变换并加噪声生成,用于测试算法去除冗余的能力。
- 噪声特征:完全随机的高斯分布,用于测试算法的抗噪能力。
评估指标计算
calculate_metrics 函数基于混淆矩阵能够处理二分类问题。它显式地提取真阳性(TP)、真阴性(TN)、假阳性(FP)和假阴性(FN),从而精确计算各项分类指标,并在出现分母为零时进行了数值稳定性处理(epsilon)。