来自股票价格预测bilibili课程。
源自jupyter notebook文件main.ipynb。
代码用tf1书写,使用tf2会因为版本不对应而报错,tf2版本的代码后续再研究

股票价格预测

  • 1、数据初步处理
    • - 导入库
    • - 导入数据库
    • - 一些数据处理的指令
    • - 数据集分割
    • - 归一化处理数据
  • 2、同步预测-回归
    • - 划分特征和标签
    • - 结构定义
    • - 模型构建
    • - 损失函数计算
    • - 模型运行
  • 3、利用keras实现同步预测
    • - 引入包;初始化定义参数
    • - 模型定义
    • - 模型运行
  • 4、异步预测-LSTM
    • - 引入包;初始化定义参数
    • - 参数设置
    • - LSTM模型训练
  • 5、异步预测-多特征量
    • - 引入包;初始化定义参数
    • - 参数设置
    • - LSTM模型训练

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], initializer=tf.zeros_initializer())
W3 = tf.get_variable('W3', [hidden_2, hidden_3], initializer=tf.contrib.layers.xavier_initializer(seed=1))
b3 = tf.get_variable('b3', [hidden_3], initializer=tf.zeros_initializer())
W4 = tf.get_variable('W4', [hidden_3, hidden_4], initializer=tf.contrib.layers.xavier_initializer(seed=1))
b4 = tf.get_variable('b4', [hidden_4], initializer=tf.zeros_initializer())
W5 = tf.get_variable('W5', [hidden_4, output_dim], initializer=tf.contrib.layers.xavier_initializer(seed=1))
b5 = tf.get_variable('b5', [output_dim], initializer=tf.zeros_initializer())
#matmul是矩阵乘,相当于公式w1*X+b1构建全连接层
h1 = tf.nn.relu(tf.add(tf.matmul(X, W1), b1))
h2 = tf.nn.relu(tf.add(tf.matmul(h1, W2), b2))
h3 = tf.nn.relu(tf.add(tf.matmul(h2, W3), b3))
h4 = tf.nn.relu(tf.add(tf.matmul(h3, W4), b4))
out = tf.transpose(tf.add(tf.matmul(h4, W5), b5)) #transpose转置

- 损失函数计算

cost = tf.reduce_mean(tf.squared_difference(out, Y)) #预测值(out)与真实值(Y)的平方均值[squared_difference:差的平方;reduce_mean:取均值]
optimizer = tf.train.AdamOptimizer().minimize(cost) #优化器是使损失cost尽量最小

- 模型运行

with tf.Session() as sess:sess.run(tf.global_variables_initializer()) #全局变量参数初始化for e in range(epochs): #每一个epochs中shuffle_indices = np.random.permutation(np.arange(y_train.shape[0])) #获得一个打乱的索引X_train = X_train[shuffle_indices]y_train = y_train[shuffle_indices]for i in range(y_train.shape[0] // batch_size): #数据总条数/批数据=一共的批数start = i * batch_sizebatch_x = X_train[start : start + batch_size] #创造批数据batch_y = y_train[start : start + batch_size]sess.run(optimizer, feed_dict={X: batch_x, Y: batch_y}) #用批数据来计算模型if i % 50 == 0:print('MSE Train:', sess.run(cost, feed_dict={X: X_train, Y: y_train}))print('MSE Test:', sess.run(cost, feed_dict={X: X_test, Y: y_test}))y_pred = sess.run(out, feed_dict={X: X_test}) #使用x_test预测得到预测值y_predy_pred = np.squeeze(y_pred) #去掉维度plt.plot(y_test, label='test')plt.plot(y_pred, label='pred') #原始值和预测值的曲线比较plt.title('Epoch ' + str(e) + ', Batch ' + str(i))plt.legend()plt.show()

3、利用keras实现同步预测

- 引入包;初始化定义参数

from keras.layers import Input, Dense
from keras.models import ModelX_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

- 模型定义

X = Input(shape=[input_dim,]) #','后面写数据个数[与之前的区别]
h = Dense(hidden_1, activation='relu')(X) #激活函数用'relu'
h = Dense(hidden_2, activation='relu')(h)
h = Dense(hidden_3, activation='relu')(h)
h = Dense(hidden_4, activation='relu')(h)
Y = Dense(output_dim, activation='sigmoid')(h) #最后一层激活函数用'sigmoid'

- 模型运行

model = Model(X, Y)
model.compile(loss='mean_squared_error', optimizer='adam') #直接设定损失函数和优化器形式
model.fit(X_train, y_train, epochs=epochs, batch_size=batch_size, shuffle=False) #shuffle设为false保证了时间序列关系不变
y_pred = model.predict(X_test) #用该模型计算出预测值
print('MSE Train:', model.evaluate(X_train, y_train, batch_size=batch_size))
print('MSE Test:', model.evaluate(X_test, y_test, batch_size=batch_size))
plt.plot(y_test, label='test')
plt.plot(y_pred, label='pred')
plt.legend()
plt.show()

4、异步预测-LSTM

异步预测是指使用历史若干时刻大盘指数,预测当前时刻的大盘指数,即[None,5,1]=>[None,1],涉及时序关系,使用Keras实现异步预测,主要使用RNN中的LSTM(Long Short-Term Memory)

- 引入包;初始化定义参数

from keras.layers import Input, Dense, LSTM
from keras.models import Modeloutput_dim = 1
batch_size = 256
epochs = 10
seq_len = 5 #序列(5个预测1个)
hidden_size = 128 #隐藏层1个

- 参数设置

# 实际是取股票股价那一列进行运算
X_train = np.array([data_train[i : i + seq_len, 0] for i in range(data_train.shape[0] - seq_len)])[:, :, np.newaxis]
y_train = np.array([data_train[i + seq_len, 0] for i in range(data_train.shape[0] - seq_len)])X_test = np.array([data_test[i : i + seq_len, 0] for i in range(data_test.shape[0] - seq_len)])[:, :, np.newaxis]
y_test = np.array([data_test[i + seq_len, 0] for i in range(data_test.shape[0] - seq_len)])# print(X_train.shape, y_train.shape, X_test.shape, y_test.shape)  #数据类型显示X = Input(shape=[X_train.shape[1], X_train.shape[2],])
h = LSTM(hidden_size, activation='relu')(X)
Y = Dense(output_dim, activation='sigmoid')(h)

- LSTM模型训练

model = Model(X, Y)
model.compile(loss='mean_squared_error', optimizer='adam')
model.fit(X_train, y_train, epochs=epochs, batch_size=batch_size, shuffle=False)
y_pred = model.predict(X_test)
print('MSE Train:', model.evaluate(X_train, y_train, batch_size=batch_size))
print('MSE Test:', model.evaluate(X_test, y_test, batch_size=batch_size))
plt.plot(y_test, label='test')
plt.plot(y_pred, label='pred')
plt.legend()
plt.show()

5、异步预测-多特征量

使用历史若干时刻500支个股股价及大盘指数,预测当前大盘指数,即[None,5,501]=>[None,1]

- 引入包;初始化定义参数

from keras.layers import Input, Dense, LSTM
from keras.models import Modeloutput_dim = 1
batch_size = 256
epochs = 10
seq_len = 5
hidden_size = 128

- 参数设置

区别在于取了所有列的数据,即个股股价,而非只取大盘指数那一列。

X_train = np.array([data_train[i : i + seq_len, :] for i in range(data_train.shape[0] - seq_len)])
y_train = np.array([data_train[i + seq_len, 0] for i in range(data_train.shape[0] - seq_len)])
X_test = np.array([data_test[i : i + seq_len, :] for i in range(data_test.shape[0] - seq_len)])
y_test = np.array([data_test[i + seq_len, 0] for i in range(data_test.shape[0] - seq_len)])print(X_train.shape, y_train.shape, X_test.shape, y_test.shape)
#为(33007,5,501)(33007,)(8249,5,501)(8249,)
X = Input(shape=[X_train.shape[1], X_train.shape[2],]) #其中第一项为5,第二项为501,第三个','则是全部数据量
h = LSTM(hidden_size, activation='relu')(X)
Y = Dense(output_dim, activation='sigmoid')(h)

- LSTM模型训练

model = Model(X, Y)
model.compile(loss='mean_squared_error', optimizer='adam')
model.fit(X_train, y_train, epochs=epochs, batch_size=batch_size, shuffle=False)
y_pred = model.predict(X_test)
print('MSE Train:', model.evaluate(X_train, y_train, batch_size=batch_size))
print('MSE Test:', model.evaluate(X_test, y_test, batch_size=batch_size))
plt.plot(y_test, label='test')
plt.plot(y_pred, label='pred')
plt.legend()
plt.show()

最后结果并不是最好,loss变大了,说明特征多并不是最好,会引入噪音。

[人工智能学习日志]深度学习-股票价格预测案例1相关推荐

  1. [人工智能学习日志]深度学习-LSTM共享单车使用量预测

    LSTM共享单车使用量预测 1.加载数据集.数据可视化.预处理 - 引入包 - 加载数据集 - 数据集描述方式 - 数据集可视化处理 5.模型搭建.编译.训练 - 模型搭建 - 模型编译 - 保持模型 ...

  2. 【人工智能项目】深度学习实现白葡萄酒品质预测

    [人工智能项目]深度学习实现白葡萄酒品质预测 任务介绍 评价一款葡萄酒时不外乎从颜色.酸度.甜度.香气.风味等入手,而决定这些就是葡萄酒的挥发酸度.糖分.密度等. 根据给出的白葡萄酒酸度.糖分.PH值 ...

  3. python3人工智能网盘_《Python3入门人工智能掌握机器学习+深度学习提升实战能力》百度云网盘资源分享下载[MP4/5.77GB]...

    内容简介 本资源为<Python3入门人工智能掌握机器学习+深度学习提升实战能力>百度云网盘资源分享下载,具体看下文目录,格式为MP4/5.77GB.本资源已做压缩包处理,请勿直接在百度网 ...

  4. 人工智能,机器学习,深度学习入门好文,强烈推荐

    让我们从机器学习谈起 导读:在本篇文章中,将对机器学习做个概要的介绍.本文的目的是能让即便完全不了解机器学习的人也能了解机器学习,并且上手相关的实践.当然,本文也面对一般读者,不会对阅读有相关的前提要 ...

  5. 【人工智能项目】深度学习实现汉字书法识别

    [人工智能项目]深度学习实现汉字书法识别 背景介绍 竞赛数据提供100个汉字书法单字,包括碑帖,手写书法,古汉字等.图片全部为单通道宽度jpg,宽高不定. 数据集介绍 训练集:每个汉字400张图片,共 ...

  6. 【人工智能项目】- 深度学习实现猫狗大战

    [人工智能项目]- 深度学习实现猫狗大战 本次实现猫狗大战,实质上就是猫狗的二分类任务. 环境 !nvidia-smi Mon Jun 22 04:24:29 2020 +-------------- ...

  7. 【人工智能项目】深度学习实现10类猴子细粒度识别

    [人工智能项目]深度学习实现10类猴子细粒度识别 任务说明 本次比赛需要选手准确识别10种猴子,数据集只有图片,没有boundbox等标注数据. 环境说明 !nvidia-smi Fri Mar 27 ...

  8. 人工智能趋势与深度学习算法

    人工智能趋势与深度学习算法 1 前沿技术 1.1 Transformer模型: 1.2 BERT模型:基于Transformer Encoder构建的预测模型 1.3 自监督学习(Self-super ...

  9. 【人工智能项目】深度学习实现胸腔X光肺炎检测

    [人工智能项目]深度学习实现胸腔X光肺炎检测 本次主要是任务:训练模型正确识别肺炎X光图片,0=正常,1=肺炎. 那么代码走起!!! 导包 # 导包 import numpy as np import ...

最新文章

  1. bootstrap Table API和一些简单使用方法
  2. 36 张图详解 DNS :网络世界的导航
  3. 【虚拟机】虚拟机(Vmware)怎么进入BIOS
  4. linux启动程序api编程,Linux编程中关于API函数与系统调用间关系
  5. Windows蓝屏(Beginning Dump of Physical Memory)
  6. teraterm 执行sql命令_tera term的ttl脚本使用方法 | 学步园
  7. anaconda安装的TensorFlow版本没有model这个模块
  8. Angular Reactive Form里的setNgReflectProperty
  9. EF使用CodeFirst创建数据库和表
  10. unbuntu 启动任务脚本_Ubuntu下服务启动脚本编写
  11. ZeroMQ--使用jzmq进行编程
  12. Python-18-类的内置属性
  13. 计算机电子表格的相关试题,(统考计算机模拟练习试题及答案电子表格.doc
  14. 【Linux】【Services】【Package】编译安装
  15. 关于安装PHP补装PDO与PDO_MYSQL操作
  16. poj 2387 最短路 spfa 实现
  17. 密歇根州立大学计算机专业排名,密歇根州立大学优势专业及优势专业排名(QS世界排名)...
  18. 哈佛,斯坦福和麻省理工学院等投资加密货币基金
  19. 恒星绕太阳转css,CSS3 宇宙/恒星/小行星动画
  20. Pathon 编写程序在屏幕中心绘制正方形

热门文章

  1. linux无date命令,linux – Bash date命令无效日期
  2. android AutoCompleteTextView 实现手机号格式化,附带清空历史的操作
  3. Android状态栏微技巧
  4. CNNFeatures Off-the-Shelf: An Astounding Baseline for Recognition
  5. 微信小程序 iOS支付
  6. 浏览器内核-一张图看懂
  7. word设置标题格式与编号
  8. 老照片特效 php,PHP教程:php利用imagemagick实现复古老照片效果实例
  9. Socket与Websocket
  10. 4G网络数据传输流程与速率分析系列(一)