火炉炼ai机器学习045-对股票数据进行隐马尔科夫建模(代码片段)

raydean raydean     2023-01-09     439

关键词:

【火炉炼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机器学习017-使用gridsearch搜索最佳参数组合(代码片段)

【火炉炼AI】机器学习017-使用GridSearch搜索最佳参数组合(本文所使用的Python库和版本号:Python3.5,Numpy1.14,scikit-learn0.19,matplotlib2.2)在前面的文章(【火炉炼AI】机器学习012-用随机森林构建汽车评估模型及模型的优化提升方法),我们... 查看详情

火炉炼ai机器学习036-nlp词形还原

 【火炉炼AI】机器学习036-NLP词形还原-(本文所使用的Python库和版本号:Python3.6,Numpy1.14,scikit-learn0.19,matplotlib2.2,NLTK3.3)词形还原也是将单词转换为原来的相貌,和上一篇文章中介绍的词干提取不一样,词形还原要难的多,它是... 查看详情

火炉炼ai机器学习046-图像边缘的检测方法(代码片段)

【火炉炼AI】机器学习046-图像边缘的检测方法(本文所使用的Python库和版本号:Python3.6,Numpy1.14,scikit-learn0.19,matplotlib2.2)图像中各种形状的检测时计算机视觉领域中非常常见的技术之一,特别是图像中直线的检测,圆的检测,图像边... 查看详情

火炉炼ai机器学习051-视觉词袋模型+极端随机森林建立图像分类器(代码片段)

【火炉炼AI】机器学习051-视觉词袋模型+极端随机森林建立图像分类器(本文所使用的Python库和版本号:Python3.6,Numpy1.14,scikit-learn0.19,matplotlib2.2)视觉词袋模型(BagOfVisualWords,BOVW)来源于自然语言处理中的词袋模型(BagOfWords,BOW),... 查看详情

火炉炼ai机器学习050-提取图像的star特征(代码片段)

【火炉炼AI】机器学习050-提取图像的Star特征(本文所使用的Python库和版本号:Python3.6,Numpy1.14,scikit-learn0.19,matplotlib2.2)对于图像的特征点,前面我们讨论过边缘检测方法,Harris角点检测算法等,这些检测算法检测的都是图像的轮廓边... 查看详情

火炉炼ai机器学习048-harris检测图像角点(代码片段)

【火炉炼AI】机器学习048-Harris检测图像角点(本文所使用的Python库和版本号:Python3.6,Numpy1.14,scikit-learn0.19,matplotlib2.2)角点检测算法大致有三类:基于灰度图像的角点检测,基于二值图像的角点检测,基于轮廓曲线的角点检测。基于... 查看详情

火炉炼ai机器学习018-项目案例:根据大楼进出人数预测是否举办活动(代码片段)

【火炉炼AI】机器学习018-项目案例:根据大楼进出人数预测是否举办活动(本文所使用的Python库和版本号:Python3.5,Numpy1.14,scikit-learn0.19,matplotlib2.2)我们经常看到办公大楼中人来人往,进进出出,在平时没有什么活动的时候,进出大... 查看详情

火炉炼ai机器学习006-用决策树回归器构建房价评估模型(代码片段)

【火炉炼AI】机器学习006-用决策树回归器构建房价评估模型(本文所使用的Python库和版本号:Python3.5,Numpy1.14,scikit-learn0.19,matplotlib2.2)最近几十年,房价一直是中国老百姓心中永远的痛,有人说,中国房价就像女人的无肩带文胸,一... 查看详情

火炉炼ai深度学习010-keras微调提升性能(多分类问题)(代码片段)

【火炉炼AI】深度学习010-Keras微调提升性能(多分类问题)(本文所使用的Python库和版本号:Python3.6,Numpy1.14,scikit-learn0.19,matplotlib2.2,Keras2.1.6,Tensorflow1.9.0)前面的文章(【火炉炼AI】深度学习007-Keras微调进一步提升性能)我们对二分类问... 查看详情

火炉炼ai机器学习019-项目案例:使用svm回归器估算交通流量(代码片段)

【火炉炼AI】机器学习019-项目案例:使用SVM回归器估算交通流量(本文所使用的Python库和版本号:Python3.5,Numpy1.14,scikit-learn0.19,matplotlib2.2)我们都知道,SVM是一个很好地分类器,不仅适用于线性分类模型,而且还适用于非线性模型,... 查看详情

火炉炼ai机器学习016-如何知道svm模型输出类别的置信度(代码片段)

【火炉炼AI】机器学习016-如何知道SVM模型输出类别的置信度(本文所使用的Python库和版本号:Python3.5,Numpy1.14,scikit-learn0.19,matplotlib2.2)一般的,对于未知样本,我们通过模型预测出来属于某种类别,往往会给出是这种类别的概率。比... 查看详情

火炉炼ai机器学习007-用随机森林构建共享单车需求预测模型(代码片段)

【火炉炼AI】机器学习007-用随机森林构建共享单车需求预测模型(本文所使用的Python库和版本号:Python3.5,Numpy1.14,scikit-learn0.19,matplotlib2.2)共享单车是最近几年才发展起来的一种便民交通工具,基本上是我等屌丝上班,下班,相亲,... 查看详情

火炉炼ai深度学习005-简单几行keras代码解决二分类问题(代码片段)

【火炉炼AI】深度学习005-简单几行Keras代码解决二分类问题(本文所使用的Python库和版本号:Python3.6,Numpy1.14,scikit-learn0.19,matplotlib2.2,Keras2.1.6,Tensorflow1.9.0)很多文章和教材都是用MNIST数据集作为深度学习届的“HelloWorld”程序,但是这... 查看详情

火炉炼ai深度学习009-用keras迁移学习提升性能(多分类问题)(代码片段)

【火炉炼AI】深度学习009-用Keras迁移学习提升性能(多分类问题)(本文所使用的Python库和版本号:Python3.6,Numpy1.14,scikit-learn0.19,matplotlib2.2,Keras2.1.6,Tensorflow1.9.0)本文是仿照前面的文章【火炉炼AI】深度学习006-移花接木-用Keras迁移学... 查看详情

火炉炼ai深度学习006-移花接木-用keras迁移学习提升性能(代码片段)

【火炉炼AI】深度学习006-移花接木-用Keras迁移学习提升性能(本文所使用的Python库和版本号:Python3.6,Numpy1.14,scikit-learn0.19,matplotlib2.2,Keras2.1.6,Tensorflow1.9.0)上一篇文章我们用自己定义的模型来解决了二分类问题,在20个回合的训练之... 查看详情

隐马尔科夫模型学习笔记

隐马尔科夫模型在股票量化交易中有应用,最早我们找比特币交易模型了解到了这个概念,今天又看了一下《统计学习方法》里的隐马尔科夫模型一章。隐马尔科夫模型从马尔科夫链的概念而来,马尔科夫链是指下一个状态只和... 查看详情

机器学习九大算法---隐马尔科夫模型

机器学习九大算法---隐马尔科夫模型转自:http://blog.csdn.net/baimafujinji/article/details/51285082 前导性推荐阅读资料:从朴素贝叶斯分类器到贝叶斯网络(上)从朴素贝叶斯分类器到贝叶斯网络(下)引言在之前介绍贝叶斯网络的... 查看详情

一文搞定hmm(隐马尔可夫)(代码片段)

...1.自动机2.马尔可夫链和马尔可夫假设3.隐马尔可夫模型3.1马尔科夫模型中的三个问题:3.2似然度问题:3.3解码问题4.案例4.1如何对句子进行分词4.2统计概率4.3使用viterbi算法进行解码学习目标知道什么是自动机知道什么是... 查看详情