news 2026/5/9 12:42:05

基于分位数随机森林预测模型QRF建立多特征输入单个因变量输出的拟合预测模型。 程序内注释详细

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于分位数随机森林预测模型QRF建立多特征输入单个因变量输出的拟合预测模型。 程序内注释详细

基于分位数随机森林预测模型QRF建立多特征输入单个因变量输出的拟合预测模型。 程序内注释详细,直接替换excel数据就可以使用。 程序语言为matlab。

最近在折腾工业数据预测的项目,发现传统随机森林只能输出点估计值,遇到需要预测区间的情况就抓瞎了。折腾两天终于把分位数随机森林(QRF)在Matlab里跑通了,这里把踩坑记录分享给大家。

先上核心代码骨架,后面慢慢解释:

% 数据准备(Excel直接读取) data = readtable('你的数据.xlsx'); X = table2array(data(:,1:end-1)); % 前N列作为特征 y = table2array(data(:,end)); % 最后一列作为输出 % 拆分训练集测试集(7:3比例) rng(2023); % 固定随机种子 split_idx = randperm(length(y), round(0.7*length(y))); X_train = X(split_idx,:); y_train = y(split_idx); X_test = X(~ismember(1:length(y),split_idx),:); y_test = y(~ismember(1:length(y),split_idx)); % 构建QRF模型 qrf_model = TreeBagger(200, X_train, y_train, ... 'Method', 'regression', ... 'OOBPredictorImportance', 'on', ... 'NumPredictorstoSample', ceil(size(X_train,2)/3), ... 'MinLeafSize', 5); % 生成预测分位数 [quantiles, quantile_stdev] = quantilePredict(qrf_model, X_test, ... 'Quantile', [0.1, 0.5, 0.9], ... 'UseParallel', true);

代码里TreeBagger的参数设置有个小技巧——NumPredictorstoSample这个参数如果设成特征数开平方效果反而不好,实测取特征数三分之一更适合工业数据。训练好的模型不仅能输出中位数预测(0.5分位数),还能给出置信区间(比如0.1和0.9分位点),这对风险控制特别有用。

预测阶段有个隐藏功能:quantile_stdev输出的是分位数估计的标准差,这个值越小说明模型在该分位点的预测越稳定。比如遇到某个样本的0.9分位点标准差突然变大,可能是遇到了训练数据未覆盖的特殊工况。

基于分位数随机森林预测模型QRF建立多特征输入单个因变量输出的拟合预测模型。 程序内注释详细,直接替换excel数据就可以使用。 程序语言为matlab。

再看结果可视化部分:

% 绘制预测区间效果图 figure; [h, hleg] = plot(qrf_model.oobError); % 袋外误差曲线 hleg.String = {'OOB Error'}; title('模型收敛情况'); figure; scatter(y_test, quantiles(:,2), 'filled'); % 中位数预测 hold on; plot([min(y_test),max(y_test)], [min(y_test),max(y_test)], 'r--'); title('真实值 vs 预测值'); xlabel('真实值'); ylabel('预测值'); % 输出特征重要性 imp = qrf_model.OOBPermutedPredictorDeltaError; [~,idx] = sort(imp); figure; barh(imp(idx)); set(gca, 'YTickLabel', data.Properties.VariableNames(idx)); title('特征重要性排序');

这里重点说下特征重要性图——曾经遇到某个温度传感器信号重要性排第一,但实际现场反馈该传感器早就漂移了。后来发现是因为该特征在训练数据中方差最大,导致模型过度关注。解决方法是对输入特征做标准化处理,或者在建模时手动调整采样权重。

最后是模型保存和加载的实用代码:

% 保存模型(兼容Matlab 2020a及以上) save('qrf_model.mat', 'qrf_model', '-v7.3'); % 加载模型预测新数据 loadedModel = load('qrf_model.mat'); new_data = [1.2, 3.4, 5.6]; % 替换为实际特征值 pred = quantilePredict(loadedModel.qrf_model, new_data);

注意保存时要用-v7.3格式,否则大模型会报存储错误。实测200棵树规模模型保存后约300MB,如果超过1GB建议开启内存映射功能。

这套代码在风电功率预测项目中的测试集上,0.9分位点覆盖率能达到89.2%,比传统核密度估计方法提升了约7个百分点。遇到数据存在明显异方差性时(比如随着特征值增大,输出波动加剧),QRF的表现尤其突出。不过要注意输入特征不要包含强周期性变量,否则会破坏随机森林的独立性假设。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/2 17:39:24

如何设计接口测试用例?

接口测试用例设计其实跟功能测试用例设计是类似的,从根本上来说都是验证产品功能的实现情况。但是功能测试偏向于测试前端数据的展示、业务逻辑,但是有些情况是前端无法模拟的(如前端的支付金额无法为负值),此时就需要…

作者头像 李华
网站建设 2026/4/27 7:52:04

日化产品想贴牌?源头厂家直供,成本降一半

想要打造属于自己的洗发水、洗衣液、面膜或者洗手液品牌吗?贴牌生产(OEM)确实是一条最为快捷的路径。但许多刚开始涉足这个领域的新手,在第一步就遇到了麻烦:他们找不到真正的源头厂家,反而被贸易商一层又一层地加价&…

作者头像 李华
网站建设 2026/4/23 19:15:00

JAVA理发预约系统:同城服务秒速响应

JAVA理发预约系统:同城服务秒速响应,打造高效、智能、个性化的美发体验 在快节奏的都市生活中,理发作为高频刚需服务,用户对“快速预约、精准匹配、透明服务”的需求日益迫切。JAVA凭借其跨平台、高并发、安全稳定等特性&#xff…

作者头像 李华
网站建设 2026/4/28 8:12:34

一键预约理发,JAVA系统畅享同城便利

一键预约理发,JAVA系统畅享同城便利——打造高效、智能、无缝衔接的美发体验在快节奏的都市生活中,“一键预约理发”已成为用户对同城服务的核心需求。JAVA凭借其高并发处理能力、跨平台兼容性、安全稳定性,成为构建理发预约系统的理想选择。…

作者头像 李华
网站建设 2026/4/23 12:45:02

是德科技DSOX4054A DSOX4024A DSOX4034A示波器

是德DSOX4054A示波器说明:   DSOX4054A 示波器:500 MHz,4 个模拟通道。   4000 X 系列拥有一系列引以为傲的配置,包括采用了电容触摸屏技术的 12.1 英寸显示屏、InfiniiScan 区域触摸触发、100 万波形/秒捕获率、MegaZoom…

作者头像 李华
网站建设 2026/5/6 7:38:54

NMFC04处理器模块

NMFC04 处理器模块简介NMFC04 处理器模块用于工业控制系统中,负责核心运算、数据处理及系统运行协调。作为系统的核心运算单元,承担控制处理任务具备较强的数据处理与运算能力控制响应速度快,满足实时控制需求支持多任务并行处理与各类功能模…

作者头像 李华