使用MLP进行负荷预测

本文介绍了使用多层感知器(MLP)进行负荷预测的流程,包括数据预处理、模型训练和结果分析。通过处理气象和负荷数据,建立预测模型,并利用反向传播算法进行学习。在验证集上,模型取得了较高的预测精度,但对节假日负荷变化的预测仍有提升空间。提出了对节假日单独建模和尝试其他时间序列模型如LSTM以提高预测准确性的优化思路。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、简单介绍

      Multi-layer Perceptron(MLP),即多层感知器,是一个前馈式的、具有监督的人工神经网络结构。通过多层感知器可包含多个隐藏层,实现对非线性数据的分类建模。MLP将数据分为训练集、测试集、检验集。其中,训练集用来拟合网络的参数,测试集防止训练过度,检验集用来评估网络的效果,并应用于总样本集。当因变量是分类型的数值,MLP神经网络则根据所输入的数据,将记录划分为最适合类型。常被MLP用来进行学习的反向传播算法,在模式识别的领域中算是标准监督学习算法,并在计算神经学及并行分布式处理领域中,持续成为被研究的课题。MLP已被证明是一种通用的函数近似方法,可以被用来拟合复杂的函数,或解决分类问题。

二、源代码分享

      首先查看气象数据各字段的缺失情况,从数据中了解到,天气类型、风向、风速、降雨量四个字段数据缺失严重,这里使用各字段的中位数替换异常数据,经过检查,符合数据仅有局部零星几个缺失数据,由于负荷数据在相邻的几天内,固定时间段的波动较小,这里处理缺失值的方法是:使用前一个非缺失值来填充缺失值。

import torch
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import warnings; warnings.simplefilter('ignore')
torch.__version__
path = '../data/STLF_DATA_IN_1.xls'
df_load = pd.read_excel(path,sheet_name=0,header=None)
df_weather = pd.read_excel(path, sheet_name=1, header=None)
plt.figure()
# plt.rcParams['font.sans-serif']=['SimHei']
weather_type = df_weather[1].value_counts(sort=True)
weather_type.plot.bar()
plt.savefig('../img/weather_type.png')
df_weather = df_weather.drop(df_weather[df_weather[1] == "天气类型"].index)
df_weather = df_weather.drop(df_weather[df_weather[1] == "风向"].index)
df_weather = df_weather.drop(df_weather[df_weather[1] == "风速"].index)
df_weather = df_weather.drop(df_weather[df_weather[1] == "降雨量"].index)
weather_type = df_weather[1].value_counts(sort=True)
weather_type.plot.bar()
plt.savefig('../img/weather_type2.png')
df_max_tempe = df_weather.loc[df_weather[1] == "最高温度", [0, 2]]
df_min_tempe = df_weather.loc[df_weather[1] == "最低温度", [0, 2]]
df_avg_tempe = df_weather.loc[df_weather[1] == "平均温度", [0, 2]]
df_humidity = df_weather.loc[df_weather[1] == "湿度", [0, 2]]

df_weather2 = pd.merge(df_max_tempe, df_min_tempe, how='left', on=[0, 0])
df_weather2 = pd.merge(df_weather2, df_avg_tempe, how='left', on=[0, 0])
df_weather2 = pd.merge(df_weather2, df_humidity, how='left', on=[0, 0])

df_weather2.isna().sum()
df_weather2.describe()
df_weather2.columns = [0, 'max_tempe', 'min_tempe', 'avg_tempe', 'humidity']
df_weather2.boxplot(column=['avg_tempe'])
df_weather2['min_tempe'][df_weather2['min_tempe'] < -800] = df_weather2['min_tempe'].median()
df_weather2['avg_tempe'][df_weather2['avg_tempe'] < -40] = df_weather2['avg_tempe'].median()
df_weather2['humidity'][df_weather2['humidity'] < -8000] 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小王学知识

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值