MATLAB支持向量机学习笔记

[复制链接]
397393583 发表于 2019-5-15 15:19:23 | 显示全部楼层 |阅读模式
来源:https://www.jianshu.com/p/377dddffb734
若内容不全,可点击上述链接查看来源网页,在网页中点击红色双层向下的箭头阅读全文


此文章为《量化投资以MATLAB为工具》一书中支持向量机(SVM)部分,自己的实验记录。

测试数据为上证指数1990.12.19至2009.08.19的真实指数,数据大小为4579x6的矩阵。其中每一行表示每一个交易日的上证指数各种指标,6列分别表示当天上证指数的开盘指数、指数最高值、指数最低值、收盘指数、当日交易量和当日交易额。

下面按书中提到步骤,对流程进行介绍:

获取上证指数的数据

可以从本书的在线资源中下载所有源码以及数据,定位到此章后,即可得到名为『chapter_sh.mat』的数据。输出为图形,如下所示:

上证指数每日的开盘指数选定自变量与因变量

选取第1个到第4578个交易日内每日的开盘指数、指数最高值、指数最低值、收盘指数、交易量和交易额作为自变量,选取第2个到第4579个交易日内每日的开盘数作为因变量。

代码如下:

[m,n]=size(sh);ts=sh(2:m,1);tsx=sh(1:m-1,:);数据预处理

通过使用mapminmax函数,对上证指数进行归一化处理,区间为1到2。处理后的图形如下图所示:

上证指数每日的开盘指数归一化结果参数选择

通过自定义的SVMcgForRegress.m函数,实现对参数的选择,先进行粗略选择,再进行精细选择。

粗略选择

其二维及三维结果如下图所示:

粗略选择结果(二维)粗略选择结果(三维)精细选择

其二维及三维结果如下图所示:

精细选择结果(二维)精细选择结果(三维)训练及回归预测

通过libSVM工具提供的svmtrain以及svmpredict函数完成对数据的训练。效果如下:

原始数据和回归数据对比

从图中可以看到两者的数据基本是吻合的。

再通过predict-ts';得到两者的差值,生成的误差图如下:

误差图

再求得它们之间的相对误差图,如下所示:

相对误差图

从上图中可看到,后期预测数据相对实际数据的偏差较为平稳,基本处在0.1(10%)的区间内。

结语

通过对书中的随书代码进行重新校验,在此过程中,练习了MATLAB的使用,以及LibSVM类库的安装。

由于本书编写的时间较早,部分接口以及配置等都有所变动,在实验过程中,也遇到相关的问题,不过都通过网络方案予以解决。