内容简介:预测股票涨跌和预测指数涨跌的原理是一样的,都是利用“这里需要注意的是有了想法后,写代码就比较简单了,这里参考了
预测股票涨跌和预测指数涨跌的原理是一样的,都是利用“ 历史数据 ”来推测未来的走势。股票数据单纯来看也就是时间序列。这里我们利用分类方法来构建预测模型:
- 首先,获取过去长时间内上证指数的数据
- 计算这些数据的一些特征(features),比如:sma、wma、mom等
-
利用特征数据构建训练数据(train dataset)
x_train
,保留部分数据作为测试集(test dataset) -
为数据打标签
y_train
:如果交易日当天的收盘价高于上一个交易日的收盘价,则为“+”数据,标签为“+1”,否则为“-1” - 利用svm对上述带有标签的数据进行分类
- 给定测试数据,计算其特征数据,利用分类模型对其进行分类
- 对比分类结果(“+1”对应“涨”,“-1”对应“跌”)和实际数据的涨跌情况,若一致则说明 分类准确/预测准确
这里需要注意的是 x_train
和 y_train
的对应关系 至少要有一个交易日的时间差
,否则,模型将毫无意义。
写代码
有了想法后,写代码就比较简单了,这里参考了 优矿 上一个SVM代码。代码最中主要的部分就是数据处理部分,如下所示:(点击 源代码 可以查看完整的源码文件)
Tips:
如果github上无法直接查看ipython notebook,可以点击 这里 将所要查看的文件的URL拷贝进入即可查看。
for index in range(2,len(close_pri)): # 取数据[-2]表示使用的特征是由今天之前的数据计算得到的 sma_data = talib.SMA(close_pri[:index],timeperiod=7)[-2] wma_data = talib.WMA(close_pri[:index],timeperiod=7)[-2] mom_data = talib.MOM(close_pri[:index],timeperiod=7)[-2] features = [] features.append(sma_data) features.append(wma_data) features.append(mom_data) x_train.append(features) # 对今天的交易进行打标签,涨则标记1,跌则标记-1 if close_pri[index-1] < close_pri[index]: label = 1 else: label = -1 y_train.append(label)
SVM调参
原本计划以此为例,测试一下不同的参数得到的分类结果,最终会对预测模型的泛化能力产生什么样的影响,这里改成参数sklearn中svm分类算法的参数简介了。
首先来看一下sklearn中对svm分类问题给出的 目标函数/loss
sklearn
中给出的svc公式如下,对比上篇文章的式(18),可以发现,这里的参数 $C$是式(18)的倒数
:
这里理解起来类似于反演问题的 正则化方法 ,整个目标函数可以看作是一个 罚函数/penalty function ,C可以看作是 惩罚因子 。那么,C越大,表示要求惩罚项越小,the vise versa,这里则表示分类越准确,距离是不是最大的稍微有那么一丢丢不那么重要。可以想象如果C是正无穷,则分类准确才是最最重要的,gutter的宽度已经不重要了,这时的模型必然会过拟合。
这么一来,还需要分析的参数只有 核函数的参数 了。
sklearn官方的参数如下(额,这么多,,),下面挑几个重要的来看一下:
SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0, decision_function_shape='ovr', degree=3, gamma='auto', kernel='rbf', max_iter=-1, probability=False, random_state=None, shrinking=True, tol=0.001, verbose=False)
decision_function_shape
:‘ovo’ OR ‘ovr’,对于多分类问题,ovo表示两两做分类,ovr表示,其中一个类和其他所有做分类
degree
:就是多项式核函数里面的degree了
max_iter
:最大迭代次数,针对SMO算法
tol
:迭代总会有终止条件的
gamma
:rbf核函数的参数,gamma越大,表示精度越高,因为高斯函数会越高瘦嘛;过拟合也就越严重了,therefore,如果高斯核都搞不定的分类,那就别用svm了吧
安装ta-lib
安装ta-lib时遇到一点点坑,记录一下。
按照官方ta-lib的方法先安装依赖:
wget http://prdownloads.sourceforge.net/ta-lib/ta-lib-0.4.0-src.tar.gz tar -vxf ta-lib-0.4.0-src.tar.gz cd ta-lib/ ./configure --prefix=/usr # 此处是选取lib文件存放位置
试一下: ipython3
In [1]: import talib In [2]:
如果导入模块报错: libta_lib.so.0: cannot open shared object file: No such file or directory
,则考虑是 /usr/lib/
下的的库文件没有被加载到系统环境变量内,导致导入模块的时候没有找到库文件 libta_lib.so.0
,添加环境变量即可:
echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib' >> ~/.bashrc
以上所述就是小编给大家介绍的《SVM调参之股票预测》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 算法学习之股票预测
- 深度有趣 | 10 股票价格预测
- 机器学习交易——如何使用回归预测股票价格?
- 使用机器学习和深度学习技术预测股票价格
- 为了预测股票,我用TensorFlow深度学习了股市数据
- 利用Keras长短期记忆(LSTM)模型预测股票价格
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Effective Modern C++ 简体中文版
Scott Meyers / 高博 / 中国电力出版社 / 2018-4-23 / 99
想要彻底理解C++11和C++14,不可止步于熟悉它们引入的语言特性(例如,auto型别推导、移动语义、lambda表达式以及并发支持)。挑战在于高效地运用这些特性——从而使你的软件具备正确性、高效率、可维护性和可移植性。这正是这本实用的图书意欲达成的定位。它描述的正是使用C++11和C++14——现代C++来撰写真正卓越的软件之道。 涵盖以下主题: 大括号初始化、noexcept规格......一起来看看 《Effective Modern C++ 简体中文版》 这本书的介绍吧!