一个很简易的多因素预测电力模型,所用数据量很少,所以效果不是很好,如果数据量大,可能最后的模型精度和效果会不错,看看就行了,写的很乱(数据来源于泰迪杯最先公布的数据)。

# -*- coding: utf-8 -*-
# @Time : 2022/3/26 15:13
# @Author : 中意灬
# @FileName: 多变量.py
# @Software: PyCharm
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScaler
from sklearn.metrics import r2_score
import tensorflow as tf
from tensorflow.python.keras import Sequential, layers, utils, losses
from tensorflow.python.keras.callbacks import ModelCheckpoint, TensorBoard
import warnings
def create_dataset(X, y, seq_len):features = []targets = []for i in range(0, len(X) - seq_len, 1):data = X.iloc[i:i + seq_len]  # 序列数据label = y.iloc[i + seq_len]  # 标签数据# 保存到features和labelsfeatures.append(data)targets.append(label)# 返回return np.array(features), np.array(targets)
# 3 构造批数据
def create_batch_dataset(X, y, train=True, buffer_size=1000, batch_size=128):batch_data = tf.data.Dataset.from_tensor_slices((tf.constant(X), tf.constant(y))) # 数据封装,tensor类型if train: # 训练集return batch_data.cache().shuffle(buffer_size).batch(batch_size)else: # 测试集return batch_data.batch(batch_size)if __name__ == '__main__':
#绘制相关系数矩阵图plt.rcParams['font.sans-serif'] = ['SimHei']  # 显示中文标签plt.rcParams['axes.unicode_minus'] = Falsedf = pd.read_csv("C:/Users/97859/Documents/WPS Cloud Files/319911131/附件3-气象数据1.csv", encoding="GBK")df.drop(columns='日期', axis=1, inplace=True)  # 删除时间那一列corrmat = df.astype(float).corr()  # 计算相关系数top_corr_features = corrmat.indexplt.figure()g = sns.heatmap(df[top_corr_features].astype(float).corr(), annot=True, cmap="RdYlGn")  # 绘图plt.xticks(rotation=15)plt.show()plt.rcParams['font.sans-serif'] = ['SimHei']warnings.filterwarnings('ignore')data=pd.read_csv('附件3-气象数据1.csv',encoding='GBK',parse_dates=['日期'], index_col=['日期'])print(data[data.isnull()==True].sum())#看看有无缺失值'''归一化处理'''scaler=MinMaxScaler()data['最大值'] = scaler.fit_transform(data['最大值'].values.reshape(-1,1))data['最小值']=scaler.fit_transform(data['最小值'].values.reshape(-1,1))plt.figure()plt.plot(data[['最大值','最小值']])plt.show()'''特征工程'''X = data.drop(columns=['最大值','最小值'], axis=1)y =data[['最大值','最小值']]X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, shuffle=False, random_state=666)#shuffle=false表示不打乱顺序,random_state=666表示输出的值不改变# ① 构造训练特征数据集train_dataset, train_labels = create_dataset(X_train, y_train, seq_len=2)# print(train_dataset)# ② 构造测试特征数据集test_dataset, test_labels = create_dataset(X_test, y_test, seq_len=2)# print(test_dataset)# 训练批数据,未来训练快一点train_batch_dataset = create_batch_dataset(train_dataset, train_labels)# 测试批数据test_batch_dataset = create_batch_dataset(test_dataset, test_labels, train=False)# 模型搭建--版本1model = Sequential([layers.LSTM(units=256, input_shape=(2,6), return_sequences=True),layers.Dropout(0.4),layers.LSTM(units=256, return_sequences=True),layers.Dropout(0.3),layers.LSTM(units=128, return_sequences=True),layers.LSTM(units=32),layers.Dense(2)])# 模型编译model.compile(optimizer='adam',loss='mse')# 保存模型权重文件和训练日志,保持最优的那个模型checkpoint_file = "best_model.hdf5"checkpoint_callback = ModelCheckpoint(filepath=checkpoint_file,monitor='loss',mode='min',save_best_only=True,save_weights_only=True)# 模型训练history = model.fit(train_batch_dataset,epochs=100,validation_data=test_batch_dataset,callbacks=[checkpoint_callback])plt.figure()plt.plot(history.history['loss'], label='train loss')plt.plot(history.history['val_loss'], label='val loss')plt.legend(loc='best')plt.show()'''模型预测'''test_preds = model.predict(test_dataset, verbose=1)plt.figure()plt.plot(y_test, label='True')plt.plot(test_preds, label='pred')plt.show()# 计算r2值,数据太少可能计算不出来score = r2_score(test_labels, test_preds)print("r^2 值为: ", score)y_true = y_test[:100]  # 真实值y_pred = test_preds[:100]  # 预测值fig, axes = plt.subplots(2, 1)axes[0].plot(y_true, marker='o', color='red')axes[1].plot(y_pred, marker='*', color='blue')plt.show()
#数据太少,可能计算不出来
# relative_error = 0
# '''模型精确度计算'''
# for i in range(len(y_pred)):
#     relative_error += (abs(y_pred[i] - y_true[i]) / y_true[i]) ** 2
# acc = 1 - np.sqrt(relative_error / len(y_pred))
# print(f'模型的测试准确率为:', acc)

运行结果:

相关性系数矩阵分析(数据是类型变量)

 归一化后每天的最大最小值图像

缺失值的查看

多因素损失值变化

 训练集中的预测值与实际值可视化

计算的r^2和模型精度由于数据量太少,未能计算出来

python多因素电力预测——基于LSTM神经网络相关推荐

  1. python预测算整理集合 python根据历史数据,预测未来数据 神经网络时间序列预测python 销售收入分析与预测 神经网络预测控制 Python 源码 4个lstm做数据预测的案例源代码

    python 预测未来/神经网络/负荷/飞机零件故障/链路预测程序源码 1.python实现TensorFlow2股票股价预测(源码) 2.负荷预测(py thon例子,实时负荷预测,15分钟到4小时 ...

  2. 《基于LSTM神经网络的双色球蓝球数字预测》

    结论:没有任何作用,基本可以断定这是真正随机的数字. LSTM神经网络,单步预测,循环2000次,100个神经元,无dropout. 蓝线:最近50期蓝球数字 橙线:LSTM网络预测数字 绿线:蓝线 ...

  3. [负荷预测]基于人工神经网络的短期电力负荷预测(1)

    目录 一.问题背景 二.数据集介绍 2.1 提取Area1用电负荷 2.2 读入2014年Area1指定列负荷数据 2.3 探查Area1用电负荷数据分布 2.4 两地2014年负荷数据可视化 2.4 ...

  4. [股票预测]基于BP神经网络的股票行情预测

    目录 一.数据集介绍 1.输入数据(XRHJDataInput.mat) 2.目标数据(XRHJDataTarget.mat) 3.预测数据(newdata_pre18.mat) 二.模型训练 1.训 ...

  5. 电力预测|基于新型MDPSO-SVR混合模型的电力预测特征选择(Matlab代码实现)

  6. [时间序列预测]基于BP、LSTM、CNN-LSTM神经网络算法的单特征用电负荷预测[保姆级手把手教学]

    系列文章目录 深度学习原理-----线性回归+梯度下降法 深度学习原理-----逻辑回归算法 深度学习原理-----全连接神经网络 深度学习原理-----卷积神经网络 深度学习原理-----循环神经网 ...

  7. [时间序列预测]基于BP、RNN、LSTM、CNN-LSTM算法多特征(多影响因素)用电负荷预测[保姆级手把手教学]

    系列文章目录 深度学习原理-----线性回归+梯度下降法 深度学习原理-----逻辑回归算法 深度学习原理-----全连接神经网络 深度学习原理-----卷积神经网络 深度学习原理-----循环神经网 ...

  8. 【LSTM回归预测】基于matlab LSTM神经网络回归预测【含Matlab源码 2227期】

    ⛄一.时间序列简介 1 时间序列模型概述 1.1 时间序列的不同分类 时间序列是按时间顺序排列的.随时间变化且相互关联的数据序列.分析时间序 列的方法构成数据分析的一个重要领域,即时间序列分析. 时间 ...

  9. 机器学习应用篇(八)——基于BP神经网络的预测

    机器学习应用篇(八)--基于BP神经网络的预测 文章目录 机器学习应用篇(八)--基于BP神经网络的预测 一.Introduction 1 BP神经网络的优点 2 BP神经网络的缺点 二.实现过程 1 ...

最新文章

  1. 2022-2028年中国康养地产行业市场需求前景及投资战略分析报告
  2. 调用dubbo接口出现多次
  3. Android中解决debug.keystore到期的问题
  4. 杭电2005题c语言答案,杭电2005
  5. Windows2003屏蔽IP
  6. .NET DLL 保护措施详解(四)各操作系统运行情况
  7. mysql insert锁 innodb_mysql – 处理ON INSERT触发器时如何锁定innodb表?
  8. Mac电脑如何添加管理员账户?
  9. Java API简介以及以及常用的类库介绍
  10. Request header field storeid is not allowed by Access-Control-Allow-Headers in preflight response.
  11. tensorflow用c语言,安装TensorFlow C语言版
  12. Ulipad快捷键大总结
  13. VISIO输出黑白色电路图
  14. 嵌入式硬件学习——分压电路
  15. MySQL函数 if 的使用
  16. 【MISC怼题入门系列】BUU-MISC-page2
  17. 当Apple TV+的生态化反梦,撞上一个“日渐昂贵”的流媒体市场
  18. 时区相关-这一篇全了解
  19. SpringBoot的test测试类报com.netflix.discovery.shared.transport.TransportException异常
  20. 免费小程序转码工具(小程序转码机器人)业务推广必备

热门文章

  1. 机器学习利用Anaconda搭建Python科学计算环境
  2. java面试题集中了好几篇的搜索的
  3. aloge alogw alogi alogd alogv
  4. SJTU散列表的建立
  5. oracle开窗函数有哪些,oracle分析函数理解(开窗函数)
  6. C#中使用SHA1算法对密码进行加密
  7. 记录下Mac生成安卓证书
  8. Java 浅拷贝、深拷贝,你知多少?
  9. sketch八个高效的快捷方式(上)
  10. sketch中快速绘制图形的几个小技巧