在前一篇文章”SVM演算法簡介”,貓大已經為各位讀者介紹了什麼是SVM,相信大家對SVM多多少少都有些基本的認知了,而在這一篇文章當中就是要介紹如何實際應用SVM了,貓大會為各位介紹LIBSVM以及如何使用LIBSVM來解決財務金融的投資問題。
問題
接續上一篇SVM演算法簡介,咪咪在了解了SVM之後,咪咪就問貓大,她說SVM能不能幫我賺錢,讓我可以有更多的錢,養更多貓?貓大說當然可以呀!
我們可以利用SVM來幫我們解決財務金融的投資問題,相信大家都知道若想在股票市場中獲利,最簡單的方法就是買低賣高,也就是做多;又或者是賣高買低,也就是所謂的做空,這兩種方式都能幫助我們在股市中獲利。
所以我們可以透過SVM來監測股票,看這一支股票在每一秒鐘分別是屬於做多還是做空的哪一類。
假設我們現在處於時間點t,想要做多,那麼SVM就會決定時間點t是要做多還是不做事,若要做多SVM會發出1的訊號,不做事則是0的訊號,這都是取決於時間點t以後股市的走向。
資料預處理
資料的原始樣貌為[年月日]/[時間]/[區域]/[市場]/[標的]/[粒度]/[開]/[高]/[收]/[低]/[成交量]/[成交價],每一筆資料皆是以一秒為單位,我們會根據這些資料,將這些資料轉換成許多技術指標,如移動平均、乖離率、隨機指標、威廉指標等等多達數十種,一天約有18,000筆,每一筆約有1000個特徵值,然後就可以利用這些資料來建立模型了。
建立模型
咪咪問貓大,我們已經準備好了資料,但是要如何使用SVM到現在都沒提過,難不成要我自己寫一支SVM的程式嗎?這不太可能吧!貓大告訴咪咪不用緊張,已經有人寫好SVM的程式給大家用,而且還是免費的,那就是LIBSVM。
LIBSVM是一個容易上手使用的SVM套件,目前有很多不同程式語言所撰寫的版本,使用者可以根據自身需求選擇下載,而這些資源有非常容易取得,只要進入LIBSVM的官網即可下載,其網址為http://www.csie.ntu.edu.tw/~cjlin/libsvm/。
雖然有非常多版本,不過各版本其實都大同小異。
使用步驟如下:
- 首先就到LIBSVM的官網下載LIBSVM的zip檔案,並解壓縮。
-
凡是要用LIBSVM做測試或訓練的資料,其資料格式都有規定,如下[label] [index1]:[value1] [index2]:[value2] ...
舉例說明:+1 1:0.708333 2:1 3:1 4:-0.320755 5:-0.105023 6:-1 7:1 8:-0.419847
+1表示標籤值,也就是屬於哪一類,而後面的1:0.708333,其1表示索引值,0.708333就是特徵值了。
所以我們就必須將那一天18000筆的資料轉換成LIBSVM所需格式,其中12000筆當成訓練資料,存成一個名為train的檔案,剩下的60000比當成測試資料,存成名為test的檔案。 -
接著就當剛剛解壓縮的資料夾裡開啟cmd視窗,準備開始要建立模型了,其指令語法為
svmtrain (options) training_file (model_file)
options就是參數值,可有可無,在這邊可以設定SVM類型、核函數類型等等,更多詳細內容可以參考LIBSVM的文件,training_file就是我們的訓練用資料,最後model_file就是建立模型後的檔案名稱。
所以我們只要打上svm-train.exe train,這樣就會開始建立模型了,模型建立完成後會多一個train.model的檔案。 -
模型建立完成後當然就要來測試了,其指令語法為
svmpredict test_file model_file output_file
test_file也就是測試資料檔, model_file就是模型的檔案,也就是train.model,output_file就是最後的分類結果。
所以我們現在就可以開始測試,打上svm-predict.exe test.t train.model result。 - 最後就會跑出預測的分類結果了。
模型評估
上述的過程當中一開始採取建立模型的方式,就是很自然的直接將全部的訓練資料交給LIBSVM訓練,但是我們發現建立出的模型,其預測的結果並不是非常理想,這是因為當訓練資料各類別數量相差很大,換句話說就是訓練資料的訊號0類數量很多,而訊號1類的數量很少,這就有可能會造成數量少的那一群常會被忽略。
所以我們選擇的改進方法就是在跑LIBSVM時,把數量多的那一類切成好幾個小塊,每一個小塊的數量都跟數量少的那一類一樣,舉例來說是1的資料只有一千筆,而0的資料有一萬筆,所以會把0的那一類分成10個等份,最後0的每一份都會配1的那一類,所以總共會有10組資料丟進去給LIBSVM,於是我們最後就會得到10個模型。
所以當我們把測試資料給每一個模型做預測時,每一個模型對同一筆測試資料都會有不同的預測結果,於是到底這一筆測試資料是屬於哪一類?我們就寫了一支程式為預測的結果做投票,選出獲得票數最多的那一類,則這一筆測試資料就是那一類了。
資料來源:幣圖誌
留下你的回應
以訪客張貼回應