内容简介:(本文所使用的Python库和版本号: Python 3.6, Numpy 1.14, scikit-learn 0.19, matplotlib 2.2 )股票数据是非常非常典型的时序数据,数据都是按照日期排列好,而且股价就是我们所能观察到的观测序列,而股价背后隐藏的变动机理就是我们难以看到的隐藏状态和状态转移概率,所以完全可以用隐马尔科夫对股票进行建模,并预测出股票后续的变动情况,如果在股票数据研究上有点突破,那么,银子就大把大把的到口袋中来。此处我用tushare提取某只股票数据,然后用该股票的每日
(本文所使用的 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】机器学习042-NLP文本的主题建模
- 【火炉炼AI】机器学习033-构建电影推荐系统
- 【火炉炼AI】机器学习036-NLP词形还原
- 【火炉炼AI】机器学习035-NLP词干提取
- 【火炉炼AI】机器学习037-NLP文本分块
- 【火炉炼AI】机器学习039-NLP文本分类器
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。