深度学习:基于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']

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())

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'])

相关文章:
深度学习:基于TensorFlow、Keras,使用长短期记忆神经网络模型(LSTM)对Microsoft股票进行预测分析
前言 系列专栏:机器学习:高级应用与实践【项目实战100】【2024】✨︎ 在本专栏中不仅包含一些适合初学者的最新机器学习项目,每个项目都处理一组不同的问题,包括监督和无监督学习、分类、回归和聚类,而且涉及创建深度学…...
【websocket-客户端可视化工具】
postman 新版postman (版本v11以上) ,除了http协议,还支持了Websocket,MQTT,gRPC等多种连接协议,可以作为多种协议的客户端,使用起来非常方便。 使用 服务端代码 这里以websocket协议举例,代…...
STC8增强型单片机开发——C51版本Keil环境搭建
一、目标 了解C51版本Keil开发环境的概念和用途掌握C51版本Keil环境的安装和配置方法熟悉C51版本Keil开发环境的使用 二、准备工作 Windows 操作系统Keil C51 安装包(可以从Keil官网下载)一款8051单片机开发板 三、搭建流程 环境搭建的基本流程…...
Ansible——playbook编写
目录 环境配置 一、简介 1.什么是playbook 2.playbook组成 二、应用实例 1.基础命令 1.编写 ceshi1.yaml 文件 2.运行Playbook 2.定义、引用变量 1.编写ceshi2.yaml文件 3.指定远程主机sudo切换用户 1.编写ceshi3.yaml文件 2.修改被控主机sudoers文件 3.给zhangsa…...
95、动态规划-编辑距离
递归暴力解法 递归方法的基本思想是考虑最后一个字符的操作,然后根据这些操作递归处理子问题。 递归函数定义:定义一个递归函数 minDistance(i, j),表示将 word1 的前 i 个字符转换成 word2 的前 j 个字符所需的最小操作数。 递归终止条件…...
linux调试
文章目录 1. 使用打印来调试1.1 重定向1.2 标准预定义宏1.3 日志代码 2. 内核异常2.1 内核打印2.1.1 打印级别2.1.2 跟踪异常2.1.3 动态打印2.1.4 RAM console 2.2 OOPS2.2.1 有源代码的情况2.2.2 没有源代码的情况 3 查看日志4 工具调试 1. 使用打印来调试 1.1 重定向 2>…...
【C++】string类的使用②(容量接口Capacity || 元素获取Element access)
🔥个人主页: Forcible Bug Maker 🔥专栏: STL || C 目录 前言🔥容量接口(Capacity)size和lengthcapacitymax_sizereserveresizeclearemptyshrink_to_fit 🔥元素获取(Ele…...
【漏洞复现】某小日子太阳能系统DataCube3审计
漏洞描述 某小日子太阳能系统DataCube3终端测量系统 多个漏洞利用方式 免责声明 技术文章仅供参考,任何个人和组织使用网络应当遵守宪法法律,遵守公共秩序,尊重社会公德,不得利用网络从事危害国家安全、荣誉和利益,未经授权请勿利用文章中的技术资料对任何计算机系统进…...
探索Java的未来
目录 一、云计算与大数据 二、人工智能与机器学习 三、物联网与边缘计算 四、安全性与性能优化 五、社区与生态 Java,作为一种广泛使用的编程语言,自其诞生以来就以其跨平台性、面向对象特性和丰富的库资源赢得了开发者的青睐。然而,随着…...
Web3 ETF软件开发
开发Web3 ETF软件涉及到金融、法律和技术等多个领域的专业知识,因此存在以下技术难点,开发Web3 ETF软件是一项复杂的技术挑战,需要综合考虑各种因素。开发人员需要具备较强的技术能力和跨学科知识才能成功开发Web3 ETF软件。北京木奇移动技术…...
初始MySQL
初始化MySQL数据库通常涉及以下步骤: 下载并安装MySQL: 你可以从MySQL官方网站下载适合你的操作系统的MySQL安装包。安装时,遵循安装向导的步骤,通常包括选择安装位置、选择组件(例如MySQL服务器、MySQL Workbench等&a…...
STM32项目下载清单(不定时更新)
收集的一些资料,分享下载 电赛一等奖作品,老人健康监测智能手表(STM32F4主控) STM32数字示波器源码数字信号处理教程、配套实例基于stm32 nucleo_L476的智能灯(操作说明源码)基于STM32 NUCLEO板设计彩色LE…...
thinkphp5 配合阿里直播实现直播功能流程
要为你提供一个更详细的教程来结合ThinkPHP 5和阿里直播SDK实现直播功能,需要涵盖的内容相对较多。不过,我可以为你提供一个大致的、更详细的步骤指南,供你参考和扩展: 1. 准备工作 a. 注册阿里云账号 前往阿里云官网注册账号&…...
安卓手机APP开发__媒体3格式转换器__常见问题解答
安卓手机APP开发__媒体3格式转换器__常见问题解答 目录 1 为什么在示例的APP中我不能读取到本地的文件? 2 在一个特定的设备为什么导出失败? 3 媒体3格式转换器支持转码(或者是录制)远程的媒体吗? 4 媒体3格式转换…...
leetcode-有重复数字的全排列-98
题目要求 思路 1.同【没有重复项的全排列-97】这个题一样,都是递归的题,区别在于这个可能会包含重复的数字,因此,不能只是简单的通过两个值是否相等然后用标志位标记,而是新增了一个数组,这个数组专门用于…...
Unity数据持久化之XML
目录 数据持久化XML概述XML文件格式XML基本语法XML属性 C#读取存储XMLXML文件存放位置C#读取XML文件C#存储XML文件 实践小项目必备知识点XML序列化(不支持字典)XML反序列化IXmlSerializable接口让Dictionary支持序列化反序列化 数据持久化XML概述 什么是…...
Leetcode 226:翻转二叉树
给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。 思路:使用递归 //使用前序遍历翻转树public static TreeNode invertTree(TreeNode root){if(rootnull) return root;swap(root);invertTree(root.left);invertTree(root.rig…...
柯里化与无参装饰器
柯里化 柯里化的概念:柯里化(Currying)在Python中是一种编程技术,它将原本接受多个参数的函数转换为一系列接受单个参数的函数。这种方法以逻辑学家Haskell Curry的名字命名。 简而言之就是将一次函数调用变成先放入一个参数得到…...
Spring事务失效的场景
1. 事务方法执行期间出现了异常,但是并未指定rollbackFor: Spring默认只会在遇到error和RunTimeException时才会回滚。 public boolean rollbackon ( Throwable ex){return (ex instanceof RuntimeException || ex instanceof Error); } 2. 事务方法执行期间出现了…...
Python基础学习之datetime模块
在Python编程中,处理日期和时间是一个常见的需求。Python的datetime模块提供了丰富的类和方法,用于表示和操作日期、时间、时间间隔等。本文将详细介绍Python的datetime模块,并给出一些实用的示例。 1. datetime模块概览 datetime模块是Pyt…...
J-Link驱动签名被拦?手把手教你用WHQL签名驱动搞定Windows 11安全策略
J-Link驱动签名被拦?手把手教你用WHQL签名驱动搞定Windows 11安全策略 最近在帮团队调试一批新的STM32H7开发板时,遇到了一个令人头疼的问题:明明上周还能正常使用的J-Link调试器,在新的Windows 11企业版电脑上突然无法识别了。设…...
革新性硬件控制工具:OmenSuperHub实现游戏本性能优化与完全掌控
革新性硬件控制工具:OmenSuperHub实现游戏本性能优化与完全掌控 【免费下载链接】OmenSuperHub 项目地址: https://gitcode.com/gh_mirrors/om/OmenSuperHub OmenSuperHub是一款专为惠普暗影精灵系列游戏本设计的开源硬件控制工具,提供完全离线的…...
麦橘超然Flux控制台快速体验:输入文字秒出高清图片
麦橘超然Flux控制台快速体验:输入文字秒出高清图片 1. 为什么选择Flux控制台 如果你正在寻找一个简单高效的AI图像生成工具,麦橘超然Flux控制台值得考虑。这个基于DiffSynth-Studio构建的Web服务,集成了majicflus_v1模型,通过fl…...
无数据库版Mirror照妖镜源码解析:如何安全改造为个人图片鉴黄工具
无数据库版Mirror照妖镜源码解析:如何安全改造为个人图片鉴黄工具 在当今内容爆炸的时代,图片审核成为许多个人开发者和内容创作者的刚需。传统解决方案往往依赖复杂的数据库系统和第三方API,而Mirror照妖镜的无数据库设计为轻量级图片审核提…...
Neeshck-Z-lmage_LYX_v2实际作品:基于LoRA微调的专属IP形象批量生成
Neeshck-Z-lmage_LYX_v2实际作品:基于LoRA微调的专属IP形象批量生成 1. 引言:从零到一,打造你的专属数字形象 想象一下,你需要为你的品牌、游戏或者社交媒体账号设计一套统一的视觉形象。传统的做法是找设计师,沟通需…...
提升效率:用快马一键生成网络应用用户认证api模块
最近在开发一个网络应用时,遇到了用户认证模块的重复开发问题。每次新建项目都要从头写注册登录逻辑,不仅耗时还容易出错。后来发现了InsCode(快马)平台的智能生成功能,帮我快速解决了这个问题。 用户认证模块的核心需求 网络应用中ÿ…...
AI写论文实用宝典,4款AI论文生成工具搞定各类论文写作!
在2025年的学术写作智能化浪潮中,越来越多的人开始依赖AI写论文工具进行创作。尽管这些工具的使用越来越普遍,但在撰写硕士、博士论文等较长篇幅的学术文章时,许多AI论文写作工具往往陷入缺乏理论深度和逻辑性不强的问题。普通的AI写专著或AI…...
FanControl:颠覆式开源风扇控制工具的全方位应用指南
FanControl:颠覆式开源风扇控制工具的全方位应用指南 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trending/fa/…...
收藏!程序员/小白入门大模型必看,我的AI学习踩坑与正确路线分享
很多程序员和小白同学都私信我说,想入门AI、学习大模型,但始终找不到清晰的切入点,不知道该从哪里开始,也没有适合自己的学习路线。我深耕技术领域多年,从前端自学起步,后来转型学习AI与大模型,…...
G-Helper高效解决ROG游戏本散热与性能平衡难题
G-Helper高效解决ROG游戏本散热与性能平衡难题 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops. Control tool for ROG Zephyrus G14, G15, G16, M16, Flow X13, Flow X16, TUF, Strix, Scar and other models 项目地址: https://gitcode…...
