核心内容摘要
【数据亲测】商业IP库在广告ab测试中的roi提升效果分析
LSTM长短期记忆神经网络分位数回归多输入单输出Matlab
输入多个特征输出单个特征分位数回归区间预测
运行环境matlab2020b 所有程序经过验证保证有效运行。
直接上干货。
咱们今天聊点硬核的——用Matlab搞LSTM分位数回归做多变量区间预测。
这玩意儿在电力负荷预测、股票波动率估计这些需要风险预警的场景特实用毕竟光预测个平均值没劲得知道预测结果的上下限才靠谱。
先看数据准备。
假设我们有10个特征变量比如温度、湿度、风速等影响目标变量比如用电量。
数据标准化用mapminmax最省事[input_train,ps_input] mapminmax(feature_data,0,
; [output_train,ps_output] mapminmax(target_data,0,
;注意这里转置操作符Matlab的LSTM要求数据格式是特征数×样本数别搞反了。
建议把原始数据存成Excel用xlsread导入比较稳。
网络结构是关键。
上Bidirectional LSTM能捕捉前后时序关系比单向的强。
核心代码这样写layers [ sequenceInputLayer(inputSize) bilstmLayer(128,OutputMode,sequence) dropoutLayer(
0.
fullyConnectedLayer(
% 对应三个分位数输出 ];这里有个骚操作最后全连接层输出3个节点对应
0.
1、
0.
5、
9三个分位数。
想改分位点数值直接改数组就行比如[
05,
5,
95]。
LSTM长短期记忆神经网络分位数回归多输入单输出Matlab
输入多个特征输出单个特征分位数回归区间预测
运行环境matlab2020b 所有程序经过验证保证有效运行。
损失函数得自己定制。
分位数损失不是MSE那套得用这个公式$$Loss \frac{1}{N}\sum{i1}^{N} \max(q(yi - \hat{y}i), (q-
(yi - \hat{y}_i))$$Matlab实现用dlarray处理自动微分function loss quantileLoss(predictions, targets, tau) errors targets - predictions; loss mean(max(tau*errors, (tau-
*errors)); end训练时别开accelerator老版本可能有兼容问题。
建议用CPU模式batchsize设32或64options trainingOptions(adam, ... MaxEpochs,200,... MiniBatchSize,64,... GradientThreshold,1,... ExecutionEnvironment,cpu,... Plots,training-progress);预测结果要做反向归一化YPred predict(net,XTest); YPred_inv mapminmax(reverse, YPred, ps_output);可视化部分建议用带状图展示预测区间fill([1:numTest, numTest:-1:1],... [upperQuantile, fliplr(lowerQuantile)],... [
8
9
9], EdgeColor,none) hold on plot(medianQuantile,LineWidth,
踩过最大的坑是序列长度对齐。
建议训练时用padding处理不等长序列但验证集别这么干。
遇到loss震荡的话试试把学习率从3e-4降到1e-4亲测有效。
完整代码跑通后建议保存成mat文件下次直接load网络用。
注意2020b开始支持ONNX格式导出需要部署到其他平台的话这个很方便。