news 2026/6/15 15:09:25

基于分位数随机森林预测模型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/6/15 13:10:27

太强了!SpringBoot + QLExpress打造动态规则引擎!

作为一名后端开发,你是否遇到过这样的场景: 运营同学说:"双11活动规则临时调整,满300减60改成满200减50,能马上上线吗?" 产品经理说:"风控策略需要微调一下,这个规则…

作者头像 李华
网站建设 2026/6/15 14:38:01

基于Arduino智能家居环境监测系统

3 系统需求分析 3.1 可行性分析 3.1.1 技术可行性 分析实现基于 Arduino 智能家居环境监测系统所需技术是否成熟、可获取。比如 Arduino 平台开源且资料丰富,有大量现成的函数库可调用,像读取传感器数据、控制执行设备等功能都有成熟实现方式&#xf…

作者头像 李华
网站建设 2026/6/15 14:01:36

失落的乡土:《阿凡达》与《乡土中国》的跨时空深度对话

失落的乡土:《阿凡达》与《乡土中国》的跨时空深度对话 在詹姆斯卡梅隆的《阿凡达》中,潘多拉星球上那片荧光闪烁、万物互联的雨林,常被视作一个纯粹的幻想乌托邦。然而,若将这部科幻巨制与费孝通先生1947年写就的社会学经典《乡…

作者头像 李华
网站建设 2026/6/10 21:15:40

解锁飞行焊接:电芯顶盖封口的高效与精准密码

飞行焊接技术原理剖析 在电芯顶盖封口工艺的不断演进中,飞行焊接技术崭露头角,成为提升生产效率与焊接质量的关键力量。飞行焊接,又称激光飞行焊接(Laser Fly Welding),其核心在于打破了传统逐点焊接的效率瓶颈,实现了 “边移动边焊接” 的创新模式。 传统的焊接方式,…

作者头像 李华
网站建设 2026/6/10 16:19:32

Python+hadoop+spark商品数据分析及预测系统 机器学习 预测算法预测销量

1、项目介绍 技术栈:python语言、Django框架、Echarts可视化、机器学习随机森林预测算法预测销量、爬虫、HTML Python 商品数据分析及预测系统介绍 本 Python 商品数据分析及预测系统,以 Python 语言为开发核心,依托 Django 框架搭建稳定后端…

作者头像 李华