线性回归实战:股价预测

  • 问题描述剖析
  • 数据预处理
    • 理解股价数据
    • 数据清洗
    • 构造训练数据
    • 处理NA字段
    • 数据归一化
  • 构建模型
    • 训练数据和测试数据
  • 训练模型
  • 可视化结果

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

问题描述剖析

我们制定的任务是:根据历史的股价数据,预测出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 nnloss = 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 评估模型

可视化结果

线性回归实战:股价预测(未完)相关推荐

  1. Keras深度学习实战——股价预测

    Keras深度学习实战--股价预测 0. 前言 1. 股价预测 1.1 数据集介绍 1.2 神经网络模型分析 1.2 使用神经网络进行股价预测 2. 使用函数式 API 2.1 神经网络模型分析 2. ...

  2. R语言使用线性回归模型来预测(predict)单个样本的目标值(响应值、response)实战

    R语言使用线性回归模型来预测(predict)单个样本的目标值(响应值.response)实战 目录

  3. MATLAB-基于长短期记忆网络(LSTM)的SP500的股票价格预测 股价预测 matlab实战 数据分析 数据可视化 时序数据预测 变种RNN 股票预测

    MATLAB-基于长短期记忆网络(LSTM)的SP500的股票价格预测 股价预测 matlab实战 数据分析 数据可视化 时序数据预测 变种RNN 股票预测 摘要 近些年,随着计算机技术的不断发展,神 ...

  4. MOOC网深度学习应用开发1——Tensorflow基础、多元线性回归:波士顿房价预测问题Tensorflow实战、MNIST手写数字识别:分类应用入门、泰坦尼克生存预测

    Tensorflow基础 tensor基础 当数据类型不同时,程序做相加等运算会报错,可以通过隐式转换的方式避免此类报错. 单变量线性回归 监督式机器学习的基本术语 线性回归的Tensorflow实战 ...

  5. 吴恩达机器学习总结五:单变量线性回归实战

    线性回归实战总结: 单变量线性回归: 1.加载和查看数据(准备工作) data = load('ex1data1.txt'); x=data(:,1); y=data(:,2); plot(x,y,' ...

  6. 【机器学习】线性回归实战案例一:多元素情况下广告投放效果分析步骤详解

    线性回归实战案例一:多元素情况下广告投放效果分析步骤详解 2 线性回归 2.1 案例一:多元素情况下广告投放效果分析 2.1.1 模块加载与绘图布局样式设置 2.1.2 加载数据和数据筛选 2.1.3 ...

  7. python数据项目分析实战技法_《Python数据分析与机器学习实战-唐宇迪》读书笔记第9章--随机森林项目实战——气温预测(1/2)...

    第9章--随机森林项目实战--气温预测(1/2) 第8章已经讲解过随机森林的基本原理,本章将从实战的角度出发,借助Python工具包完成气温预测任务,其中涉及多个模块,主要包含随机森林建模.特征选择. ...

  8. Paper之BigGAN:ICLR 2019最新论文《LARGE SCALE GAN TRAINING FOR HIGH FIDELITY NATURAL IMAGE SYNTHESIS》(未完待续)

    Paper之BigGAN:ICLR 2019最新论文<LARGE SCALE GAN TRAINING FOR HIGH FIDELITY NATURAL IMAGE SYNTHESIS> ...

  9. pythonb超分辨成像_Papers | 超分辨 + 深度学习(未完待续)

    1. SRCNN 1.1. Contribution end-to-end深度学习应用在超分辨领域的开山之作(非 end-to-end 见 Story.3 ). 指出了超分辨方向上传统方法( spar ...

  10. RDataMining系列:Chapter 4 Decision Trees --决策树实现,未完待续

    ***************** 利用party来做决策树分类 ***************** 数据:iris data 目标: 利用Sepal.Length, Sepal.Width,Peta ...

最新文章

  1. 利用 createTrackbar 进行二值化
  2. 360金融携手上海交大共建AI实验室,开启人才战略新布局
  3. linux 上操作mysql
  4. [20180102]11g的V$SORT_USAGE视图.txt
  5. VS2017 下载离线MSDN文档
  6. 一个form 如何做两次提交_如何做一个自信魅力的女人
  7. 深入理解CSS权重(优先级)
  8. s3c2440第一个裸奔程序——跑马灯(转)
  9. CUDA TOOlkit Programming Guide 1.Introduction
  10. intellij快捷键linux,IntelliJ IDEA的几个常用快捷键
  11. Zabbix触发器配置指定生效星期监控CPU使用率
  12. wsdl 架构验证警告:来自命名空间_Let it go: DARTS 神经网络可微架构搜索 笔记
  13. ansys命令流——点线面体基础操作(02)
  14. HTTP(超文本传输协议)详细解析
  15. 类加载机制--双亲委派
  16. 编写代码实现简单的扫雷游戏
  17. 【满分】【华为OD机试真题2023 JAVAJS】查找充电设备组合
  18. 网站服务器垃圾清理,服务器安全狗垃圾清理功能操作教程
  19. HTML5教程实例-用Canvas制作线性渐变图形
  20. 软件测试面试题之用例设计题

热门文章

  1. 合并集合 {aaa,bbb,ccc},{bbb,ddd},{eee,fff},{ggg},{ddd,hhh}运算的结果:{aaa,bbb,ccc,ddd,hhh},{eee,fff},{ggg}
  2. 联想服务器装系统鼠标没反应,联想Thinkpad笔记本重装系统后键盘鼠标失灵如何解决...
  3. 201871010133 赵永军《面向对象程序设计(java)》第六、七周学习总结
  4. 自己制作 XP With SP3 系统光盘 包括驱动SATA集成AHCI驱动
  5. Neural Controlled Differential Equations forIrregular Time Series(NIPS2020)
  6. CS5218 DP转HDMI 4K30HZ转换方案
  7. WTL 自绘控件库 (CQsAnimaStatic)
  8. 张亚勤:天才少年的勇敢成长
  9. 微型计算机鸡兔同笼,《鸡兔同笼》问题研究
  10. pyqtgraph 案例 002 Basic Plotting