TensorFlow深度学习!构建神经网络预测股票价格!?


TensorFlow深度学习!构建神经网络预测股票价格!?

文章插图
作者:韩信子@ShowMeAI 深度学习实战系列:https://www.showmeai.tech/tutorials/42 TensorFlow 实战系列:https://www.showmeai.tech/tutorials/43 本文地址:https://www.showmeai.tech/article-detail/327 声明:版权所有,转载请联系平台与作者并注明出处 收藏ShowMeAI查看更多精彩内容

TensorFlow深度学习!构建神经网络预测股票价格!?

文章插图
股票价格数据是一个时间序列形态的数据,诚然,股市的涨落和各种利好利空消息更相关 , 更多体现的是人们的信心状况,但是它的形态下,时序前后是有一定的相关性的,我们可以使用一种特殊类型的神经网络『循环神经网络 (RNN)』来对这种时序相关的数据进行建模和学习 。
TensorFlow深度学习!构建神经网络预测股票价格!?

文章插图
在本篇内容中 , ShowMeAI将给大家演示 , 如何构建训练神经网络并将其应用在股票数据上进行预测 。
TensorFlow深度学习!构建神经网络预测股票价格!?

文章插图
对于循环神经网络的详细信息讲解 , 大家可以阅读ShowMeAI整理的系列教程和文章详细了解:
  • 深度学习教程:吴恩达专项课程 · 全套笔记解读
  • 深度学习教程 | 序列模型与RNN网络
  • 自然语言处理教程:斯坦福CS224n课程 · 课程带学与全套笔记解读
  • NLP教程(5) - 语言模型、RNN、GRU与LSTM
数据获取在实际建模与训练之前,我们需要先获取股票数据 。下面的代码使用 Ameritrade API 获取并生成数据,也可以使用其他来源 。
import matplotlib.pyplot as pltimport mplfinance as mplimport pandas as pdtd_consumer_key = 'YOUR-KEY-HERE'# 美国航空股票ticker = 'AAL'##periodType - day, month, year, ytd##period - number of periods to show##frequencyTYpe - type of frequency for each candle - day, month, year, ytd##frequency - the number of the frequency type in each candle - minute, daily, weeklyendpoint = 'https://api.tdameritrade.com/v1/marketdata/{stock_ticker}/pricehistory?periodType={periodType}&period={period}&frequencyType={frequencyType}&frequency={frequency}'# 获取数据full_url = endpoint.format(stock_ticker=ticker,periodType='year',period=10,frequencyType='daily',frequency=1)page = requests.get(url=full_url,params={'apikey' : td_consumer_key})content = json.loads(page.content)# 转成pandas可处理格式df = pd.json_normalize(content['candles'])# 设置时间戳为索引df['timestamp'] = pd.to_datetime(df.datetime, unit='ms')df = df.set_index("timestamp")# 绘制数据plt.figure(figsize=(15, 6), dpi=80)plt.plot(df['close'])plt.legend(['Closing Price'])plt.show()# 存储前一天的数据df["previous_close"] = df["close"].shift(1)df = df.dropna() # 删除缺失值# 存储df.to_csv('../data/stock_'+ticker+'.csv', mode='w', index=True, header=True)
TensorFlow深度学习!构建神经网络预测股票价格!?

文章插图
上面的代码查询 Ameritrade API 并返回 10 年的股价数据,例子中的股票为『美国航空公司』 。数据绘图结果如下所示:
TensorFlow深度学习!构建神经网络预测股票价格!?

文章插图
数据处理【TensorFlow深度学习!构建神经网络预测股票价格!?】我们加载刚才下载的数据文件,并开始处理预测 。
# 读取数据ticker = 'AAL'df = pd.read_csv("../data/stock_"+ticker+".csv")# 设置索引df['DateIndex'] = pd.to_datetime(df['timestamp'], format="%Y/%m/%d")df = df.set_index('DateIndex')下面我们对数据进幅度缩放,以便更好地送入神经网络和训练 。(神经网络是一种对于输入数据幅度敏感的模型,不同字段较大的幅度差异 , 会影响网络的训练收敛速度和精度 。)
# 幅度缩放df2 = dfcols = ['close', 'volume', 'previous_close']features = df2[cols]scaler = MinMaxScaler(feature_range=(0, 1)).fit(features.values)features = scaler.transform(features.values)df2[cols] = features在这里 , 我们重点处理了收盘价、成交量和前几天收盘价列 。
数据切分接下来我们将数据拆分为训练和测试数据集 。
# 收盘价设为目标字段X = df2.drop(['close','timestamp'], axis =1)y = df2['close']import math# 计算切分点(以80%的训练数据为例)train_percentage = 0.8split_point = math.floor(len(X) * train_percentage)# 时序切分train_x, train_y = X[:split_point], y[:split_point]test_x, test_y = X[split_point:], y[split_point:]接下来,我们对数据进行处理 , 构建滑窗数据,沿时间序列创建数据样本 。(因为我们需要基于历史信息对未来的数值进行预测)

推荐阅读