做了一个很low的基于神经网络的选股策略,回测效果惨淡,仅供大家学习使用,带大家入门深度学习。

问题转化与模型选择

首先对于选股这个问题,如果要利用神经网络的话,需要将其转化为有监督学习问题,一般情况下都是转化为有监督学习问题。有监督问题可以分为分类与回归问题。这里我将其转化为二分类问题,即预测第二天是否上涨,建模方式与之前文章相同(送你一份年化100%+的策略)。当然也可以分成多个类别,表示不同程度的涨幅或跌幅。

如果用神经网络的话,目前一般会设计基于CNN的模型或基于LSTM的模型。这里我选择了CNN进行模型搭建。

对于CNN的基础知识,这里不作介绍,网上一堆教程,B站也有教程视频,下面我讲一些我自己的理解。CNN最早是用于图像识别分类的,但CNN同样适合一维时序信号的回归或分类。图像很好理解基本就是含RGB值的三维矩阵,如果是灰度图像,最后一个维度是1。一维信号就是二维矩阵,可以理解为一个维度是信号长,一个维度是通道数,举个例子,股票中含收盘价和成交量,这里可以将收盘价和成交量看成信号的两个通道。其实CNN识别一维信号也是从图形角度去识别的,可能比较难理解,这里我也不知道怎么解释,时间久了大家可能就理解了。可能会有一些方法将股票的涨跌绘制成图像然后利用CNN预测或分类,我个人觉得不太合适,绘成图像的过程中会加入很多不相关的信息还容易丢失一些信息,当然可能效果会比较好但我觉得这个效果的上限肯定不如用一维信号来做。还有其他一些方法会利用其他一些手段转化成图像,这也是可以,看大家是如何转化成图像的。

这里我是转化为一维时序信号进行分类。首先我说一下为什么CNN适合一维信号的分类或回归。其实CNN做预测的原理就是利用卷积核的能力,卷积核可以感受历史一段时间的情况,最后集合多个历史片段进行判断。与LSTM相比,CNN可以看到历史更多的数据,虽然LSTM自己有一定的记忆能力,但这个记忆只是短暂的记忆。这里并不是说明CNN一定比LSTM好,虽然我个人比较喜欢CNN,但是具体任务还是需要多尝试的。(对CNN和LSTM不熟悉的朋友可以自行网上搜索教程)

模型搭建

因为大家用keras的比较多一点,keras对新手来说也更好上手一点,我就写了一个基于keras框架的代码。我搭建的模型结构如下(没啥参考价值,效果也不好):

对于输入的数据包含了4个通道,分别是个股的收盘价、个股的成交额、大盘的收盘价、大盘的成交额。输入的时间长度为20天。这里不对各个层具体介绍,大家感兴趣的可以自行百度。

模型训练

搞深度学习的人也成为炼丹师。引用知乎一篇文章的说法(链接https://zhuanlan.zhihu.com/p/23781756):深度学习的模型训练就是炼丹。把精选原始数据,按照神经网络的规定法则通过计算框架提炼,从而得到一个远小于数据数倍的模型。

以下是几个我训练阶段不太一样的地方:

**在原始数据中会有一些停牌的数据,这些停牌的数据需要填充或者删除。**为了我后面方便处理,我对停牌数据进行了填充。停牌时,收盘价用前面未停牌的收盘价填充,成交额填充为0。核心代码如下:

直接将原始数据输入计算,可能容易导致模型识别困难的问题,所以输入的数据需要进行标准化处理,核心代码如下:

在模型的训练阶段,采用的是mini batch的训练方式训练的。因为一次性载入所有数据计算将会耗费大量的内存,所以只能将数据分成多个mini batch计算。在每个mini batch中,我会选取从股票池中选取固定数量的股票,再分别从这些固定数量的股票中抽取某个历史片段送入训练数据中。核心代码如下:

其他一些超参,这里不作介绍了,大家可以自己看代码。

结果

训练数据:20160101-20181001
验证数据:20181001-20181231
测试数据:20190101-

与传统机器学习模型不同,深度学习训练还是需要用到验证集的(我之前的lgb没用验证集)。因为深度学习更容易过拟合,不使用验证集比较难判断什么需要停止训练。
训练结果:
从loss的下降情况可以发现,训练集的loss一直在降,但验证集的loss反而上升了。说明模型已经在过拟合了,我搭建的模型不能很好的学到东西。

回测结果这里就不放了,结果也很烂。

结语

这篇文章只是在深度学习应用上的一个小小试探。失败的原因可能有以下几点:(1)网络搭建的不好;(2)想从图形的角度识别很难,还是需要给网络喂特征。后面我会对这个问题持续研究。

如果大家对深度学习神经网络不了解,结合代码和这篇文章可以帮大家对深度学习建模有一个基本的了解。深度学习的模型搭建及训练是非常有技巧性的,难度远远大于用LGB模型训练。对于模型的搭建,需要从理论出发,理解各种层的计算方式,然后带一定的猜想去试验。对于模型的训练同样有很多技巧也需要结合理论出发,比如我上面提到的每个mini batch数据送入的方式(当然我那种不一定好),这些技巧都是需要经验的积累的,不同领域的技巧也是有区别的。

总之大家如果想将深度学习应用在投资上面需要花很多时间进行研究。

代码github:

https://github.com/wbbhcb/stock_market/tree/master/深度学习实战

对量化、数据挖掘、深度学习感兴趣的可以关注公众号,本人不定期分享有关这些方面的研究。

个人知乎:
https://www.zhihu.com/people/e-zhe-shi-wo/activities

从图形角度利用神经网络进行选股相关推荐

  1. matlab 数字识别_在MATLAB中利用神经网络进行分类

    在这篇文章中,主要阐述在MATLAB环境下利用神经网络对输入的数字图像进行识别.我们利用一个5*5的矩阵来表示1-5的数据,如下图所示: 基于以上问题,我们构建的神经网络输入层的神经元个数为25个,即 ...

  2. 如何利用神经网络结合遗传算法进行非线性函数极值寻优(2)

    如何利用神经网络结合遗传算法进行非线性函数极值寻优

  3. NVIDIA团队:利用神经网络生成极慢视频

    NVIDIA团队:利用神经网络生成极慢视频 总有那么一些细节,你瞪大双眼拼了命想看清却依然奈不了何,比如下面这个: 跟得上球吗?要看清男子羽毛球比赛的细节实在不容易 有时候想盯住飞来飞去的羽毛球,非常 ...

  4. ML之NN:利用神经网络的BP算法解决XOR类(异或非)问题(BP solve XOR Problem)

    ML之NN:利用神经网络的BP算法解决XOR类(异或非)问题(BP solve XOR Problem) 目录 输出结果 实现代码 输出结果 实现代码 #BP solve XOR Problem im ...

  5. 利用神经网络预测链家网上海租房价格(Python)

    代码详见:Predict-house-rent-with-neutral-network 简介 本项目利用Python的scrapy框架爬取链家网的上海市租房信息,利用pandas.numpy.mat ...

  6. python多元非线性回归_Python利用神经网络解决非线性回归问题实例详解

    本文实例讲述了Python利用神经网络解决非线性回归问题.分享给大家供大家参考,具体如下: 问题描述 现在我们通常使用神经网络进行分类,但是有时我们也会进行回归分析. 如本文的问题: 我们知道一个生物 ...

  7. 图灵奖得主Geoffrey Hinton最新研究:利用神经网络对有关节三维模型进行估计的方法NASA

    NASA: Neural Articulated Shape Approximation 论文作者: Timothy Jeruzalski, Boyang Deng, Mohammad Norouzi ...

  8. 【深度学习入门基础】一、从线性代数和微积分的角度看神经网络

    [深度学习入门基础]从线性代数和微积分的角度看神经网络 这是深度学习入门系列文章,我们企图用最简洁的语言.最干净的表达,让读者快速获取到他所想要的.本系列文章持续更新.一些网上能查到的基础知识,诸如激 ...

  9. 利用神经网络的embedding层处理类别特征

    类别特征在现实里十分常见,处理的方法也很多,最常见的思路是转为one-hot编码,当然这种处理方式比较粗暴,在许多算法里效果也不是很好.还有的处理方式寻找类别特征的最优切分,这个需要特定工具的支持,如 ...

最新文章

  1. LaTex排版技巧:[15]公式太长如何换行
  2. 《美国如何培养核心素养》读后感作文1900字
  3. 【QuantOS】jaqs实例代码(可以使用版本)
  4. css入门教程 网页首字下沉,CSS制作首字下沉_CSS Inline Layout Module, initial-letter, CSS3 教程_w3cplus...
  5. android 开发常见问题,Android 开发常见问题汇总
  6. thinkphp 第二节
  7. 什么时候我们应谈及性能?
  8. Spring @Import注解配置类方法内部调用没有注入属性值的坑
  9. Oracle DBA必须学会的11个Linux基本命令
  10. java判空null前后,关于java:引不要再使用null判空了
  11. 乐视轰然倒塌;智能驾驶上路;360回归A股 | 2017年度科技大事件盘点
  12. Mac新手入门教学:活用Mac通知中心,生活讯息一眼看尽
  13. pkcs1与pkcs8格式RSA私钥互相转换
  14. 【机械仿真】基于matlab GUI机械臂运动控制【含Matlab源码 063期】
  15. 信创操作系统--麒麟Kylin桌面版(项目五 软件管理:应用商店、deb包安装、包管理器)
  16. 批量将 xlsx 文件 转换 为 csv文件
  17. SLAM notes
  18. [网络安全自学篇] 八十二.WHUCTF之隐写和逆向类解题思路WP(文字解密、图片解密、佛语解码、冰蝎流量分析、逆向分析)
  19. 11.4王者荣耀服务器维护中,4月11日全服不停机更新公告
  20. ProxySQL 排错 Max connect timeout reached while reaching hostgroup 10 after 10000ms

热门文章

  1. 【编程语言】CentOS 7 下pip更新命令
  2. 信用评分卡知道不?就是芝麻分那种东西,自己用机器学习来做一个吧
  3. Windows 常用命令(快捷启动Windows服务的相关命令)
  4. 使用Java写出一个红桃心,拿走不谢!
  5. 浓浓的微信印记-手机QQv4.1版
  6. 查看linux内核源代码
  7. 《误杀2》:一个父亲的Plan 0、Plan A和Plan B
  8. MySQL有这一篇就足够了
  9. html鼠标划到图片位置变大
  10. Python保存图片到桌面