来自股票价格预测bilibili课程。
源自jupyter notebook文件main.ipynb。
代码用tf1书写,使用tf2会因为版本不对应而报错,tf2版本的代码后续再研究。
股票价格预测
1、数据初步处理
- 导入库
import pandas as pd
import numpy as np
import tensorflow as tf
import matplotlib.pyplot as plt
%matplotlib inline #可以matplotlib的图表直接嵌入到Notebook之中
from sklearn.preprocessing import MinMaxScaler
import time
- 导入数据库
data = pd.read_csv('data_stocks.csv')
- 一些数据处理的指令
data.describe() #对列数据进行分析(如平均值,最大值等)
data.info() #显示数据集类型
- 数据集分割
data.drop('DATE', axis=1, inplace=True)#把日期行舍去
data_train = data.iloc[:int(data.shape[0] * 0.8), :] #前80%为训练集
data_test = data.iloc[int(data.shape[0] * 0.8):, :] #后20%为测试集
- 归一化处理数据
scaler = MinMaxScaler(feature_range=(-1, 1)) #缩放到-1到1之间
scaler.fit(data_train) #fit:计算出最大值和最小值
data_train = scaler.transform(data_train) #归一化处理
data_test = scaler.transform(data_test)
2、同步预测-回归
属于回归问题,即输入共500维特征,输出1维特征;同步预测,主要使用多层感知机(MLP),损失函数用均方误差(MSE)。
- 划分特征和标签
X_train = data_train[:, 1:] #特征
y_train = data_train[:, 0] #标签
X_test = data_test[:, 1:]
y_test = data_test[:, 0]
- 结构定义
input_dim = X_train.shape[1] #输入维数
hidden_1 = 1024 #隐藏层层数
hidden_2 = 512
hidden_3 = 256
hidden_4 = 128
output_dim = 1 #输出维度
batch_size = 256 #批数据的大小
epochs = 10
将代码reset一下,避免块反复调用引起错误
tf.reset_default_graph()
- 模型构建
X = tf.placeholder(shape=[None, input_dim], dtype=tf.float32) #shape是设置维数
Y = tf.placeholder(shape=[None], dtype=tf.float32)
# 模型的参数设置
W1 = tf.get_variable('W1', [input_dim, hidden_1], initializer=tf.contrib.layers.xavier_initializer(seed=1))
b1 = tf.get_variable('b1', [hidden_1], initializer=tf.zeros_initializer())
W2 = tf.get_variable('W2', [hidden_1, hidden_2], initializer=tf.contrib.layers.xavier_initializer(seed=1))
b2 = tf.get_variable('b2', [hidden_2<