线性回归实战:股价预测(未完)

2023-10-27


本文内容是对贪心科技课程第二章的笔记

问题描述剖析

我们制定的任务是:根据历史的股价数据,预测出5天之后的股价。有了这个预测值之后,我们就可以设计这样的买卖策略:如果5天之后的预测值大于现在的价格,就买进。当然,实操中用的买卖策略远比这个复杂得多。
首先,股价预测本身可以看作是回归问题,因为被预测的股价可以看作是具体的数值。但如果我们想预测的是未来股价的涨或者跌,那就变成分类问题了。
股价是有一定预测性的,但由于受到的外部因素很多,预测具有极高的挑战性。
在这里插入图片描述

数据预处理

理解股价数据

对于A股来讲,它的交易是T+1的形式,也就是当天购置的股票只能在第二天卖出。这区别于美股,可以在一天之内对已购置的股票再出售,所以这种交易模式可支持高频交易,但对于A股是不可能的。由于A股市场T+1特性,在建模时,我们更多关注的是按每日的股价的波动。
在这里插入图片描述

在这里插入图片描述根据上面两张图我们可以得出,一支股票样本的数据由日期,开盘,最高,最低,收盘,涨跌,成交,换手,振幅等这些特征组成。
我们预测的价格为收盘价。

数据清洗

在这里插入图片描述

对于上面的数据,我们首先希望以时间的维度做一个排序,因为我们的任务是预测未来5天之后的股价。所以,下面按照date字段,把所有的样本以时间的升序做个排序。

df['date'] = pd.to_datetime(df['date'])  # 把字符串转换成时间的格式 
df = df.set_index('date')  # 把date字段作为index 
# 按照时间升序排列,替换原来的数据
df.sort_values(by=['date'], inplace=True, ascending=True) 
df.head(10) 

在这里插入图片描述

构造训练数据

问题本身是回归问题,所以需要预测值。对于这次的任务,我们的目标是通过当日的数据特征去预测5天之后的股价。在数据中,暂时还没有包含这5天之后的股价。但构造的方式很简单,比如对于2016-11-29当天的数据,根据5天的规定,预测值设定为9.49(5天之后的收盘价),对于2016-11-30当天的数据,预测值设定为9.48,以此类推。所以在预测值的构造上,我们只需要把原来数据中的close字段的值往前挪5位就可以了。

num = 5
df['label'] = df['close'].shift(-num)  # 构造预测值,这里的num=5

在这里插入图片描述

处理NA字段

这样一来,我们拥有了数据特征,同时也拥有了对应的预测值。但由于预测值的构造过程中往前挪了5个位置,最后5位数据的标签没有,会出现na值。
在这里插入图片描述所以我们要舍弃na值,去掉这些值。

df,dropna(inplace = True)

在这里插入图片描述

数据归一化

为了解决字段值之间大小的差异,我们通常在训练模型前做归一化的操作。归一化的目的就是把每个字段转换到同等大小的区间来消除字段大小所带来的影响。 归一化通常有两种方法,第一种是 min-max归一化 ,第二种是 z-score归一化 。
特征缩放,线性归一化
在这里插入图片描述
特征缩放,标准差标准化
在这里插入图片描述
进行标准化,减去均值再除以标准差。这里把df所有数据都进行了标准化。只需要对特定几列做就可以了。

df = df.apply(
    lambda x: (x - x.mean()) / (x.std()))

构建模型

直接调用库构建简单的线性模型和均方误差损失函数

import torch
import torch.nn as nn

loss = torch.nn.MSELoss()

def get_net(feature_num):
    net = nn.Linear(feature_num, 1)
    for param in net.parameters():
        nn.init.normal_(param, mean=0, std=0.01)
    return net

训练数据和测试数据

提取特征值和预测值,分别保存为X, y两个变量中。

# 构建特征向量X,也就是数据中的X。由于我们要预测df['label']值,需要先去掉,不然就失去预测意义了。 
# 在本次预测任务中先不考虑"price_change"和"p_change"两个字段。 
X = df.drop(['price_change', 'label', 'p_change'],axis=1)
X = X.values

然后对X进行归一化或标准化

for x in X:
     lambda x: (x - x.mean()) / (x.std())

然后提取预测值y

y = df.label.values
#输出(606, 11) (606,)

把数据分为训练集和测试集

# 把数据分为训练和测试数据。我们把一开始的550个样本作为训练数据
#之后的样本作为测试数据
X_train, y_train = X[0:550, :], y[0:550]
X_test, y_test = X[550:606,:], y[550:606]
print(X_train.shape)
print(y_train.shape)
print(X_test.shape)
print(y_test.shape)

训练模型

设置相关参数,对模型训练

#学习率
lr = 0.03
#迭代周期个数
num_epochs = 5
#初始化模型
net = get_net(X_train.shape[1])
batch_size = 10

对模型进行评估

lr.score(X_test, y_test) # 使用绝对系数 R^2 评估模型

可视化结果

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

线性回归实战:股价预测(未完) 的相关文章

随机推荐

  • 高并发短信平台实现

    01 短信介绍 在项目介绍的时候 已经定义了austin项目的核心功能 发送消息 我认为 短信是在一整个消息推送平台里最重要的一个消息类型了 毕竟关联了很多重要的业务场景 想想我们日常使用APP时的场景 验证码 登录注册 支付等等重要场景
  • matplotlib 绘制Sigmoid函数,Tanh函数,ReLU函数

    import numpy as np import matplotlib pyplot as plt def sigmoid x return 1 1 np exp x def tanh x return np exp x np exp x
  • python global函数用法及常用的 global函数代码

    Python中的 global函数是用于在程序中定义变量的函数 在我们实际的开发中 我们可能会用到 global函数来定义变量 但是我们在这里就不具体介绍它的用法了 global函数定义变量的方法 global函数使用参数a来指定变量在程序
  • 外卖点餐系统小程序 PHP+UniAPP

    一 介绍 本项目是给某大学餐厅开发的外面点餐系统 该项目针对校内的学生 配送由学校的学生负责配送 因此 该项目不同于互联网的外卖点餐系统 该系统支持属于 Saas 系统 由平台端 商家端 用户端 以及配送端组成 其中 平台端 商家端是由基于
  • 520七夕表白,还不懂浪漫?4套代码教会你如何深情表白【建议收藏】❤️

    马上又到了脱单的黄金时刻 七夕啦 如果你有喜欢的女孩子 一定要趁着这个时候把喜欢说出口 但是该不会还有人表白在学校的操场上摆着爱心蜡烛抱一束花喊一堆人来围观吧 No 请你立刻马上放弃这个计划 毫无心意不说 对于女孩子来说是真的很社死啊 PS
  • linux 查看java安装目录

    这本阿里P8撰写的算法笔记 再次推荐给大家 身边不少朋友学完这本书最后加入大厂 Github 疯传 史上最强悍 阿里大佬 LeetCode刷题手册 开放下载了 获取java安装路径前要判断是否已经安装成功java 执行命令 java 1 U
  • 清晰图解,一图看懂图卷积GCN、时空图卷积ST-GCN

    目录 1 前言 2 普通卷积与图卷积 2 1 普通卷积 2 2 图卷积 3 ST GCN图卷积的代码解读 4 图卷积的缺陷 5 参考文献 6 联系方式 1 前言 本文为我阅读论文 Spatial Temporal Graph Convolu
  • 微信小程序API~GET

    框架提供丰富的微信原生API 可以方便的调起微信提供的能力 如获取用户信息 本地存储 支付功能等 1 wx on 开头的 API 是监听某个事件发生的API接口 接受一个 CALLBACK 函数作为参数 当该事件触发时 会调用 CALLBA
  • libmysqlclient.so.15: cannot open shared object file: No such file or directory

    libmysqlclient so 15 cannot open shared object file No such file or directory 分类 mysql服务器管理优化 2009 06 02 16 11 26769人阅读
  • DC系列漏洞靶场-渗透测试学习复现(DC-6)

    DC 6是一个易受攻击的实验环境 最终目的是让攻击者获得root权限 并读取flag DC 6使用的操作系统为Debian 64位 靶场下载链接 1 http www five86 com downloads DC 6 zip 2 http
  • P2141 [NOIP2014 普及组] 珠心算测验

    题目描述 珠心算是一种通过在脑中模拟算盘变化来完成快速运算的一种计算技术 珠心算训练 既能够开发智力 又能够为日常生活带来很多便利 因而在很多学校得到普及 某学校的珠心算老师采用一种快速考察珠心算加法能力的测验方法 他随机生成一个正整数集合
  • HTML之表格篇——表格的嵌套

    表格的嵌套一方面是为使页面 贴子 的外观更为漂亮 利用表格嵌套来编辑出复杂而精美的效果 另一方面是出于布局需要 用一些嵌套方式的表格来做精确的编排 或者二者兼而有之 熟练地掌握表格的嵌套技巧并不是很困难的 只要你思路清晰 对表格的整体嵌套构
  • Shiro源码分析之ShiroFilterFactoryBean

    创建核心Filter 同其他框架一样 都有个切入点 这个核心Filter就是拦截所有请求的 通过web xml中配置的Filer进入 执行init方法获取这个instance 调用下面的createInstance方法创建核心Filter
  • 学习《TensorFlow实战Google深度学习框架》(九)LeNet-5模型

    文章目录 6 4 经典卷积网络模型 6 4 4 LeNet 5模型 LeNet 5模型的架构 源代码 6 4 经典卷积网络模型 6 4 4 LeNet 5模型 LeNet 5模型是Yann LeCun教授于1998年在论文Gradient
  • hash函数(哈希表)

    一 什么叫做散列表 哈希表 散列表是存储key value映射的一种集合 散列表也叫做哈希表 散列表底层也是数组 只是通过一种hash函数来计算他的key值 二 hash函数 在Java中每一个对象都有属于自己的hashcode 这个has
  • interview5-多线程篇

    一 线程的基础知识 1 线程与进程 程序由指令和数据组成 但这些指令要运行 数据要读写 就必须将指令加载至 CPU 数据加载至内存 在指令运行过程中还需要用到磁盘 网络等设备 进程就是用来加载指令 管理内存 管理 IO 的 进程 当一个程序
  • docker中的Volume

    简介 Volume是计算机存储技术中的一个术语 用于表示一块独立的存储空间 在操作系统中 一个硬盘可以被分为多个分区 每个分区可以被格式化为一个独立的卷 这个卷就被称为Volume Volume通常是指一个逻辑存储单元 可以是硬盘 U盘 S
  • 操作系统名词解释

    名词表示 CF 溢出标志位 进位标志位 IF 中断屏蔽标志位 SF 符号标志位 PROW 可编程只读存储器 FCFS 先来先服务算法 SJF 最短进程优先算法 SRTN 最短剩余时间优先算法 HRRF 最高响应比优先算法 名词解释 1 特权
  • mysql5.5忘记密码——修改密码

    ERROR 1045 28000 Access denied for user root localhost using password YES 1 进入mysql的bin目录 2 net stop mysql关闭Mysql服务 记住这一
  • 线性回归实战:股价预测(未完)

    线性回归实战 股价预测 问题描述剖析 数据预处理 理解股价数据 数据清洗 构造训练数据 处理NA字段 数据归一化 构建模型 训练数据和测试数据 训练模型 可视化结果 本文内容是对贪心科技课程第二章的笔记 问题描述剖析 我们制定的任务是 根据