本文记录了笔者用Keras框架编写BP神经网络,训练并预测秦皇岛未来煤价数据,共分为三部分:训练、验证和预测。本文编写于2020年5月19日,文中代码全为Python 3代码,并在Jupyter中测试通过。
点击跳转至本文数据集下载链接
献给新手!大家有疑问可以在评论区留言,一起进步~
1、数据读入
数据集下载链接:戳这里
训练集一共62条,每条包含了9个属性(A~I)和目标值target,我们将用他们来训练模型:根据A-I的值来预测target的值。
以下是需要预测的数据,我们将它放置在数据集的64~94行:
(仅有A-I属性的数据,无target值,我们将用训练好的模型来预测其target)
首先用Pandas读入全部数据——
import pandas as pd
data = pd.read_csv("C:/Users/LRK/Desktop/0518.csv")
注意,用Pandas读取的数据会是一个Numpy数组,在这种数据集上非常好用!!
★ 手动划分训练集(train_data)、训练目标(train_targets),他们都是Numpy数组。
train_data = data.loc[0:61, ['A','B','C','D','E','F','G','H','I']]
train_data.shape
# 读取数据集的0~61行、A~I列的数据
Output:(62, 9)
train_targets = data.loc[0:61, ['target']]
train_targets.shape
# 读取数据集的0~61行、target列的数据
Output:(62, 1)
用Pandas读取train_data是这样的,非常美观:
★ 读取需要预测的数据的A-I特征:
test_data = data.loc[62:92, ['A','B','C','D','E','F','G','H','I']]
2、数据预处理
在这里,我们采用“数据标准化处理”,即:每个数据减去该列平均值,再除以该列的标准差。这是机器学习中常见的数据处理方式,一定程度上缩小了A~I列不同属性的数据大小范围,方便神经网络进行训练。
(这里不明白的可以参考Andrew Ng的视频课程)
mean = train_data.mean(axis=0)
train_data -= mean
std = train_data.std(axis=0)
train_data /= std
test_data -= mean
test_data /= std
警告:test_data进行预处理的时候,减去的平均值和除以的标准差,都是在训练集上得出的,而非测试集上!!否则会影响准确性。
3、编写模型(深度神经网络)
DNN(深度神经网络),是BP神经网络的变种。
import os
os.environ["CUDA_VISIBLE_DEVICES"] = "1" # GTX 1050 Ti
from kera