基于分位数回归的长短期记忆网络QRLSTM在风速、负荷和功率预测中的应用与性能评估:评价指标R...

QRLSTM基于分位数回归的长短期记忆网络QRLSTM时间序列区间预测。 (主要应用于风速,负荷,功率) 包含评价指标R2,MAE,MBE,区间覆盖率,区间平均宽度。

最近在捣鼓电力负荷预测的项目,传统LSTM的点预测总让人心里不踏实。偶然发现分位数回归和LSTM还能搞CP,这QRLSTM有点东西。咱们今天就来盘一盘这个能直接输出预测区间的黑科技,手把手教你怎么用代码把它玩起来。

先上段模型核心结构代码镇楼:

python 复制代码
import torch
import torch.nn as nn

class QRLSTM(nn.Module):
    def __init__(self, input_size, hidden_size, quantiles=[0.1, 0.5, 0.9]):
        super().__init__()
        self.lstm = nn.LSTM(input_size, hidden_size, batch_first=True)
        self.quantiles = quantiles
        self.heads = nn.ModuleList([
            nn.Sequential(
                nn.Linear(hidden_size, 32),
                nn.ReLU(),
                nn.Linear(32, 1)
            ) for _ in quantiles
        ])
    
    def forward(self, x):
        out, _ = self.lstm(x)
        out = out[:, -1, :]  # 只要最后一个时间步
        return torch.cat([head(out) for head in self.heads], dim=1)

这代码妙就妙在给每个分位数都配了个专属输出头(heads列表),相当于让模型同时学习多个分位点的预测。比如咱们设定了[0.1,0.5,0.9]三个分位数,模型就能同时给出10%、50%、90%分位数的预测值,形成预测区间。

关键在损失函数的设计,传统MSE可不行。看这个分位数损失函数:

python 复制代码
def quantile_loss(y_true, y_pred, quantiles):
    losses = []
    for i, q in enumerate(quantiles):
        error = y_true - y_pred[:, i:i+1]
        losses.append(torch.max((q-1)*error, q*error).mean())
    return sum(losses)

这函数处理多个分位数损失的方式很讲究------对于每个分位点q,当预测值低于真实值时,损失权重是q,反之是(1-q)。比如对于0.9分位数,模型更在意不要低估真实值(低估时惩罚更大)。

训练时要注意数据标准化,别让不同量纲把模型搞懵了。这里用鲁棒标准化更抗异常值:

python 复制代码
from sklearn.preprocessing import RobustScaler

scaler = RobustScaler()
scaled_data = scaler.fit_transform(raw_data.reshape(-1, 1))

预测结果要还原尺度时,记得逆转换:

python 复制代码
y_pred_original = scaler.inverse_transform(y_pred)

评估指标才是重头戏,这几个指标必须安排:

python 复制代码
coverage = np.mean((y_test >= lower_bound) & (y_test <= upper_bound))

# 区间平均宽度
width = np.mean(upper_bound - lower_bound)

# 点预测精度
r2 = r2_score(y_test, median_pred)
mae = mean_absolute_error(y_test, median_pred)
mbe = np.mean(median_pred - y_test)  # 平均偏差

覆盖率太高可能意味着区间太宽,太窄又容易漏掉真实值。好的模型应该在保证覆盖率(比如90%)的前提下,让区间宽度尽可能小。

实际跑电力负荷数据时发现个有趣现象:工作日的预测区间明显比节假日窄,毕竟用电模式更规律嘛。这时候可以给模型加上日期特征,效果立竿见影:

python 复制代码
# 添加星期几作为特征
df['day_of_week'] = df.index.dayofweek / 7  # 归一化到0-1

调参时有个小技巧:先调中间分位数(0.5相当于中位数预测),稳定后再调两侧分位数。学习率也别太大,建议从1e-3开始尝试。

最后说点实战经验:当预测区间突然变宽,八成是系统要搞事情。有次模型突然把凌晨时段的区间宽度拉高30%,结果当天还真遇到设备故障导致负荷异常。这QRLSTM不光能做预测,还能当异常检测器用,算是买一送一的惊喜了。

相关推荐
迁旭3 天前
Claude Code /status 功能技术文档
前端·javascript·人工智能·react.js·机器学习·gpt-3·文心一言
莽撞的大地瓜4 天前
校对通更新!PDF图文混校上线,新闻采编审校效率大幅跃升
全文检索·文心一言·石墨文档
迁旭8 天前
Claude Code Skill(技能)系统机制与运行原理报告
人工智能·机器学习·gpt-3·文心一言
不开大的凯207713 天前
超级更新月的“硬菜“:模型、硬件与应用全面进入爆发期
人工智能·dubbo·文心一言
迁旭19 天前
claude code 规划模式(Plan Mode)完整指南
人工智能·机器学习·文心一言·知识图谱
eastyuxiao20 天前
文心一言和DeepSeek V4哪个更好?
人工智能·大模型·文心一言·deepseek·deepseek-v4·deepseek‑v4
倔强的猴子(翻版)22 天前
我用 Python 写了个排序库,一亿数据量下比 C 级 np.sort() 快 7 倍
人工智能·python·算法·阿里云·文心一言
军军君011 个月前
【人工智能/AI】项目实战二:AI视频生成产品汇总(非完全)
图像处理·人工智能·计算机视觉·ai作画·视觉检测·文心一言
hqyjzsb1 个月前
传统教师升级AI教育产品设计师后收入增长路径
人工智能·职场和发展·aigc·文心一言·学习方法·业界资讯·ai写作
ai生成式引擎优化技术1 个月前
文心一言的GEO生成式引擎优化技术方案
文心一言