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

股票交易

前言

系列专栏:机器学习:高级应用与实践【项目实战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.mzph.cn/pingmian/6245.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

等保测评考试培训题

等保2.0培训考试题目 一、网络安全法第几条,规定国家实行网络安全等级保护制度。 A、第五条 B、第十条 C、第十三条 D、第二十一条 二、等级保护有几个安全保护级别? A、3个 B、4个 C、5个 D、6个 三、什么样的系统可以作为定级对象&#…

UNIAPP小程序从入门到精通

第一章> 1、如何创建项目 2、项目的基本结构 3、页面组成(wxss可以不用) 4、组件的使用 5、协同开发与发布 第二章> 6、WXML页面结构渲染 7、style样式美化 8、a…

分享我的github仓库

这是一个由现代C编写的小型、学习性质的服务器框架,包含压缩,序列化,IO调度,Socket封装,文件配置,日志库等多个完整自研模块,欢迎到我的仓库阅读代码和安装体验,期待任何的建议和反馈…

Docker 加持的安卓手机:随身携带的知识库(一)

这篇文章聊聊,如何借助 Docker ,尝试将一台五年前的手机,构建成一个随身携带的、本地化的知识库。 写在前面 本篇文章,我使用了一台去年从二手平台购入的五年前的手机,K20 Pro。 为了让它能够稳定持续的运行&#xf…

C++, 简单 http 下的 POST 和 Get

#pragma once #include <Windows.h> #include <winsock.h> #include <sstream> #include <iostream> #pragma comment(lib,"ws2_32.lib")class WinHttp { public:WinHttp(){//此处一定要初始化一下&#xff0c;否则gethostbyname返回一直为空…

如何从Mac电脑恢复任何删除的视频

Microsoft Office是包括Mac用户在内的人们在世界各地创建文档时使用的最佳软件之一。该软件允许您创建任何类型的文件&#xff0c;如演示文稿、帐户文件和书面文件。您可以使用 MS Office 来完成。所有Microsoft文档都可以在Mac上使用。大多数情况下&#xff0c;您处理文档&…

手搓堆(C语言)

Heap.h #pragma once#include <stdio.h> #include <stdlib.h> #include <assert.h> #include <stdbool.h> #include <string.h> typedef int HPDataType; typedef struct Heap {HPDataType* a;int size;int capacity; }Heap;//初始化 void Heap…

node.js中的fs模块,读写语法讲解

本文分享node.js的入门知识&#xff0c;使用 fs 模块封装的方法读写文件内容 node中的fs 模块&#xff1a;封装了与本机文件系统进行交互的&#xff0c;方法和属性&#xff0c;使用语法如下&#xff1a; 1、加载 fs 模块&#xff0c;得到 fs 对象 const fs require(fs) 2、…

软件工程习题答案2024最新版

习题一答案 一、选择题 软件的主要特性是(A B C)。 A) **无形 **B) 高成本 C) **包括程序和文档 ** D) 可独立构成计算机系统 软件工程三要素是(B)。 A) 技术、方法和工具 B) 方法、工具和过程 C) 方法、对象和类 D) 过程、模型、方法 包含风险分析的软件工程模型是(A)…

Java注解处理器:自定义注解的自动化处理

引言 在Java编程中&#xff0c;注解&#xff08;Annotation&#xff09;是一种重要的元数据&#xff0c;它为代码提供了额外的信息。注解处理器&#xff08;Annotation Processor&#xff09;是Java编译过程中的一部分&#xff0c;它可以在编译时期读取注解信息并执行特定的处…

深度学习之基于Matlab BP神经网络烟叶成熟度分类

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景 烟叶的成熟度是评估烟叶品质的重要指标之一&#xff0c;它直接影响着烟叶的口感、香气和理化特性。传…

python基础算法题0502

数字反转 无论是字符串反转还是数字反转&#xff0c;其实都一样。 需求 代码 class Solution:def reverse(self, x: int) -> int:if 0 < x < 2 ** 31 - 1:m str(x)[::-1]if int(m)<2**31-1:return int(m)else:return 0if 0 > x > -2 ** 31:y -xn str(y…

uniapp 监听APP切换前台、后台插件 Ba-Lifecycle

监听APP切换前台、后台 Ba-Lifecycle 简介&#xff08;下载地址&#xff09; Ba-Lifecycle 是一款uniapp监听APP切换前台、后台的插件&#xff0c;简单易用。 截图展示 也可关注博客&#xff0c;实时更新最新插件&#xff1a; uniapp 常用原生插件大全 使用方法 在 script…

华为机考入门python3--(19)牛客19- 简单错误记录

分类&#xff1a;字符串 知识点&#xff1a; 分割字符串 my_str.split(\\) 字符串只保留最后16位字符 my_str[-16:] 列表可以作为队列、栈 添加元素到第一个位置 my_list.insert(0, elem) 增加元素到最后一个位置 my_list.append(elem) 删除第一个 my_list.pop(0)…

SAP_SD模块-销售批次策略应用记录

一、销售批次查找策略的重要性 批次查找策略允许企业在销售过程中根据预定义的规则自动选择最适合的产品批次。这种策略的实施&#xff0c;对企业尤其是那些涉及到严格产品质量与安全标准的行业&#xff08;如食品、药品及化工产品&#xff09;具有以下几方面的重要意义&#x…

[方法] Unity 实现仿《原神》第三人称跟随相机 v1.0

参考网址&#xff1a;【Unity中文课堂】RPG战斗系统Plus 在Unity游戏引擎中&#xff0c;实现类似《原神》的第三人称跟随相机并非易事&#xff0c;但幸运的是&#xff0c;Unity为我们提供了强大的工具集&#xff0c;其中Cinemachine插件便是实现这一目标的重要工具。Cinemachi…

从键入网址到网页显示,期间发生了什么?

从键入网址到网页显示&#xff0c;期间发生了什么&#xff1f; 孤单小弟【HTTP】真实地址查询【DNS】指南帮手【协议栈】可靠传输【TCP】远程定位【IP】两点传输【MAC】出口【网卡】送别者【交换机】出境大门【路由器】互相扒皮【服务器与客户端】相关问答 不少小伙伴在面试过程…

常用外贸营销软件推荐

在外贸营销中&#xff0c;选择合适的软件工具可以极大地提高工作效率和营销效果。以下是一些常用的外贸营销软件推荐&#xff1a; 易谷歌地图数据采集大师&#xff1a;专为做外贸的朋友开发的一款基于谷歌地图数据采集的软件&#xff0c;可以采集任意国家、任意地区的公司地址、…

《21天学通C++》(第十五章)标准模板库简介

本章简单介绍STL容器、迭代器和算法的基本概念&#xff0c;之后几章会分别详述 1.STL容器 STL容器是STL中用于存储集合数据的组件&#xff0c;它们可以被看作是模板类&#xff0c;允许开发者定义特定类型的容器发&#xff0c;这里按照C11标准分为四类&#xff1a;顺序容器、关…

Qt5 框架学习及应用 — 对象树

Qt 对象树 对象树概念Qt为什么使用对象树 &#xff1f;将对象挂到对象树上 对象树概念 对象树&#xff1a;对于树的概念&#xff0c;相信许多学过数据结构的同学应该都不会陌生。在学习数据结构的时候我们所接触的什么二叉树、多叉树、哈夫曼树、AVL树、再到红黑树、B/B树………