【火炉炼AI】机器学习045-对股票数据进行隐马尔科夫建模

(本文所使用的Python库和版本号: Python 3.6, Numpy 1.14, scikit-learn 0.19, matplotlib 2.2 )

股票数据是非常非常典型的时序数据,数据都是按照日期排列好,而且股价就是我们所能观察到的观测序列,而股价背后隐藏的变动机理就是我们难以看到的隐藏状态和状态转移概率,所以完全可以用隐马尔科夫对股票进行建模,并预测出股票后续的变动情况,如果在股票数据研究上有点突破,那么,银子就大把大把的到口袋中来。

1. 准备数据集

此处我用tushare提取某只股票数据,然后用该股票的每日涨幅和成交量来建模,看看能预测出什么结果。

# 1, 准备数据集,使用tushare来获取股票数据
import tushare as ts
stock_df=ts.get_k_data('600123',start='2008-10-01',end='2018-10-01') # 获取600123这只股票的近十年数据
print(stock_df.info()) # 查看没有错误
print(stock_df.head())
复制代码

上面只是下载了600123这只股票的最近十年的日数据,但是我们要得到的是收盘价的涨幅,所还需要对数据做进一步处理。

# 准备数据集,此次我们用两个指标来计算HMM模型,股价涨幅和成交量
close=stock_df.close.values
feature1=100*np.diff(close)/close[:-1] # 股票涨幅的计算
print(close[:10])
print(feature1[:10]) # 查看涨幅计算有没问题
复制代码

-------------------------------------输---------出--------------------------------

[6.775 6.291 6.045 5.899 5.361 5.436 5.299 4.994 4.494 4.598] [ -7.14391144 -3.91034812 -2.41521919 -9.12018986 1.39899273 -2.52023547 -5.75580298 -10.01201442 2.31419671 9.98260113]

--------------------------------------------完-------------------------------------

# 由于计算涨幅之后的序列比原来的收盘价序列少一个(最开始的股价没法计算涨幅),故而需要减去一个
feature2=stock_df.volume.values[1:]
dataset_X=np.c_[feature1,feature2]
print(dataset_X[:5]) # 检查没错
复制代码

2. 创建HMM模型

关于HMM模型,我已经在我前面的文章中进行了详细的讲解,请参考【火炉炼AI】机器学习044-创建隐马尔科夫模型

# 创建HMM模型,并训练
from hmmlearn.hmm import GaussianHMM
model=GaussianHMM(n_components=5,n_iter=1000) # 暂时假设该股票有5个隐含状态
model.fit(dataset_X)
复制代码

在使用HMM模型建模之后,我们怎么知道这个模型的好坏了?那么就需要将其预测的结果和实际的结果进行比较,看看是否一致。

# 使用该模型查看一下效果
N=500
samples,_=model.sample(N)
# 由于此处我使用涨幅作为第一个特征,成交量作为第二个特征进行建模,
# 故而得到的模型第一列就是预测的涨幅,第二列就是成交量
plt.plot(feature1[:N],c='red',label='Rise%') # 将实际涨幅和预测的涨幅绘制到一幅图中方便比较
plt.plot(samples[:,0],c='blue',label='Predicted%')
plt.legend()
复制代码

貌似匹配结果不怎么样,再来看看对于成交量的预测:

plt.plot(feature2[:N],c='red',label='volume')
plt.plot(samples[:,1],c='blue',label='Predicted')
plt.legend()
复制代码

这两个结果都不怎么样,预测值和实际值都相差比较大,说明模型难以解决这个项目。我们换个角度来想,如果这么简单就能预测股票的走势,那每个人都会从股市捞钱,最终股市只能关门了。读者有兴趣可以优化一下HMM模型的隐含状态数,可能会得到比较好的匹配结果,但是也有可能发生过拟合,所以我觉得优化的用处不大。

########################小**********结###############################

1,此处只是简单的做了一个用HMM模型来分析股票数据的例子,虽然实用价值不大,但可以给其他复杂的算法提供一点思路。

**2,还是那句话,远离股市,远离伤害! **

#################################################################

注:本部分代码已经全部上传到(我的github)上,欢迎下载。

参考资料:

1, Python机器学习经典实例,Prateek Joshi著,陶俊杰,陈小莉译

【火炉炼AI】机器学习045-对股票数据进行隐马尔科夫建模相关推荐

  1. 【火炉炼AI】机器学习044-创建隐马尔科夫模型

    [火炉炼AI]机器学习044-创建隐马尔科夫模型 (本文所使用的Python库和版本号: Python 3.6, Numpy 1.14, scikit-learn 0.19, matplotlib 2 ...

  2. 机器学习——隐马尔科夫(HHM)原理

    机器学习--隐马尔科夫(HHM)模型原理 1 从马尔科夫模型到隐马尔科夫模型 1.1 马尔科夫过程引入 首先,我们先给出一张图: 在上面的图里,给出的是一个链式的结构,结构中的每一个节点称之为一个状态 ...

  3. 机器学习-- > 隐马尔科夫模型(HMM)

    博客内容将首发在微信公众号"跟我一起读论文啦啦",上面会定期分享机器学习.深度学习.数据挖掘.自然语言处理等高质量论文,欢迎关注! 本篇博文将详细总结隐马模型相关知识,理解该模型有 ...

  4. 机器学习基础 HMM模型(隐马尔科夫)

    文章目录 一.马尔科夫链 1. 简介 2. 经典举例 3. 小结 二.HMM简介 1. 简单案例 2. 三个基本问题 三.HMM模型基础 1. 什么样的问题需要HMM模型 2. HMM模型的定义 3. ...

  5. 机器学习算法总结(七)——隐马尔科夫模型(前向后向算法、鲍姆-韦尔奇算法、维特比算法)...

    概率图模型是一类用图来表达变量相关关系的概率模型.它以图为表示工具,最常见的是用一个结点表示一个或一组随机变量,结点之间的变表是变量间的概率相关关系.根据边的性质不同,可以将概率图模型分为两类:一类是 ...

  6. python 隐马尔科夫_机器学习算法之——隐马尔可夫(Hidden Markov ModelsHMM)原理及Python实现...

    前言 上星期写了Kaggle竞赛的详细介绍及入门指导,但对于真正想要玩这个竞赛的伙伴,机器学习中的相关算法是必不可少的,即使是你不想获得名次和奖牌.那么,从本周开始,我将介绍在Kaggle比赛中的最基 ...

  7. 【机器学习】强化学习的概念及马尔科夫决策

    系列文章目录 第十八章 Python 机器学习入门之强化学习 目录 系列文章目录 前言 一.什么是强化学习? 二.强化学习算法的示例:火星探测器 三.强化学习的回报及折扣因子 四. 强化学习中的策略 ...

  8. 机器学习中的隐马尔科夫模型(HMM)详解

    前导性推荐阅读资料: 从朴素贝叶斯分类器到贝叶斯网络(上) 从朴素贝叶斯分类器到贝叶斯网络(下) 欢迎关注白马负金羁的博客 http://blog.csdn.net/baimafujinji,为保证公 ...

  9. AI算法连载20:统计之隐马尔可夫模型

    导语:在人工智能AI如火如荼的大潮下,越来越多的工程师们意识到算法是AI的核心.而面对落地的应用,不懂算法的AI产品经理将是空谈,不仅无法与工程师沟通,更无法深刻理解应用的性能与方式.所以业界逐渐形成 ...

  10. 【一起入门MachineLearning】中科院机器学习第*课-概率图模型:隐马尔可夫模型(前向算法+维特比算法+条件随机场)

    专栏介绍:本栏目为 "2021秋季中国科学院大学周晓飞老师的机器学习" 课程记录,不仅仅是课程笔记噢- 如果感兴趣的话,就和我一起入门Machine Learning吧

最新文章

  1. commonrpc 1.0 发布,高性能分布式 RPC 框架
  2. web设计页面跳转的方法
  3. do not tell much about your past
  4. 读博笔记(浏览器兼容性测试工具)
  5. java实现qq抢红包_Java实现抢红包功用
  6. 一云多端,连接万物:智能接入网关2.0升级技术揭秘
  7. 《程序员面试宝典》精华 编程语言部分
  8. 微软亚研院华刚对科研的见解
  9. sql盲注特点_sql盲注讲解
  10. 把核心代码全开源,还能做出卡别人脖子的产品吗?
  11. Maven生命周期和插件
  12. BOSS直聘免费下载个人简历为PDF的方法
  13. 前端实现街道地图_webgis前端地图功能展示
  14. MySQL服务器的超级管理员名称是_mysql服务器忘记了超级管理员root密码
  15. 明星隐私倒卖链:只要150 你对朱一龙行踪比他妈还了解
  16. DestroyWindow无法销毁的问题
  17. 消息称暴雪代理谈判进入第二阶段,与四家中国代理商谈判
  18. 利用Excel数组公式统计各班优秀人数
  19. DenseCLIP:Language-Guided Dense Prediction with Context-Aware Prompting
  20. 非安装tomcat,服务安装_离水的鱼_新浪博客

热门文章

  1. Spring-data-redis操作redis知识总结
  2. 为Android GridView 设置行背景
  3. 谈谈YOLOv2做了哪些改进
  4. jquery完善的处理机制
  5. 发布HTML5 2D游戏引擎YEngine2D
  6. 你能在windows上创建一个叫做AUX的文件夹吗?
  7. 使用FZip创建压缩文件保存到桌面
  8. Nginx 安装与运行
  9. Android 程序中获取一个反向 Shell
  10. 关于webuploader 在ie9上不能触发 input 的 change 事件