此文章為《量化投資以MATLAB為工具》一書中支持向量機(jī)(SVM)部分,自己的實(shí)驗(yàn)記錄。
測(cè)試數(shù)據(jù)為上證指數(shù)1990.12.19至2009.08.19的真實(shí)指數(shù),數(shù)據(jù)大小為4579x6的矩陣。其中每一行表示每一個(gè)交易日的上證指數(shù)各種指標(biāo),6列分別表示當(dāng)天上證指數(shù)的開盤指數(shù)、指數(shù)最高值、指數(shù)最低值、收盤指數(shù)、當(dāng)日交易量和當(dāng)日交易額。
下面按書中提到步驟,對(duì)流程進(jìn)行介紹:
獲取上證指數(shù)的數(shù)據(jù)
可以從本書的在線資源中下載所有源碼以及數(shù)據(jù),定位到此章后,即可得到名為『chapter_sh.mat』的數(shù)據(jù)。輸出為圖形,如下所示:

選定自變量與因變量
選取第1個(gè)到第4578個(gè)交易日內(nèi)每日的開盤指數(shù)、指數(shù)最高值、指數(shù)最低值、收盤指數(shù)、交易量和交易額作為自變量,選取第2個(gè)到第4579個(gè)交易日內(nèi)每日的開盤數(shù)作為因變量。
代碼如下:
[m, n] = size(sh);
ts = sh(2:m, 1);
tsx = sh(1: m-1, :);
數(shù)據(jù)預(yù)處理
通過使用mapminmax函數(shù),對(duì)上證指數(shù)進(jìn)行歸一化處理,區(qū)間為1到2。處理后的圖形如下圖所示:

參數(shù)選擇
通過自定義的SVMcgForRegress.m函數(shù),實(shí)現(xiàn)對(duì)參數(shù)的選擇,先進(jìn)行粗略選擇,再進(jìn)行精細(xì)選擇。
粗略選擇
其二維及三維結(jié)果如下圖所示:


精細(xì)選擇
其二維及三維結(jié)果如下圖所示:


訓(xùn)練及回歸預(yù)測(cè)
通過libSVM工具提供的svmtrain以及svmpredict函數(shù)完成對(duì)數(shù)據(jù)的訓(xùn)練。效果如下:

從圖中可以看到兩者的數(shù)據(jù)基本是吻合的。
再通過predict - ts';得到兩者的差值,生成的誤差圖如下:

再求得它們之間的相對(duì)誤差圖,如下所示:

從上圖中可看到,后期預(yù)測(cè)數(shù)據(jù)相對(duì)實(shí)際數(shù)據(jù)的偏差較為平穩(wěn),基本處在0.1(10%)的區(qū)間內(nèi)。
結(jié)語(yǔ)
通過對(duì)書中的隨書代碼進(jìn)行重新校驗(yàn),在此過程中,練習(xí)了MATLAB的使用,以及LibSVM類庫(kù)的安裝。
由于本書編寫的時(shí)間較早,部分接口以及配置等都有所變動(dòng),在實(shí)驗(yàn)過程中,也遇到相關(guān)的問題,不過都通過網(wǎng)絡(luò)方案予以解決。