1. 用libsvm做時間序列預測,為什麼訓練數據越少越准確
樓主的說法似乎不太對
首先,訓練數據的主要區別是什麼是測試數據:
如果我有一堆計時數據,首先隨機分為兩堆,一堆訓練只用於看模型是好的,然後前者稱為訓練數據。下面是幾個訓練數據序列。(注意不要把訓練數據的結果作為模型質量的度量,這是最基本的)。
最後,如果像預測股票價格一切都那樣簡單,那麼就不需要這么多機器學習和金融專家才能進行高頻交易。
2. 用 SVM做回歸預測,得到結果參數分析如下,這樣算不算好結果呢預測准確的話,MSE和R應該在怎樣的數值上
算,我的R2才0.0幾。。
3. 用svm建立的模型進行預測,怎麼預測的數據完全一樣啊
1、首先輸入數據集,分析數據維度,可以看到共有0,1,2,3四個類別,如下圖所示。
4. 用svm做回歸預測,為什麼預測值都是一樣的
第一,要先看你建立的回歸方程中各個自變數是否都具有顯著預測作用;第二,你的回歸方程預測效果如何,也就是決定系數R方有多大,如果預測效果很差,用方程計算出來的值和原始值肯定出入很大。除非R方等於1,否則不可能用方程預測出來的值都和原始值完全一樣。
5. 用svm做回歸預測,為什麼預測值都是一樣的
我發現我的問題是gamma那個參數設置的太大了,在默認參數附近設置就好了
6. 如何使用libsvm進行回歸預測
<1> 下載Libsvm、Python和Gnuplot。我用的版本分別是:Libsvm(2.8.1),Python(2.4),Gnuplot(3.7.3)。注意:Gnuplot一定要用3.7.3版,3.7.1版的有bug.
<2> 修改訓練和測試數據的格式(可以自己用perl編個小程序):
目標值 第一維特徵編號:第一維特徵值 第二維特徵編號:第二維特徵值 ...
...
例如:
2.3 1:5.6 2:3.2
表示訓練用的特徵有兩維,第一維是5.6,第二維是3.2,目標值是2.3
注意:訓練和測試數據的格式必須相同,都如上所示。測試數據中的目標值是為了計算誤差用
<3> 分別使用Libsvm中的Windows版本的工具svmscale.exe進行訓練和測試數據的歸一化,svmtrain.exe進行模型訓練,svmpredict.exe進行預測
(1)svmscale.exe的用法:svmscale.exe feature.txt feature.scaled
默認的歸一化范圍是[-1,1],可以用參數-l和-u分別調整上界和下屆,feature.txt是輸入特徵文件名
輸出的歸一化特徵名為feature.scaled
(2)svmtrtrain.exe訓練模型
我習慣寫個批處理小程序,處理起來比較方便。例如svm_train.bat中訓練語句為:
svmtrain.exe -s 3 -p 0.0001 -t 2 -g 32 -c 0.53125 -n 0.99 feature.scaled
訓練得到的模型為feature.scaled.model
具 體的參數含義可以參考幫助文檔。這里-s是選擇SVM的類型。對於回歸來說,只能選3或者4,3表示epsilon-support vector regression, 4表示nu-support vector regression。-t是選擇核函數,通常選用RBF核函數,原因在「A Practical Guide support vector classification」中已經簡單介紹過了。-p盡量選個比較小的數字。需要仔細調整的重要參數是-c和-g。除非用 gridregression.py來搜索最優參數,否則只能自己慢慢試了。
用gridregression.py搜索最優參數的方法如下:
python.exe gridregression.py -svmtrain H:/SVM/libsvm-2.81/windows/svmtrain.exe -gnuplot C:/gp373w32/pgnuplot.exe -log2c -10,10,1 -log2g -10,10,1 -log2p -10,10,1 -v 10 -s 3 -t 2 H:/SVM/libsvm-2.81/windows/feature.scaled > gridregression_feature.parameter
注意:-svmtrain是給出svmtrain.exe所在路徑,一定要是完整的全路徑
-gnuplot是給出pgnuplot.exe所在路徑。這里要用pgnuplot.exe這種命令行形式的,不要用wgnupl32.exe,這個是圖形界面的。
-log2c是給出參數c的范圍和步長
-log2g是給出參數g的范圍和步長
-log2p是給出參數p的范圍和步長
上面三個參數可以用默認范圍和步長
-s選擇SVM類型,也是只能選3或者4
-t是選擇核函數
-v 10 將訓練數據分成10份做交叉驗證。默認為5
最後給出歸一化後訓練數據的全路徑
搜索最優參數的過程寫入文件gridregression_feature.parameter(注意別少了這個>符號啊)
根據搜索到的最優參數修改feature.scaled.model中的參數
(3)用svmpredict.exe進行預測
svmpredict.exe feature_test.scaled feature.scaled.model feature_test.predicted
其中feature_test.scaled是歸一化後的測試特徵文件名,feature.scaled.model是訓練好的模型,SVM預測的值在feature_test.predicted中。
7. 怎麼利用svm對時間序列進行建模
SVM理論是在統計學習理論的基礎上發展起來的,由於統計學習理論和SVM方法對有限樣本情況下模式識別中的一些根本性的問題進行了系統的理論研究,很大程度上解決了以往的機器學習中模型的選擇與過學習問題、非線性和維數災難、局部極小點問題等。應用SVM進行回歸預測的步驟具體如下:
1)實驗規模的選取,決定訓練集的數量、測試集的數量,以及兩者的比例;2)預測參數的選取;3)對實驗數據進行規范化處理;4)核函數的確定;5)核函數參數的確定。其中參數的選擇對SVM的性能來說是十分重要的,對於本文的核函數使用RBF核函數,對於RBF核函數,SVM參數包括折衷參數C、核寬度C和不敏感參數E。目前SVM方法的參數、核函數的參數選擇,在國際上都還沒有形成統一的模式,也就是說最優SVM演算法參數選擇還只能是憑借經驗、實驗對比、大范圍的搜尋和交叉檢驗等進行尋優。實際應用中經常為了方便,主觀設定一個較小的正數作為E的取值,本文首先在C和C的一定范圍內取多個值來訓練,定下各個參數取值的大概范圍,然後利用留一法來具體選定參數值
股價時間序列的SVM模型最高階確定
股價數據是一個時間序列,從時間序列的特徵分析得知,股價具有時滯、後效性,當天的股價不僅還與當天各種特徵有關,還與前幾天的股價及特徵相關,所以有必要把前幾天的股價和特徵作為自變數來考慮。最高階確定基本原理是從低階開始對系統建模,然後逐步增加模型的階數,並用F檢驗對這些模型進行判別來確定最高階n,這樣才能更客觀反映股票價格的時滯特性。具體操作步驟如下:假定一多輸入單輸出回歸模型有N個樣本、一個因變數(股價)、m- 1個自變數(特徵),由低階到高階遞推地採用SVM模型去擬合系統(這兒的拓階就是把昨天股價當做自變數,對特徵同時拓階),並依次對相鄰兩個SVM模型採用F檢驗的方法判斷模型階次增加是否合適[ 7]。對相鄰兩模型SVM ( n)和SVM ( n+ 1)而言,有統計量Fi為:Fi=QSVR (n)- QSVR( n+1)QSVR (n)1N - m n - (m -1)mi =1,2,,, n(1)它服從自由度分別為m和(N - m n - (m -1) )的F分布,其中QSVR (n)和QSVR( n+1)分別為SVR ( n)和QSVR( n+1)的剩餘離差平方和,若Fi< F(?,m, N-m n- (m-1) ),則SVM (n )模型是合適的;反之,繼續拓展階數。
前向浮動特徵篩選
經過上述模型最高階數的確定後,雖然確定了階數為n的SVM模型,即n個特徵,但其中某些特徵對模型的預測精度有不利影響,本文採用基於SVM和留一法的前向浮動特徵特徵篩選演算法選擇對提高預測精度有利影響的特徵。令B= {xj: j=1,2,,, k}表示特徵全集, Am表示由B中的m個特徵組成的特徵子集,評價函數MSE (Am)和MSE (Ai) i =1,2,,, m -1的值都已知。本文採用的前向浮動特徵篩選演算法如下[9]:1)設置m =0, A0為空集,利用前向特徵篩選方法尋找兩個特徵組成特徵子集Am(m =2);2)使用前向特徵篩選方法從未選擇的特徵子集(B -Am)中選擇特徵xm +1,得到子集Am+1;3)如果迭代次數達到預設值則退出,否則執行4);4)選擇特徵子集Am+1中最不重要的特徵。如果xm+1是最不重要的特徵即對任意jXm +1, J (Am +1- xm+1)FJ(Am +1- xj)成立,那麼令m = m +1,返回2) (由於xm+1是最不重要的特徵,所以無需從Am中排除原有的特徵);如果最不重要的特徵是xr( r =1,2,,, m )且MSE (Am+1- xr) < MSE (Am)成立,排除xr,令A'm= Am+1- xr;如果m =2,設置Am= A'm,J (Am) = J (A'm), ,返回2),否則轉向步驟5);5)在特徵子集A'm中尋找最不重要的特徵xs,如果MSE (A'm- xs)EM SE (Am-1),那麼設置Am= A'm, MSE (Am)= MSE (A'm),返回2);如果M SE (A'm- xs) < M SE (Am -1),那麼A'm從中排除xs,得到A'm-1= Am- xs,令m = m -1;如果m =2,設置Am= A'm, MSE (Am) = MSE (A'm)返回2),否則轉向5)。最後選擇的特徵用於後續建模預測。
預測評價指標及參比模型
訓練結果評估階段是對訓練得出的模型推廣能力進行驗證,所謂推廣能力是指經訓練後的模型對未在訓練集中出現的樣本做出正確反應的能力。為了評價本文模型的優劣,選擇BPANN、多變數自回歸時間序列模型( CAR)和沒有進行拓階和特徵篩選的SVM作為參比模型。採用均方誤差(mean squared error, MSE)和平均絕對誤差百分率(mean ab-solute percentage error, MAPE)作為評價指標。MSE和MAP定義如下:M SE=E(yi- y^i)2n( 2)MAPE=E| yi- y^i| /yin( 3)其中yi為真值, y^i為預測值, n為預測樣本數。如果得出M SE, MAPE結果較小,則說明該評估模型的推廣能力強,或泛化能力強,否則就說明其推廣能力較差
8. SVM回歸預測程序問題,求幫助
《MATLAB神經網路30個案例分析》裡面有一個用SVM做股票開盤價分析的程序
他裡面有這么幾句
ts = sh(2:m,1);
tsx = sh(1:m-1,:);
%歸一化 。。。
model = svmtrain(TS,TSX,cmd);
[predict,mse, decision_values] = svmpredict(TS,TSX,model);
他這個不是在用訓練集預測自己嗎?這樣有什麼意義?
另外我的時間序列每次只有一個數據,預測的時候是不是就只有一個特徵?
謝謝!!
9. 基於Matlab SVM的信息粒化時序回歸預測----上證指數開盤指數變化趨勢及變化空間預測 如何寫畢業設計
證指數開盤指數。
變化趨勢及變化空間預測
我,給,的好。 的