基于matlab的特征选择也叫特征子集选择FSS,Feature Subset Selectio1↑特征Feature中选择N个特征使得系统的特定指标最优化。 向后搜索 SBS , Sequential Backward Selection)从特征全集0开始每次从特征集0中剔除一个特征x使得剔除特征x后评价函数值达到最优。 向前搜索 SFS, Sequential Forward Selection )特征子集X从空集开始每次选择一个特征x加入特征子集X使得特征函数J(X最优。 程序已调通可直接运行。特征选择这玩意儿就像在超市挑水果——总得找到最甜的那个组合。今天咱们唠唠Matlab里两种经典的暴力美学向后搜索(SBS)和向前搜索(SFS)。这两种方法本质上都是穷举法的改良版适合刚入门的特征工程小白练手。先准备点实验数据热热身。咱们用随机数造个虚拟数据集rng(42); % 固定随机种子 features randn(100, 5); % 100样本5特征 labels features(:,1)*3 features(:,3)*5 0.1*randn(100,1); % 目标函数这里故意让标签只依赖第1和第3个特征后面看算法能不能揪出真相。来看SBS的实现这货就像脱衣服一层层往下扒function selected sbs(features, labels, k) n_features size(features, 2); selected 1:n_features; % 初始全选 while length(selected) k worst_perf inf; for i 1:length(selected) temp_subset selected; temp_subset(i) []; % 尝试删除第i个 X features(:, temp_subset); perf corr(X, labels); % 简单用相关系数 current_perf mean(abs(perf)); % 评价函数 if current_perf worst_perf worst_perf current_perf; worst_idx i; end end selected(worst_idx) []; % 剔除最差 end end关键在每次循环都计算剔除每个特征后的效果。注意这里评价函数用了相关系数的均值实际工程中可能要换成互信息或者模型准确率。基于matlab的特征选择也叫特征子集选择FSS,Feature Subset Selectio1↑特征Feature中选择N个特征使得系统的特定指标最优化。 向后搜索 SBS , Sequential Backward Selection)从特征全集0开始每次从特征集0中剔除一个特征x使得剔除特征x后评价函数值达到最优。 向前搜索 SFS, Sequential Forward Selection )特征子集X从空集开始每次选择一个特征x加入特征子集X使得特征函数J(X最优。 程序已调通可直接运行。运行测试sbs_result sbs(features, labels, 2); disp(SBS选中的特征索引:); disp(sbs_result);正常情况下应该输出[1,3]也就是我们预设的重要特征。再瞅瞅SFS这货跟SBS相反像穿衣服一件件往上套function selected sfs(features, labels, k) n_features size(features, 2); selected []; % 初始空集 while length(selected) k best_perf -inf; for i 1:n_features if ismember(i, selected), continue; end temp_subset [selected, i]; X features(:, temp_subset); perf corr(X, labels); current_perf mean(abs(perf)); if current_perf best_perf best_perf current_perf; best_feature i; end end selected [selected, best_feature]; end end每次循环都在现有基础上尝试添加新特征。注意外层循环条件是达到目标特征数而SBS是降到目标数。实测结果sfs_result sfs(features, labels, 2); disp(SFS选中的特征索引:); disp(sfs_result);这里可能先选中第3个特征因为系数5比3大然后选第1个顺序和SBS相反但结果一致。几个工程细节要注意特征需要先做标准化特别是量纲差异大时评价函数别死磕相关系数试试互信息或wrap方法当特征数超过30时这俩方法会算到地老天荒...可以加提前终止条件比如连续3轮评价无改善最后说句大实话工业级项目里这俩方法基本被遗传算法或L1正则取代了但作为理解特征选择的基础SBS/SFS依然是教科书级的敲门砖。就像学车先学手动挡懂了原理再开自动挡才不慌。