后台有小伙伴不断留言,有要求多特征输入,还有要求单步预测,这个又要求多步预测,那个的数据又是只有一列的,要求单输入的。
咱就是说,不能一次搞定吗!?
本期推文就彻底把这个问题解决掉!不论你的数据是只有一列,还是有多列特征,不论你是想多步预测,还是想单步预测。本次代码直接一步到位!
本次代码是基于上一期python机器学习预测全家桶的改进版本!
在上一期的基础上,新增多/单特征输入,多/单步预测功能。
下面简单说一下代码设计原理。
以《风电场功率预测.xlsx》为例进行介绍。数据格式如下:
可以看到,数据的第一列为时间列,训练网络时用不到。读取数据代码如下:
dataset=pd.read_excel("风电场功率预测.xlsx")
values = dataset.values[:,1:] #取第2列之后(包含第二列)的所有数据,写成[:,1:]。 如果只取第2列数据,要写成[:,1:2];只取第3列数据,要写成[:,2:3]
小淘自己独创的数据整理函数定义如下:
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】
重点来了!如果你是以下的某一种情况,只需要按照如下设置即可!
单输入单步预测,就让values等于某一列数据,设置n_out = 1,n_in, num_samples, scroll_window 根据自己情况来
单输入多步预测,就让values等于某一列数据,设置n_out = 步数,n_in, num_samples, scroll_window 根据自己情况来
多输入单步预测,就让values等于多列数据,设置n_out = 1,n_in, num_samples, scroll_window 根据自己情况来
多输入多步预测,就让values等于多列数据,设置n_out = 步数,n_in, num_samples, scroll_window 根据自己情况来
接下来以XGBOOST模型为例,进行四种案例的展示。
①单输入单步预测
只取《风电场功率预测.xlsx》数据中的温度一列,参数设置为,
values = dataset.values[:,11:12]
n_out = 1 #预测未来1步
n_in = 5 #前5行数据作为输入
num_samples = 1000 #取1000个样本
scroll_window = 1 #如果等于1,下一个数据从第二行开始取。如果等于2,下一个数据从第三行开始取
其他地方代码都不用动!结果如下:
在控制台打印指标结果如下:
②单输入多步预测
只取《风电场功率预测.xlsx》数据中的温度一列,参数设置为:
n_out = 2 #预测未来2步
n_in = 5 #前5行数据作为输入
num_samples = 1000 #取1000个样本
scroll_window = 1 #如果等于1,下一个数据从第二行开始取。如果等于2,下一个数据从第三行开始取
其他地方代码都不用动!结果如下:会生成2张图片。第一张代表所有测试集对于第一步预测值和实际值的对比结果。第二张代表所有测试集对于第二步预测值和实际值的对比结果。
在控制台打印指标结果如下:
③多输入单步预测
取《电力负荷预测数据.xlsx》所有数据,参数设置为:
n_out = 1 #预测未来1步
n_in = 5 #前5行数据作为输入
num_samples = 1000, #取1000个样本
scroll_window = 1 #如果等于1,下一个数据从第二行开始取。如果等于2,下一个数据从第三行开始取
其他地方代码都不用动!结果如下:
在控制台打印指标结果如下:
④多输入多步预测
取《电力负荷预测数据.xlsx》所有数据,参数设置为:
n_out = 2 #预测未来2步
n_in = 5 #前5行数据作为输入
num_samples = 1000, #取1000个样本
scroll_window = 1 #如果等于1,下一个数据从第二行开始取。如果等于2,下一个数据从第三行开始取
其他地方代码都不用动!结果如下,会生成2张图片。第一张代表所有测试集对于第一步预测值和实际值的对比结果。第二张代表所有测试集对于第二步预测值和实际值的对比结果。
在控制台打印指标结果如下:
人生苦短,python是岸
不得不说,用python进行机器学习预测,确实要简便许多,很多包直接调用即可。
全家桶目录如下:
关于更多pytho机器学习预测全家桶介绍请看:终于来了!python机器学习预测全家桶
模型亲测python3.9版本可用。用到的包版本推荐如下:
pandas~=2.2.0
matplotlib~=3.8.2
numpy~=1.26.3
tensorflow~=2.15.0
keras~=2.15.0
seaborn~=0.13.1
scikit-learn~=1.4.0
scipy~=1.12.0
openpyxl~=3.1.2
mplcyberpunk~=0.7.1
qbstyles~=0.1.4
prettytable~=3.9.0
xgboost~=2.0.3
或点击下方卡片获取此全家桶。