深度学习:基于TensorFlow、Keras,使用长短期记忆神经网络模型(LSTM)对Microsoft股票进行预测分析

news/2024/9/23 2:41:55/

股票交易

前言

系列专栏:机器学习:高级应用与实践【项目实战100+】【2024】✨︎
在本专栏中不仅包含一些适合初学者的最新机器学习项目,每个项目都处理一组不同的问题,包括监督和无监督学习、分类、回归和聚类,而且涉及创建深度学习模型、处理非结构化数据以及指导复杂的模型,如卷积神经网络、门控循环单元、大型语言模型和强化学习模型

在本文中,我们将使用机器学习技术实现 Microsoft 股价预测。我们将使用 TensorFlow,这是一个由 Google 开发的开源 Python 机器学习框架。借助 TensorFlow,您可以轻松实现时间序列预测数据。由于股价预测是时间序列预测问题之一,我们将使用机器学习技术构建端到端的 Microsoft 股价预测。

目录

  • 1. 相关库和数据集
    • 1.1 相关库介绍
    • 1.2 数据集介绍
    • 1.3 描述性统计
    • 1.4数据的信息
  • 2. 数据清洗与处理
  • 3. 探索性数据分析
    • 3.1 股票的开盘、收盘价
    • 3.2 股票的交易量
    • 3.3 股票不同特征之间的相关性
  • 4. 数据建模(循环神经网络模型)
    • 4.1 数据准备(拆分为训练集和测试集)
    • 4.2 模型构建(LSTM)
    • 4.3 编译和拟合
    • 4.4 模型评估

1. 相关库和数据集

1.1 相关库介绍

Python 库使我们能够非常轻松地处理数据并使用一行代码执行典型和复杂的任务。

  • Pandas – 该库有助于以 2D 数组格式加载数据框,并具有多种功能,可一次性执行分析任务。
  • Numpy – Numpy 数组速度非常快,可以在很短的时间内执行大型计算。
  • Matplotlib/Seaborn – 此库用于绘制可视化效果,用于展现数据之间的相互关系。
  • Sklearn – 包含多个库,这些库具有预实现的功能,用于执行从数据预处理到模型开发和评估的任务。
  • Tensorflow – TensorFlow 是由 Google Developers 开发的机器学习框架,旨在使机器学习算法的实现变得轻而易举。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as snsfrom datetime import datetime
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import metrics
from keras.metrics import RootMeanSquaredError 
from sklearn.preprocessing import StandardScalerimport warnings 
warnings.filterwarnings("ignore") 

1.2 数据集介绍

现在,让我们加载包含可交易天数的 Microsoft 股票的 OHLC 数据的数据集。

df = pd.read_csv('Microsoft_Stock.csv') 

.head()函数根据位置返回对象的前 n 行。该函数可用于快速测试对象中的数据类型是否正确。

df.head()

数据对象的前五行

1.3 描述性统计

.describe()生成描述性统计信息。描述性统计包括总结数据集分布的中心倾向、分散性和形状的统计,不包括 NaN 值。

可分析数值序列和对象序列,以及混合数据类型的 DataFrame 列集。输出结果将根据所提供的数据而有所不同。

df.describe()

描述性统计

1.4数据的信息

.info()方法打印有关DataFrame的信息,包括索引dtype和列、非null值以及内存使用情况。

df.info()

数据的信息

2. 数据清洗与处理

更改 Date 的数据类型,将object的对象转化为datetime类型

df['Date'] = df['Date'].apply(lambda x: datetime.strptime(x, "%m/%d/%Y %H:%M:%S"))
df['Date']

datetime对象

3. 探索性数据分析

EDA是一种使用视觉技术分析数据的方法。它用于发现趋势和模式,或借助统计摘要和图形表示来检查假设。

3.1 股票的开盘、收盘价

plt.style.use("fivethirtyeight")
plt.plot(df['Date'], df['Open'], color="blue", label="open") 
plt.plot(df['Date'], df['Close'], color="green", label="close") 
plt.title("Microsoft Open-Close Stock") 
plt.legend() 

股票的开盘与收盘价

3.2 股票的交易量

交易量是指一段时间内(通常是一天内)易手的资产或证券的数量。例如,股票交易量是指每天开盘和收盘之间交易的证券股票数量。交易量以及交易量随时间的变化是技术交易者的重要输入。

plt.plot(df['Date'], df['Volume']) 
plt.show()

股票的交易量

3.3 股票不同特征之间的相关性

相关性是一种衡量两个变量相对于彼此移动程度的统计数据,其值必须介于-1.0和+1.0之间。相关性衡量关联,但不显示 x 是否导致 y,反之亦然,或者关联是否由第三个因素引起。

sns.heatmap(df.corr(), annot=True, cbar=False) 
plt.show() 

股票不同特征之间的相关性
现在,让我们绘制 2015 年至 2021 年期间 Microsoft 股票的收盘价,即 6 年的时间跨度。
在这里插入图片描述

4. 数据建模(循环神经网络模型)

4.1 数据准备(拆分为训练集和测试集)

# prepare the training set samples 
msft_close = df.filter(['Close']) 
dataset = msft_close.values 
training = int(np.ceil(len(dataset) *.95)) # scale the data 
ss = StandardScaler() 
ss = ss.fit_transform(dataset) train_data = ss[0:int(training), :] x_train = [] 
y_train = [] # considering 60 as the batch size, 
# create the X_train and y_train 
for i in range(60, len(train_data)): x_train.append(train_data[i-60:i, 0]) y_train.append(train_data[i, 0]) x_train, y_train = np.array(x_train), np.array(y_train) 
X_train = np.reshape(x_train, (x_train.shape[0], x_train.shape[1], 1)) 

4.2 模型构建(LSTM)

为了解决时间序列或股价预测问题,我们建立了一个循环神经网络模型,该模型可以利用单元状态和记忆状态记忆之前的状态,非常方便。由于 RNN 难以训练和修剪消失梯度,我们使用了 LSTM,它是 RNN 的门控单元,LSTM 可以减少消失梯度问题。

model = keras.models.Sequential() 
model.add(keras.layers.LSTM(units=64, return_sequences=True, input_shape =(X_train.shape[1], 1))) 
model.add(keras.layers.LSTM(units=64)) 
model.add(keras.layers.Dense(128)) 
model.add(keras.layers.Dropout(0.5)) 
model.add(keras.layers.Dense(1)) print(model.summary()) 

LSTM

4.3 编译和拟合

在编译模型时,我们需要提供以下三个基本参数:

optimizer - 通过梯度下降法优化成本函数的方法。
loss - 损失函数,我们通过它来监控模型是否在训练中不断改进。
metrics - 通过预测训练数据和验证数据来评估模型。

model.compile(optimizer='adam', loss='mae', metrics = [metrics.MeanSquaredError(), metrics.AUC()]) history = model.fit(X_train, y_train, epochs=20) 

编译拟合过程
我们得到的平均绝对误差为 0.0661,接近完美误差分值。

4.4 模型评估

现在,我们已经准备好了模型,让我们用不同的指标来评估它在验证数据上的性能。为此,我们将首先使用该模型预测验证数据的类别,然后将输出结果与真实标签进行比较。

testing = ss[training - 60:, :] 
x_test = [] 
y_test = dataset[training:, :] 
for i in range(60, len(testing)): x_test.append(testing[i-60:i, 0]) x_test = np.array(x_test) 
X_test = np.reshape(x_test, (x_test.shape[0], x_test.shape[1], 1)) pred = model.predict(X_test) 

模型评估
现在,让我们绘制微软股票价格的已知数据和预测价格趋势图,看看它们是与之前的趋势一致,还是完全不同。

train = df[:training] 
test = df[training:] 
test['Predictions'] = pred plt.figure(figsize=(10, 8)) 
plt.plot(train['Close'], c="b") 
plt.plot(test[['Close', 'Predictions']]) 
plt.title('Microsoft Stock Close Price') 
plt.ylabel("Close") 
plt.legend(['Train', 'Test', 'Predictions']) 

在这里插入图片描述


http://www.ppmy.cn/news/1451668.html

相关文章

【图像超分】论文精读:CAMixerSR: Only Details Need More “Attention“

第一次来请先看这篇文章:【超分辨率(Super-Resolution)】关于【超分辨率重建】专栏的相关说明,包含专栏简介、专栏亮点、适配人群、相关说明、阅读顺序、超分理解、实现流程、研究方向、论文代码数据集汇总等) 文章目录 前言Abstract1. Introduction2. Related Work3. Met…

C++ | Date 日期类详解

目录 简介 日期类总代码 | Date 类的定义 & 构造 & Print 类的定义 构造函数 & Print 比较类&#xff0c;如<、>、<...... 值加减类&#xff0c;如、-、、-...... 加减类具体分类 判断某个月有多少天 GetMonthDay 日期类 / &#xff08;- / -&…

buuctf-misc-26.后门查杀

26.后门查杀 题目&#xff1a;火绒D盾查杀关键文件获取flag 下载完文件&#xff0c;我们可以用火绒进行查杀后门&#xff0c;一般解压后&#xff0c;火绒会自动查杀到病毒文件 病毒查杀-自定义查杀 找到了需要注意的文件&#xff0c;用vscode打开这个html,可以发现和md5比较相…

zeekeeper总结详解

目录 Zookeeper 概念Zookeeper 命令操作Zookeeper 数据模型ZooKeeper 命令操作Zookeeper 服务端常用命令Zookeeper 客户端常用命令 Curator 介绍Curator API 常用操作ZooKeeper分布式锁原理Curator实现分布式锁API ZooKeeper 集群搭建Zookeeper 集群介绍Zookeeper 集群角色 小结…

苹果CMS V10萌芽采集插件Pro v10.7.3

苹果CMS V10萌芽采集插件Pro v10.7.3 使用说明: 将addons文件和static文件放到你苹果cms程序的根目录并覆盖&#xff0c; 在登录后台在应用-应用市场启用。http://你的域名/admin.php/admin/mycj/union.html 插件源码下载&#xff1a;https://download.csdn.net/download/m…

Vitis HLS 学习笔记--HLS眼中的完美循环嵌套

目录 1. 简介 2. 示例 2.1 不完美循环 2.2 完美循环 2.3 HLS 眼中的循环 3. 总结 1. 简介 在处理嵌套循环时&#xff08;HDL或HLS工具中&#xff09;&#xff0c;优化循环结构对于实现最佳性能至关重要。嵌套循环的性能优化直接影响着计算的时延和资源利用率。创建完美嵌…

ubuntu 小工具

随着在专业领域待得越久&#xff0c;发现总会遇到各种奇怪的需求。因此&#xff0c;这里介绍一些ubuntu上的一些小工具。 meld 对比文件 sudo apt-get install meld sudo apt --fix-broken install # maybeHow to compare two files

MYSQL从入门到精通(二)

1、MYSQL高级概述 【1】架构概述 【2】索引优化 【3】查询截取 【4】mysql锁机制 【5】主从复制 2、MYSQL概述 【1】mysql内核 【2】sql优化工程师 【3】mysql服务器的优化 【4】各种参数常量设定 【5】查询语句优化 【6】主从复制 【7】软硬件升级 【8】容灾百分 【9】sql编…