用libsvm做時間序列預測,為什麼訓練數據越少越準確?
用於訓練的數據越少,分類得到的勝率越高,當樣本數據為1時最好。 這肯定是不對的,會有哪些原因呢?望大牛們多多指教~
。。。。。。。。。。。.之前描述的不對,我是用前五天的行情數據,預測下一天的漲跌。往前滾動20天,就得到了20個樣本。現在是隨著樣本數目增多,預測準確率變低。樣本太少訓練出來的svm也沒有說服力啊,就很困惑了。。
題主的意思應該是用前N個數據作為輸入,預測下一個數據的值。
所以您的題目有誤導性,這不叫"訓練數據越少",而是"階數越低"。也沒什麼肯定不對的,如果你的數據本身就是個一階馬爾科夫序列,那用N=1就是最好的。
------------------------------------------------------------------------------------------
對於重新描述的問題:
看樣子lz在做數模比賽之類的東西。
我想說的是,對於序列數據,如果僅從序列本身,只利用前N天去預測後一天的情況(注意是「只」),這個問題幾乎是不可解的,即建模p(x_t)=f(x_{t-1},...,x_{t-N}).
沒有實際生活中的什麼序列滿足這種數學模型。
需要建立的模型其實是p(x_t)=f(x_{t-1},...,x_{t-N},z_t,...,z_{t-N}).
比如x表示天氣情況,第一天下雨了,第二天是晴天還是下雨?沒法預測,即使知道了已經下了100天的雨了,也不好預測第101天是下雨還是晴天。
你需要的是z,比如每天的氣壓,氣流之類的,這我就不懂了。
對於金融產品的價格預估,你說的的每日行情是指當天的價格(只用了x),還是有更多的信息呢(用了z)。如果是指前者,能預測對才是件怪事
題主先分清一下什麼是訓練數據什麼是測試數據:如果我有一堆時序數據,先把它們隨機分成兩堆,一堆用來訓練一堆只用來看model好不好,那前者叫訓練數據。這裡面有幾個序列就叫幾個訓練數據。(注意一定不要在訓練數據上測試結果作為模型好壞的衡量,這是基本)
題主想說的應該是時序數據的馬爾可夫階數是1的時候效果比較好。所謂馬爾可夫階數為k就是說當前數據只和歷史k個時間點的數據有關,而獨立於這個窗口外的數據。如果數據本身是一階馬爾可夫的,那t-2的數據和t的數據本身是獨立的,也就是說知道t-2或者更久之前的歷史對時刻t的預測毫無幫助,這種情況這些多餘的數據相當於雜訊,大多數學習演算法都會受到輸入雜訊的影響。題主可以試試L1 SVM(libsvm有這個選項),或者增大正則項係數C排除這些雜訊的影響——當然如果數據符合完美的一階馬爾可夫假設,還是去掉這些多餘信息比較好。
當然還有另一種可能,就是數據對一階以外時刻的依賴是高次(非線性)的。如果題主的問題用二階以上效果差,但一階也不算特別好(比如p-value不小),那可以考慮是這種問題。這時候可以考慮用更複雜的模型,加入更多歷史信息預測,可以考慮嘗試rbf kernel svm(libsvm有),貝葉斯網路,或者神經網路等模型。
根據題主的新描述,第三種(更大概率的)可能就是數據本身信息不足:做股價預測一般都要同時讀新聞的,否則如果公司處於牛市,不根據新聞跟進經濟和企業動態,只看股價是永遠預測不了什麼時候跌/熊市的。
最後,如果預測股價這件事這麼簡單人人都能做,就不需要這麼多機器學習和金融專家才能搞高頻交易了。參見我在http://www.zhihu.com/question/23444414這裡的回答。我覺得最可能是模型有問題,LZ有沒有想過如果本來前N天的股市行情就不足以預測下一天的行情呢?據我所知,股市不是典型的漲跌取決於很多來自上市公司、政府、以及其他社會方面的因素?如果能簡單根據過去股價預測未來股價,很多人早發大財了。
如果working model不對的話,那麼在一個具體的data set上,因為隨機性的原因做prediction的時候完全有可能training sample size越小預測效果越好,因為working model的prediction有系統性偏差,更多的training data只會固化prediction中的偏差。看到樓上還有說數據多所以overfitting的,尿都嚇出來了,svm在大量數據下性能不好主要來自於優化的維數過大,the curse of dimensions, 跟方法本身沒有關係,任何統計模型一定是訓練數量越大越準確,當然有的要考慮數據的平衡分布問題。 樓主所說的,可能是時間序列的採樣數,那玩意我接觸不多,但是考慮到雜訊因素,還有feature的提取,可能會短一點好?假設沒有漂移的話。這個問題跟是libsvm沒有關係,那個只是個library而已
你用的是svm, 還是svr,還是svdd?分類,回歸,分布估計,是哪種?
特徵是如何處理的,有沒有做歸一化,如果做了,如何做的?
股票價格有明顯的時間特徵,你是怎麼處理時間模型的?
測試集和訓練集是怎麼做的?用了交叉驗證沒有?
libsvm的核函數是什麼,參數如何選取?
這些東西不搞明白,垃圾進,垃圾出....
另外,目前所有的答案都是沒寫過svm的人回答的,他們沒做過時間序列分析,連自回歸模型都沒提到,毫無任何價值。
順便告訴你,用機器學習預測股票價格基本上是扯淡的事,二十年來這個方向發了上萬篇論文,除了養活幾千個騙經費的學者,沒產生任何價值。不要在這上面浪費時間了,沒用!!!
請不要做任何用機器學習預測金融行為的東西,除非你是超級大牛,否則只能被同行認為是sb...調參數C
我同意 @Jack Diamond 的回答,就不多說了,跑個題吧。
最近經常接到邀請回答類似的問題,題主都在應用統計方法的時候出現了一些「意外」的結果,然後到知乎來問。我是很不能理解這種行為的,特別是題目描述里還有時出現「。。。」這樣的符號,很讓人無語。
在知乎這個地方問統計學,在我看來只有兩種問題有意義:一個是一些概念性的或者高層次的問題,例如統計學中「矩」這個概念是怎麼引入的?它為什麼被稱為矩?它與物理意義上的矩有什麼相同與不同?或者 為什麼許多變數可以用正態分布很好地描述? 如果問的得當,很能讓人有興趣回答。還有一種問題是關於具體的應用,這也可以。但如果題主希望得到很好的答案,一定要在問題描述中將問題給講的清清楚楚。試過了什麼模型,具體是怎麼做的,有沒有詳細初步的結果,有沒有和知友一起探索問題的意願,做不到這些真的很難讓人有興趣回答。
為什麼對具體應用問題這麼苛刻呢?因為在我看來這就屬於統計諮詢,不付費也就罷了,連具體的問題都不講清楚,詢問的語氣還不注意,誰願意花時間幫你看呢?
我的回答和問題毫無關係,請點擊「沒有幫助」或摺疊。謝邀。其實這類問題,沒有真正數據在手,任何答案都是猜測的,不過當然是educated guess。。。很多人回答了,我不加答案,但跑個題。。。
金融的數據需要實時訓練的,你真的認為svm是適合嗎?svm每一次都要從頭來訓練,你覺得足夠快適應市場變化嗎?金融數學有自己的體系,跟機械學習不太一樣的。。。
求摺疊表示從來不相信演算法做股票預測。之前曾經用MATLAB的NARX模型擬合股票趨勢。利用20天數據來預測下一天數據。模型經過大量數據訓練後,能夠和真實價格很接近。但這能代表什麼呢?完全沒有意義。基於已知數據的擬合,是估計不了未來的趨勢的。
如果題主說的是訓練樣本的錯誤的話,那當然是這樣的。從函數擬合的角度來看,同樣模型的情況下,少量數據的擬合當然更容易。
在做預測的時候,通常把數據樣本分成訓練集和預測集。
訓練集數據用於模型的建立,而預測集用於模型的檢驗。如果訓練集數據過少的話,回帶誤判率和回歸效果都會更好,但是容易出現「過擬合」的現象,也就是訓練集「訓練擬合」得很好,但是預測的話偏差可能很大;而訓練集數據過多的話,無疑是對模型提出了「更高」的要求,那麼擬合和判別效果都會受到影響。
因此在做數據建模的時候,訓練集和預測集樣本量的選取很重要
因為你獲得不了全部的feature。雖然你加了一些新的feature,但實際影響股票價格的feature還有非常非常多,所以你預測的不準,放棄這個想法吧,這跟模型無關,如果說能夠有種準確的方法來預測股市走向,還要trader這個職業幹嘛,實際上投行到目前為止還是靠人來搞交易,各種量化分析方法都在不斷的證明自己的不靠譜
這麼多回答的不知道有幾個自己做過實盤的,也不知道有幾個在實盤上運用或者模擬過的。鄙人公司的小夥子之前說起來這個高大上,鄙人去後測給他看,用事實告訴他什麼叫做方向性錯誤。
簡單說:
經歷越多,看得越透。詳細說:SVM一開始年輕氣盛,非常願意發表意見,也屢有斬獲。只是隨著時間的推移,她看到的越來越多,也越來越迷茫,發表的觀點越來越模糊。慢慢的,她明白了,未來不可預測,股價不是漲就是跌。第一點,評價方式就有問題,或者說差收斂所需的最小樣本量太太太多. 應用於股市時,20天的數據少得簡直可笑了. 你的模型就算在20天全部預測准了(何況都很難了)也趨近於毫無意義. 我預測個北美大學籃球聯賽的排位都要把ESPN上接近五年的數據抓下來以不同間隔年數測試,20天之於股市?
第二點,這涉及到應用於股市本身了,我們當然不能說間隔交易日的數據毫無相關性,但我可以很明確地說: 相關的必定是信息中的特定的也是相對少的一部分. 所以呢,並不是feature選得越多越好,畢竟這不是歌曲推薦系統之類的可以讓設計者基本抓取關聯要素的應用. 你要是把kdj, obv,還有所有你能找得到的參數都考慮了,我覺得效果是一定不會有隻考慮少數幾種參數的好的,因為參數選得越多越有可能覆蓋掉關鍵信息. 另外,這些參數本身就是經過運算的,它們就是為了過濾不重要信息而生的,我們有什麼必要又再讓它們相互權重相加? 當然,題主要是直接從交易量,買賣最高,最低,均,中位價這些基本信息入手的話我也就不好評價什麼了,畢竟證明不存在這樣一個預測準確率達標的模型比證明其存在可能還要難.我覺得題主問題還是沒有說清楚。你說的準確率是怎麼評估的?如果說是用訓練集來評估,題主出現這種情況是可以理解,因為訓練集數據差異性變大了。如果說是另外有數據(測試集)來測試,出現這種情況就要分開考慮了,你可以先看看訓練集的準確率是多少。如果是訓練準確率高,而測試集低,這樣的情況我們一般是需要更多的訓練數據使得模型更合理。如果說訓練集和測試集準確率都很低,你就需要考慮更多更好的特徵。另外,對於數據太少情況,的確你還不如直接用最近鄰來做,svm訓練沒什麼意義。
我猜你用了libsvm的K折交叉檢驗,而且準確率是交叉驗證的準確率。
例如股票市場預測,在一段時間內可能是穩定的,這樣在短時間內你的SVM模型可能是相對準確的,因為你找到了這個pattern。但是股市是多變的,這個pattern隨著時間已經變化了,你的模型相對未來錯誤就會增加。
而交叉驗證若隨機分配訓練和要驗證集,則真正忽略了時間序列上的關係,打破時間順序進行預測,所以數據越少,時間範圍就越短,pattern就越穩定。
並不是說交叉驗證結果不能用,但是那只是用於調整模型,真正模型的性能還是看在測試集上的表現。
看了這麼多,就沒人提到預測的本質,只有有規律的數據才可以去談預測,股票價格僅僅從數值上來看,它是非平穩序列,即它的統計特徵隨時間的變化而變化,找不到一個總體的統計規律,換句話說,僅從股票價格去做時間序列的預測,就是用毫無規律的數據去做預測,這是毫無實際意義的,正因為股票價格數據沒有規律,所以下一個時刻的股票是漲是跌都有可能。對於股票價格的預測,不能僅僅從股票價格本身的時間序列變化去預測,還需要考慮其他社會因素(國家政策、企業發展規劃等等)
謝謝邀請。大家都提到了這一點:需要更多的細節。比如:你說的精度是訓練集上的,還是測試集上的? 參數選擇時,你是否做了cross validation? 訓練集和測試集是怎麼產生的?
固定模型,增加訓練樣本,訓練精度降低是有可能的,直觀上講是因為訓練演算法需要cover的情況有可能增加,困難也就更大了。
如果是測試精度降低,可能的原因是測試集和訓練集有差異。比如說,訓練演算法可能focus在fit新加入訓練集的那些數據,但是類似的數據並未出現在測試集中。這完全取決於你生成分割平面的方法。傳統概念的SVM非常傻,只適用於組間分離性非常好的數據集。你加的數據一多,組和組之間出現混雜的情況,SVM就會抽掉。我現在比較喜歡最弱智的最近距離法。
推薦閱讀:
※如何認識和看待人工智慧?人工智慧的巔峰是什麼?
※人工智慧是什麼?
※人工智慧的交易系統具體是什麼樣的理念,或者模式?
※有哪些類似於地平線或寒武紀的公司?
※微軟小冰智能聊天是如何實現的?