[問題] 時間序列資料的訓練集切法

看板DataScience作者 (Adolph)時間5年前 (2019/04/11 22:29), 5年前編輯推噓6(6030)
留言36則, 3人參與, 5年前最新討論串1/4 (看更多)
作業系統: Win 10 問題類別: RNN/CNN 使用工具: Python3.6 + Keras/TensorFlow 問題內容: 各位大大晚安, 小弟想請教, 如果我的資料如下所示(共1,000筆, 只是示意): index date value 0 20190101 5.1 1 20190102 6.6 2 20190103 4.8 3 20190104 2.7 ... ... ... ... ... ... 999 2021xxxx 12 而我要以過去20天的資料預測第21天的數值, 如: INDEX X Y 0 [x0, x1, x2... x19] x20 1 [x1, x2, x3... x20] x21 ... ... ... ... ... ... 979 [x979, x980... x998] x999 假設我要拿總資料的80%來當作訓練集, 請問我可以將INDEX打亂後再拿裡面的80%出來嗎? 或者非得拿INDEX[0:784]當作訓練集呢? 若打亂後再加以訓練, 其測試集(test)的MAE可以比未打亂的MAE少50%, 所以才有這樣的疑問, 我在書上及網路上看到的時間序列模型都是以INDEX[0:784]作為訓練集, 但它們都沒有提及原因, 只有一個人說到"你總不會想拿那麼遠的資料做測試吧". 如果我就是想這樣建模型, 請問會有甚麼潛在的問題嗎? 請各位大大不吝賜教, 謝謝orz -- -- 發現不論哪個姑娘的名字,後頭加個".rmvb"或者".avi",看上去頓時就有了一種..... 別樣的曖昧與風騷…… #1EkG2-EJ (Gossiping) -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.32.19.228 ※ 文章網址: https://www.ptt.cc/bbs/DataScience/M.1554992957.A.F64.html ※ 編輯: avonasac0800 (114.32.19.228), 04/11/2019 22:30:20 ※ 編輯: avonasac0800 (114.32.19.228), 04/11/2019 22:30:34

04/12 01:15, 5年前 , 1F
我過去的經驗是打亂的表現會比較好,不過也得看hidden s
04/12 01:15, 1F

04/12 01:15, 5年前 , 2F
ize和 layer number的搭配,這種應該一層就很有效了
04/12 01:15, 2F

04/12 01:24, 5年前 , 3F
我沒講到重點,RNN的bp只在[n1…n20]間執行,所以到下一
04/12 01:24, 3F

04/12 01:24, 5年前 , 4F
個index時,grad會重新計算,RNN不會記錄跨index的因果關
04/12 01:24, 4F

04/12 01:24, 5年前 , 5F
係,差別在於訓練時index打亂讓權重比較不會容易往某一個
04/12 01:24, 5F

04/12 01:24, 5年前 , 6F
趨向靠攏
04/12 01:24, 6F

04/12 01:26, 5年前 , 7F
如有錯誤 還請大德們不吝指正 感謝
04/12 01:26, 7F
謝謝合唱大的分享, 您提到RNN不會紀錄跨index的關係, 那如果我今天是以CNN來訓練這樣的資料 (MAE又會少一個數量級) 請問這樣子打亂後, 模型是不是反而會學到不應該學到的東西呢? 會這樣問是我將0:784打亂後訓練出的CNN模型, 在INDEX 784後的表現比baseline還要差勁的關係。 ※ 編輯: avonasac0800 (42.73.12.202), 04/12/2019 08:55:17

04/12 11:46, 5年前 , 8F
我猜測是learning rate 同時也注意一下 loss的起伏 也許
04/12 11:46, 8F

04/12 11:46, 5年前 , 9F
有overfitting的可能性
04/12 11:46, 9F

04/12 11:52, 5年前 , 10F
有個測試方法 你取訓練集最後100或200個來訓練,看看效果
04/12 11:52, 10F

04/12 11:52, 5年前 , 11F
是不是和整個訓練集差不多,如果是,代表這個dataset具有
04/12 11:52, 11F

04/12 11:52, 5年前 , 12F
短期時效性,遠期的資料根本用處不大
04/12 11:52, 12F

04/12 11:53, 5年前 , 13F
因此打亂的效果並不好
04/12 11:53, 13F

04/15 00:45, 5年前 , 14F
簡單來說 打亂就是偷看答案 而且不符合你想要預測模式
04/15 00:45, 14F

04/15 00:45, 5年前 , 15F
因為基本上你預測方式就是看歷史十筆預測第十一筆 但是
04/15 00:45, 15F

04/15 00:45, 5年前 , 16F
為什麼你隨機打亂mse低 就是因為model已經偷看過答案 在
04/15 00:45, 16F

04/15 00:45, 5年前 , 17F
訓練時 假設訓練到一組data 是看 第二筆倒地十一比預測
04/15 00:45, 17F

04/15 00:45, 5年前 , 18F
第十二筆 然候你test data 好死不死因為隨機抽 有一比是
04/15 00:45, 18F

04/15 00:45, 5年前 , 19F
看第一筆倒地十筆預測地十一比 因為這組data 跟 train
04/15 00:45, 19F

04/15 00:45, 5年前 , 20F
data 相似度極高 預測的範圍基本不會差太多 導致mse較
04/15 00:45, 20F

04/15 00:45, 5年前 , 21F
低 但另一種切割方式 造時間切兩半 沒有這個問題
04/15 00:45, 21F

04/20 00:33, 5年前 , 22F
你可以用 [785:] 當測試集,然後訓練集拿 [0:784] 中的
04/20 00:33, 22F

04/20 00:33, 5年前 , 23F
80%,這樣就可以測試在同樣的測試集的情況下
04/20 00:33, 23F

04/20 00:33, 5年前 , 24F
到底是拿不要打亂的 80% ([0:627]) 還是拿打亂的 80%
04/20 00:33, 24F

04/20 00:34, 5年前 , 25F
來訓練,會在同樣的測試集 [784:] 表現最好呢?
04/20 00:34, 25F

04/20 00:35, 5年前 , 26F
嗯,不要打亂的 80% 也可能是 [157:784] ,這樣跟測試集
04/20 00:35, 26F

04/20 00:35, 5年前 , 27F
比較近一些
04/20 00:35, 27F

04/20 00:37, 5年前 , 28F
假設這樣做之後打亂真的還表現比較好,就能反駁yougigun
04/20 00:37, 28F

04/20 00:37, 5年前 , 29F
的偷看說了
04/20 00:37, 29F

04/20 00:40, 5年前 , 30F
至於為何測試集一定要拿最後呢?因為你最後學完的模型
04/20 00:40, 30F

04/20 00:40, 5年前 , 31F
拿出來用的時候本來就是拿來預測「未來」,所以本來就會
04/20 00:40, 31F

04/20 00:40, 5年前 , 32F
是在所有訓練資料的後面
04/20 00:40, 32F

04/23 06:47, 5年前 , 33F
s大 你提的兩種方式在他的定義點 都是屬於沒打亂 我想
04/23 06:47, 33F

04/23 06:47, 5年前 , 34F
解釋的是為什麼打亂MSE會下降的沒打亂多 再來不能因為下
04/23 06:47, 34F

04/23 06:47, 5年前 , 35F
降比較多 就選擇打亂的方式訓練模型 因為同你所說 是預
04/23 06:47, 35F

04/23 06:47, 5年前 , 36F
測未來 切資料應該要以時間點切
04/23 06:47, 36F
文章代碼(AID): #1Shqyzza (DataScience)
文章代碼(AID): #1Shqyzza (DataScience)