终于来了!python机器学习预测全家桶

关于机器学习预测的python代码,后台高呼声也是不断!今天,小淘总算是肝出来啦!

人生苦短,python是岸

不得不说,用python进行机器学习预测,确实要简便许多,很多包直接调用即可。

先上目录!

08644e7db3f485c013f1f22dee9109d1.png

本期推出的python机器学习预测全家桶一共包含了26种模型。包括如下:

单模型预测

Bagging、BiGRU、BiLSTM、BP、CART、ELM、Gradient-boosting、GRU、LSTM、Random-Forest、RBF、SVR、xgboost

组合模型预测

BiGRU-Attention、BiLSTM-Attention、CNN-BiGRU、CNN-BiGRU-Attention、CNN-BiLSTM、CNN-BiLSTM-Attention、CNN-GRU、CNN-GRU-Attention、CNN-LSTM、CNN-LSTM-Attention、GRU-Attention、LSTM-Attention

智能算法优化案例模型预测

DBO-LSTM-Attention

预计后续会继续推出:

1:各种基础、混合的可用于机器预测的新方法,并且与各种BiLSTM、Attention、GRU等的混合使用

2:各种新型的智能优化算法优化机器学习预测模型

3:将改进的智能算法用于机器学习模型的预测

4:添加其他类型的数据集用于预测

5:本期模型属于多变量输入单步预测,后续会加入多变量输入多步预测,单变量输入单步和多步预测

代码获取方式:

3c77db9a5c511dfd5c9e46479b675917.png

承诺该全家桶永久更新!


本次代码亮点:

①一键切换多/单特征输入,多/单步预测

小淘自己编写了一个可以一键实现:多/单特征输入,多/单步预测的数据处理代码。让小白也可以轻松更改自己数据的各种输入格式。关于多/单特征输入,多/单步预测,到底是什么意思?一文讲明白!

代码定义如下:

def data_collation(data, n_in, n_out, or_dim, scroll_window, num_samples)
# 关于此函数怎么用,下面详细举例介绍:
# 构造数据,这个函数可以实现单输入单输出,单输入多输出,多输入单输出,和多输入多输出。
# 举个例子:
# 假如原始数据为,其中务必使得数据前n-1列都为特征,最后一列为输出
# [0.74  0.8  0.23 750.75
# 0.74 0.87 0.15 716.94
# 0.74 0.87 0.15 712.77
# 0.74 0.8 0.15 684.86
# 0.74 0.8 0.15 728.79
# 0.72 0.87 0.08 742.81
# 0.71 0.99 0.16 751.3]


#(多输入多输出为例),假如n_in = 2,n_out=2,scroll_window=1
# 输入前2行数据的特征,预测未来2个时刻的数据,滑动步长为1。
# 使用此函数后,数据会变成:
# 【0.74 0.8 0.23 750.75  0.74  0.87 0.15 716.94 712.77 684.86
# 0.74 0.87 0.15 716.94 0.74 0.87  0.15 712.77  684.86 728.79
# 0.74 0.87 0.15 712.77 0.74 0.8 0.15 684.86 728.79 742.81】


# 假如n_in = 2,n_out=1,scroll_window=2
# 输入前2行数据的特征,预测未来1个时刻的数据,滑动步长为2。
# 使用此函数后,数据会变成:
# 【0.74 0.8 0.23 750.75  0.74  0.87 0.15 716.94 712.77
# 0.74 0.87  0.15 712.77  0.74 0.8 0.15 684.86 728.79
# 0.74 0.8 0.15 728.79 0.72  0.87 0.08 742.81 751.3】
#写到这里相比大家已经完全明白次函数的用法啦!欢迎关注《淘个代码》公众号!获取更多代码!
#单输入单输出,和单输入多输出也是这么个用法!单输入无非就是数据维度变低了而已。欢迎关注《淘个代码》公众号!获取更多代码

②四种数据集,预测效果都不错,证明数据替换简单!

很多小伙伴会问到,替换数据复不复杂。本期全家桶为了实现代码对不同数据的兼容性,小淘分别对这四种不同的数据集进行了测试,效果都是不错的!放心大胆使用!四种数据分别如下:

《电力负荷预测数据1.xlsx》

e1b5a46f3c420da425cf1d35ae50a0aa.png

以BiGRU为例,前三行数据作为输入,预测第四个数据。滚动步长为1,展示预测效果:

d8a62c3ffd8c492df15d5166657189e1.png

《电力负荷预测数据2.xlsx》

f1fa63fb104dc09ef6ea9ac827424c0c.png

以BiGRU为例,前三行数据作为输入,预测第四个数据。滚动步长为1,展示预测效果:

b84891c8574a272cdb9eed916c3b60cb.png

《风电场功率预测.xlsx》

3b434298081a792d666351cf25b5c25a.png

以BiGRU为例,前三行数据作为输入,预测第四个数据。滚动步长为1,展示预测效果:

54bc7873a3e4a2cacec6d9eaa0db6d2d.png

《股票预测.csv》

de76f06c0cf19ab224ae556e0a0b50f1.png

以BiGRU为例,前三行数据作为输入,预测第四个数据。滚动步长为1,展示预测效果:

e0882fc44d70ca940968c017cfee0bf8.png

四种数据全是真实的数据!

只要你的数据格式也是这样,前几列是特征,最后一列是输出值。此代码就完全适用!

③代码注释逐行详细,适合新手小白!

# 这里来个多特征输入,单步预测的案例
n_in = 3  # 输入前3行的数据
n_out = 1  # 预测未来1个时刻的数据
or_dim = values.shape[1]        # 记录特征数据维度
num_samples = 2000  # 可以设定从数据中取出多少个点用于本次网络的训练与测试。
scroll_window = 1  #如果等于1,下一个数据从第二行开始取。如果等于2,下一个数据从第三行开始取
res = data_collation(values, n_in, n_out, or_dim, scroll_window, num_samples)
# 把数据集分为训练集和测试集
values = np.array(res)
# 将前面处理好的DataFrame(data)转换成numpy数组,方便后续的数据操作。


n_train_number = int(num_samples * 0.85)
# 计算训练集的大小。
# 设置85%作为训练集
# int(...) 确保得到的训练集大小是一个整数。
model = BaggingRegressor(n_estimators=60)
# 创建Bagging模型
model.fit(vp_train, vt_train)
# 使用训练数据(vp_train和vt_train)来训练模型。
# vp_train是输入特征,vt_train是目标变量。
# fit方法将会应用前面定义的网络结构和训练参数来训练模型。
# 作出预测
yhat = model.predict(vp_test)
# 使用模型对测试集的输入特征(vp_test)进行预测。
# yhat是模型预测的输出值。
yhat = yhat.reshape(-1, 1)
# 将预测值yhat重塑为二维数组,以便进行后续操作。

模型结果展示

以电力负荷预测数据1为例进行展示。模型输入为前三行的湿度、温度、风速、压强、降水量、能见度、水气压(e)、体感温度(AT)和负荷值数据。预测下一个时刻的负荷值。滚动步长为1。

Bagging模型:

11eacf959cd902e861705bc427038a0c.png

c9be8e803fb637a8c6ed0170095ed29e.png

BiLSTM-Attention模型:

bfcf05abc9bf1430efac5f17d5f188f8.png

11a515bb7824db53d6cb2e8b2a5453ff.png

CNN-BiLSTM-Attention模型:

35b189bb2c90bfae24a0e4c24d11e23d.png

0fa48a329784b095776f4b9b47e50cfd.png

DBO-LSTM-Attention对比模型

34abbf1566051b037701a54307a007ac.png

f432cabab66262e732e70fccae87cd0b.png

剩下的模型就不再一一展示了。模型均可一键出结果。替换数据也是极其方便!

模型调用的包大致如下,不用GPU也可以运行。作者使用的是python3.9版本。目前亲测3.12是不能用的哈。

# 调用相关库
import os  # 导入os模块,用于操作系统功能,比如环境变量
import math  # 导入math模块,提供基本的数学功能
import pandas as pd  # 导入pandas模块,用于数据处理和分析
import openpyxl
from math import sqrt  # 从math模块导入sqrt函数,用于计算平方根
from numpy import concatenate  # 从numpy模块导入concatenate函数,用于数组拼接
import matplotlib.pyplot as plt  # 导入matplotlib.pyplot模块,用于绘图
import numpy as np  # 导入numpy模块,用于数值计算
import tensorflow as tf  # 导入tensorflow模块,用于深度学习
from sklearn.preprocessing import MinMaxScaler  # 导入sklearn中的MinMaxScaler,用于特征缩放
from sklearn.preprocessing import StandardScaler  # 导入sklearn中的StandardScaler,用于特征标准化
from sklearn.preprocessing import LabelEncoder  # 导入sklearn中的LabelEncoder,用于标签编码
from sklearn.metrics import mean_squared_error  # 导入sklearn中的mean_squared_error,用于计算均方误差
from tensorflow.keras.layers import *  # 从tensorflow.keras.layers导入所有层,用于构建神经网络
from tensorflow.keras.models import *  # 从tensorflow.keras.models导入所有模型,用于构建和管理模型
from sklearn.metrics import mean_squared_error, mean_absolute_error,r2_score  # 导入额外的评估指标
from pandas import DataFrame  # 从pandas导入DataFrame,用于创建和操作数据表
from pandas import concat  # 从pandas导入concat函数,用于DataFrame的拼接
import keras.backend as K  # 导入keras的后端接口
from scipy.io import savemat, loadmat  # 从scipy.io导入savemat和loadmat,用于MATLAB文件的读写
from sklearn.neural_network import MLPRegressor  # 从sklearn.neural_network导入MLPRegressor,用于创建多层感知器回归模型
from keras.callbacks import LearningRateScheduler  # 从keras.callbacks导入LearningRateScheduler,用于调整学习率
from tensorflow.keras import Input, Model, Sequential  # 从tensorflow.keras导入Input, Model和Sequential,用于模型构建
import mplcyberpunk
from qbstyles import mpl_style
import copy
# 导入copy模块,用于对象的复制。
import random
# 导入random模块,用于生成随机数。
from scipy.io import savemat, loadmat
# 从scipy.io模块导入savemat和loadmat函数,用于读写MATLAB格式的文件。
from numpy import concatenate
# 从numpy模块导入concatenate函数,用于数组的连接。
from matplotlib.pylab import mpl
# 从matplotlib.pylab模块导入mpl,用于配置matplotlib的一些参数。

点击下方卡片获取更多代码!

  • 19
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

今天吃饺子

不想刀我的可以选择爱我

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

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

打赏作者

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

抵扣说明:

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

余额充值