网站建设的核心是,wordpress 更改模块位置,百度账号管理中心,爱站利用最大相关最小冗余mRMR算法对特征变量做特征重要性排序#xff0c;实现特征选择。
通过重要性排序图#xff0c;选择重要的特征变量#xff0c;以期实现数据降维的目的。
程序直接替换数据就可以用#xff0c;程序内有注释#xff0c;方便学习和使用。
程序语言为matla…利用最大相关最小冗余mRMR算法对特征变量做特征重要性排序实现特征选择。 通过重要性排序图选择重要的特征变量以期实现数据降维的目的。 程序直接替换数据就可以用程序内有注释方便学习和使用。 程序语言为matlab。做机器学习项目最怕遇到高维数据几百个特征一股脑塞进模型里训练慢不说效果还容易翻车。这时候就得靠特征选择来救场了今天咱们玩的这个mRMR最大相关最小冗余算法能帮咱挑出那些既重要又不重复的特征。先上核心代码替换你的数据直接就能跑function selected_features mRMR_feature_selection(X, y, num_features) % 输入参数 % X - 特征矩阵n_samples×n_features % y - 目标变量n_samples×1 % num_features - 要选择的特征数量 [n_samples, n_features] size(X); feature_set 1:n_features; selected_features []; % 计算每个特征与目标的互信息 mi_target zeros(1, n_features); for i 1:n_features mi_target(i) mut_info(X(:,i), y); end % 首轮选择互信息最大的特征 [~, first_feature] max(mi_target); selected_features [selected_features first_feature]; feature_set(feature_set first_feature) []; % 迭代选择后续特征 for k 2:num_features redundancy zeros(1, length(feature_set)); relevance mi_target(feature_set); % 计算候选特征与已选特征的冗余 for i 1:length(feature_set) candidate feature_set(i); sum_mi 0; for j selected_features sum_mi sum_mi mut_info(X(:,candidate), X(:,j)); end redundancy(i) sum_mi / length(selected_features); } % 计算mRMR得分 mrmr_score relevance - redundancy; % 选择得分最高的特征 [~, idx] max(mrmr_score); selected_features [selected_features feature_set(idx)]; feature_set(idx) []; end end function mi mut_info(x, y) % 计算两个变量的互信息 [joint_dist, ~, ~] histcounts2(x, y, 10); joint_dist joint_dist / sum(joint_dist(:)); marginal_x sum(joint_dist, 2); marginal_y sum(joint_dist, 1); mi 0; for i 1:size(joint_dist,1) for j 1:size(joint_dist,2) if joint_dist(i,j) 0 mi mi joint_dist(i,j) * log2(joint_dist(i,j)/(marginal_x(i)*marginal_y(j))); end end end end代码重点解析互信息计算部分用了直方图分箱histcounts2这里把连续变量离散化成10个区间。实际操作中如果特征是分类变量可以直接用原始类别计算。冗余度计算时取的是与已选特征互信息的平均值这个设计让算法更倾向于选择与已选特征差异大的候选特征。选择过程中不断更新候选集避免重复选择这个动态更新机制是mRMR的核心。可视化重要性排序% 假设运行完特征选择得到selected_features figure; barh(sort(mi_target(selected_features), descend)); xlabel(mRMR重要性得分); set(gca,yticklabel,feature_names(selected_features)); title(特征重要性排序);这个横向条形图越靠右的特征越重要建议在拐点位置类似肘部法则截断选择特征。比如前5个特征贡献了80%的重要性得分后面的就可以砍掉。避坑指南数据需要先做归一化特别是连续特征目标变量y如果是回归任务需要修改互信息计算方法特征数量较多时建议分批计算否则内存容易爆炸离散化分箱数不要超过样本量的平方根最后说个玄学经验用mRMR筛选后的特征再扔进随机森林跑一遍重要性两者结果取交集效果往往比单用某一种方法更稳。毕竟特征选择这事儿多算法交叉验证才靠谱嘛。