wordpress软件网站主题wordpress增加专题
wordpress软件网站主题,wordpress增加专题,网站是否必须做可信网站认证,有代做医学统计图的网站吗基于随机森林递归特征消除#xff08;RF-RFE#xff09;结合BP神经网络的多变量回归预测MATLAB完整代码。代码包含数据生成、特征选择、BP建模及评估#xff0c;并添加了详细注释#xff0c;方便用户根据自身数据修改调整。
代码说明
数据准备#xff1a;生成含噪声的合成…基于随机森林递归特征消除RF-RFE结合BP神经网络的多变量回归预测MATLAB完整代码。代码包含数据生成、特征选择、BP建模及评估并添加了详细注释方便用户根据自身数据修改调整。代码说明数据准备生成含噪声的合成数据前两个特征有效并划分为训练/测试集。用户可替换为自己的数据文件如load(data.mat)。RF-RFE特征选择从全部特征开始每一步训练随机森林计算OOB误差和特征重要性。消除当前重要性最小的特征记录每一步的特征集和OOB误差。选择OOB误差最小的特征子集作为最优特征集。BP神经网络对选取的特征子集进行归一化。使用feedforwardnet构建单隐藏层BP网络采用LM算法训练。预测后反归一化得到最终预测值。评估与绘图计算决定系数R²、均方根误差RMSE、平均绝对误差MAE绘制预测对比图和散点图。%% RF-RFE-BP: 随机森林递归特征消除 BP神经网络回归预测% 功能多输入单输出回归预测% 步骤% 1. 加载/生成数据划分训练集与测试集% 2. RF-RFE特征选择利用随机森林的OOB误差评估特征重要性递归消除最不重要特征选择最优特征子集% 3. BP神经网络训练与预测% 4. 计算评估指标R², RMSE, MAE并绘图% 依赖工具箱Statistics and Machine Learning ToolboxTreeBagger、Deep Learning Toolboxfeedforwardnetclear;clc;close all;%% 1. 数据准备% 生成示例数据用户可替换为自己的数据rng(42);% 固定随机种子保证可重复n_samples500;% 样本数n_features10;% 原始特征数% 创建输入特征矩阵 X (500×10)Xrandn(n_samples,n_features);% 真实输出关系仅前两个特征有效其余为噪声Y3*X(:,1)2*X(:,2)0.5*randn(n_samples,1);% 单输出% 划分训练集 (70%) 和测试集 (30%)cvcvpartition(size(X,1),HoldOut,0.3);idxTraintraining(cv);idxTesttest(cv);XTrainX(idxTrain,:);YTrainY(idxTrain,:);XTestX(idxTest,:);YTestY(idxTest,:);fprintf(训练集样本数: %d\n,size(XTrain,1));fprintf(测试集样本数: %d\n,size(XTest,1));%% 2. RF-RFE 特征选择% 使用随机森林递归特征消除基于OOB误差选择最佳特征子集nTrees100;% 随机森林中决策树的数量num_featuressize(XTrain,2);% 原始特征总数% 初始化current_set1:num_features;% 当前特征索引集合从全部特征开始feature_sets{};% 保存每一步的特征索引perf_history[];% 保存每一步的OOB误差% 递归消除主循环while~isempty(current_set)% 保存当前特征集feature_sets{end1}current_set;% 提取当前特征子集X_subXTrain(:,current_set);% 训练随机森林回归模型rfTreeBagger(nTrees,X_sub,YTrain,...Method,regression,...OOBPrediction,on,...% 开启OOB预测以计算OOB误差OOBVarImp,on);% 开启OOB变量重要性% 获取OOB误差最终集成误差oob_mseoobError(rf,Mode,ensemble);oob_mseoob_mse(end);% 取最后一个值整体OOB误差perf_history(end1)oob_mse;% 如果只剩一个特征停止消除iflength(current_set)1break;end% 获取特征重要性OOB置换重要性imprf.OOBPermutedVarDeltaError;% 找出重要性最小的特征索引在当前子集中的位置[~,min_idx]min(imp);% 移除该特征从当前特征集中删除current_set(min_idx)[];end% 根据OOB误差选择最佳特征子集[best_oob,best_step]min(perf_history);best_featuresfeature_sets{best_step};fprintf(最优特征数量: %d\n,length(best_features));fprintf(最优特征索引: %s\n,mat2str(best_features));% 提取最优特征子集XTrain_selXTrain(:,best_features);XTest_selXTest(:,best_features);%% 3. BP神经网络建模与预测% 数据归一化BP对尺度敏感[X_train_norm,ps_input]mapminmax(XTrain_sel,0,1);% 输入归一化到[0,1]X_test_normmapminmax(apply,XTest_sel,ps_input);[Y_train_norm,ps_output]mapminmax(YTrain,0,1);Y_test_normmapminmax(apply,YTest,ps_output);% 创建BP网络hiddenLayerSize10;% 隐藏层神经元个数可调netfeedforwardnet(hiddenLayerSize,trainlm);% 使用LM算法训练net.trainParam.showWindowfalse;% 不显示训练窗口net.trainParam.epochs1000;% 最大迭代次数net.trainParam.goal1e-5;% 目标误差net.divideFcn;% 不使用自动数据划分已手动划分net.trainParam.max_fail10;% 最大验证失败次数% 训练网络[net,tr]train(net,X_train_norm,Y_train_norm);% 预测并反归一化YPred_train_normnet(X_train_norm);YPred_test_normnet(X_test_norm);YPred_trainmapminmax(reverse,YPred_train_norm,ps_output);YPred_testmapminmax(reverse,YPred_test_norm,ps_output);% 转换为行向量以便计算YPred_trainYPred_train;% 转为列向量与YTrain一致YPred_testYPred_test;%% 4. 模型评估% 计算训练集指标R2_train1-sum((YTrain-YPred_train).^2)/sum((YTrain-mean(YTrain)).^2);RMSE_trainsqrt(mean((YTrain-YPred_train).^2));MAE_trainmean(abs(YTrain-YPred_train));% 计算测试集指标R2_test1-sum((YTest-YPred_test).^2)/sum((YTest-mean(YTest)).^2);RMSE_testsqrt(mean((YTest-YPred_test).^2));MAE_testmean(abs(YTest-YPred_test));fprintf(\n 训练集结果 \n);fprintf(R² %.4f\n,R2_train);fprintf(RMSE %.4f\n,RMSE_train);fprintf(MAE %.4f\n,MAE_train);fprintf( 测试集结果 \n);fprintf(R² %.4f\n,R2_test);fprintf(RMSE %.4f\n,RMSE_test);fprintf(MAE %.4f\n,MAE_test);%% 5. 可视化% 测试集预测值与真实值对比折线图figure;plot(YTest,b-,LineWidth,1.5);hold on;plot(YPred_test,r--,LineWidth,1.5);legend(真实值,预测值);title(测试集预测结果对比);xlabel(样本序号);ylabel(输出值);grid on;% 测试集预测散点图figure;scatter(YTest,YPred_test,20,filled);hold on;plot([min(YTest),max(YTest)],[min(YTest),max(YTest)],r--,LineWidth,1.5);xlabel(真实值);ylabel(预测值);title(测试集预测散点图);grid on;axis equal;